CSS学习笔记 - 样式优先级

本文为我自己的学习心得与体会,如果你有不同见解,欢迎在下方评论区写下你的想法

在编写Web程序时,为了使程序按照设计出的模样显示在页面上,程序员需要为页面上的HTML元素设置样式。在编写样式时,既可以把样式规则写在HTML文件中,也可以把这部分有关样式规则的代码抽取出来,然后封装到一个单独的文件中,这个文件就是CSS文件。
CSS的语法很简单,它包括两部分:选择器和包含若干属性与相应属性值的集合。常见的选择器包括:元素ID选择器、元素Class选择器、元素属性选择器、元素类型选择器、descendant选择器、child选择器以及pseudo选择器。在使用时,只要通过设置选择器来锁定想要设置样式的元素,就可以把页面设计中对应的显示样式应用到该元素上。但是如何锁定某一个元素呢?如果多个选择器指向同一个元素,而它们又对同一个属性进行了设置,那不就冲突了吗?问题似乎有些棘手,不过不要紧,CSS早已规定了一些规则来解决这些问题,要玩好CSS,首先要了解这些有趣的规则。

CSS优先级规则1 - 我是我程序的主宰(绝大多数情况下...)

浏览器支持的CSS来源除了程序员自己编写的样式外,还有另外两种,分别是user agent样式和user样式。
user agent样式表是浏览器自带的默认样式表,当一个Web程序自身不提供样式表时,就是这个user agent样式表决定着HTML元素显示时的样子。如果你希望完全接管HTML元素的样式设置,网上有许多现成的CSS reset样式表可以下载使用,它的作用是把浏览器提供的默认样式全部覆盖掉,去掉HTML元素默认的任何特殊样式(比如元素间的间距,文字的字体等)。
user样式表是用户手动设置的样式表,作用是提供将页面字体调大之类的辅助功能。user样式表的优先级高于user agent样式表。
而程序员自己编写的样式表叫做Author样式表,它在这三种样式表来源中优先级最高。当这三种样式表来源中的某条样式规则相互冲突时,只有Author样式表中的规则会生效。但是user样式表有一张超级王牌可以用,那就是!important,user样式表中有!important后缀的样式规则拥有最高的优先级,任何其他冲突的规则都要给它让路。

CSS优先级规则2 - 后来者居上

除了不同CSS来源之间存在优先级以外,同一个CSS来源中,CSS代码的顺序也是有先后之分的。如果多个相同选择器定义的规则相互冲突,那么写在最后的选择器中的那条规则会生效。如果这些选择器是写在不同的CSS文件中,然后分别导入到HTML文件中,那么后导入的CSS文件中的那条规则会生效。

CSS优先级规则3 - 越具体越好

同一个CSS来源中,当遇到多个不同选择器定义的规则相互冲突时,应该如何取舍呢?CSS给出了ABC评分体系来解决它。ABC分别表示三个纬度的得分:选择器中指定了多少个元素ID,A纬度就有多少分;选择器中指定了多少个元素Class和元素Attribute,B纬度就有多少分;选择器中指定了多少种元素Type,C纬度就有多少分。三个纬度的得分从左到右并列在一起就是一个选择器的最终得分,得分越高,优先级越高。
这个规则看起来复杂,但其实不难理解,它的目的是让描述的最具体的样式规则拥有最高的优先级,这也符合程序员编写样式时的实际需要。

CSS优先级规则4 - 继承来的样式,适合的才收下

在HTML页面上,显示在元素A里面的元素B,会继承CSS文件中为元素A设置的样式,但不是全部,元素B会有选择的收下部分样式规则。元素B会收下诸如背景颜色、文字大小的样式设置,但不会收下边距设置、间距设置和边框设置。这样做不是任性,而是为了用更少的代码来表达想要的样式效果。以边框设置为例,如果对元素A设置了一个绿色的粗边框,你显然不会想让元素B也在自己的周围套一个小的绿色的粗边框,那最简单的做法就是不继承这个样式。
CSS的世界五彩缤纷,样式设置有非常多的可能性,当考虑是否会被真的继承时,要根据具体的情况进行分析。
样式规则的继承看起来随性,不过也不是毫无规则可循,CSS的初心是通过最简洁的代码来实现最精准的样式,我们了解了这个小心思,在编写CSS代码时,也就可以对样式规则的继承行为有更好的预判了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355