CSS选择器与优先级浅析

CSS选择器是用于定位文档中的元素所在以便设定相应的样式,常见的选择器包括:基础选择器、组合选择器、属性选择器、伪类选择器和伪元素等。
而优先级则是CSS样式在浏览器中被解析的先后顺序

1.CSS选择器

  • 什么是选择器
    CSS选择器是用于定位文档中的元素所在以便设定相应的样式的代码
  • 选择器的意义
    在对文档设计样式时进行精准地定位
  • 选择器的分类
    选择器的类型可大致划分为:基础选择器、组合选择器、属性选择器、伪类选择器和伪元素等
    • 基础选择器
选择器 含义 实例
* 通用选择器,匹配任何元素 *{font-size:16px;}
E 标签选择器,匹配所有使用E标签的元素 p{font-family:arial;}
.error class选择器,匹配所有class属性中包含error的元素 .error{font-weight:bold;}
#correct id选择器,匹配所有id属性值为correct的元素 #correct{font-style:italic;}
  • 组合选择器
选择器 含义 实例
E,F 多元素选择器,同时匹配所有E元素或F元素 div,p{background-attachment:fixed;}
E F 后代元素选择器,匹配所有属于E元素的后代F元素 div a{background-color:blue;}
E > F 子元素选择器,匹配所有E元素的子元素F div>p{background-image:url(xxx.gif)}
E+F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F p+div{background-position:x% y%}
  • 属性选择器
选择器 含义 实例
E[att] 匹配所有具有att属性的E元素 p[style]{background-repeat:repeat-y;}
E[att=val] 匹配所有att属性等于“val”的E元素 div[class="c1"]
E[att~=val] 匹配所有att属性具有多个空格分隔的值、其中一个值等于“val”的E元素 div[class~=c2]
E[att|=val] 匹配所有att属性具有多个连字号分隔(hyphen-separated)的值、其中一个值以“val”开头的E元素 p[lang|=en]

【注】除了上表提到的属性选择器之外,还包括一些CSS3新添加的属性选择器,这些留待日后更新

  • 伪类选择器
选择器 含义 实例
E:first-child 匹配父元素E下的第一个子元素 div:first-child{text-align:center;}
E:link 匹配所有未被点击的链接
E:visited 匹配所有已被点击的链接
E:active 匹配鼠标已经按下、还没有释放的E元素
E:hover 匹配鼠标悬停其上的E元素
E:focus 匹配获得当前焦点的E元素
E:lang(c) 匹配lang属性等于c的E元素
  • 伪元素
选择器 含义 实例
E:first-line 匹配E元素的第一行 p:first-line{color:red;}
E:first-letter 匹配E元素的第一个字母 .c1:first-letter{color:blue;}
E:before 在E元素之前插入生成的内容 .ctn before{content:"";display:block;;height:40px;width:40px;}
E:after 在E元素之后插入生成的内容 .ctn after{content:"";display:block;;height:40px;width:40px;}

2.CSS的优先级

【注】
本篇幅的知识点是根据网站的资料整合而成,是国内开发者关于CSS选择器优先级的一般看法,特点是计算简便,但存在一定的缺陷性。
这里,非常感谢饥人谷的夏东旭童鞋在阅览笔者的文章后,给予我关于CSS选择器的优先级的指正,夏东旭童鞋的文章更加具有参考价值,在此附上其文章地址
至于两种计算方式的计算优劣以及适用情况,由于笔者还算新手,视野未开,容日后对本文做进一步完善。

css优先级,即是指CSS样式在浏览器中被解析的先后顺序

  • 选择器优先级的规定
    关于优先级的规定,常用的方法是给不同的选择器分配权值:
    • id选择器优先级很高,权值为100
    • class、属性和伪类选择器的权值为10
    • 标签选择器权值为1
      在比较样式的优先级时,只需统计选择符中的id、class和标签名的个数,然后把相应的权值相加即可,最后根据结果排出优先级
    • 权值较大的优先级越高
    • 权值相同的,后定义的优先级较高
    • 样式值含有!important,优先级最高

div .class1 #people的权值等于1+10+100=111
.class2 li #age的权值等于10+1+100=111
如果第二个选择器后定义样式,则第二个的优先级要高

  • 后代选择器的定位原则
    在这里介绍一下对于后代选择器,浏览器是如何查找元素的呢?
    浏览器CSS匹配不是从左到右进行查找,而是从右到左进行查找。
    比如DIV#divBox p span.red{color:red;},浏览器的查找顺序如下:先查找html中所有class='red'的span元素,找到后,再查找其父辈元素中是否有p元素,再判断p的父元素中是否有id为divBox的div元素,如果都存在则匹配上。
    浏览器从右到左进行查找的好处是为了尽早过滤掉一些无关的样式规则和元素。

参考资料

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

推荐阅读更多精彩内容