常见CSS选择器的权重和优先级

时间:2021-11-15 12:11:37

一、常见CSS选择器

【元素选择器】

1、通配选择器:*(匹配所有元素)

a、效率不高,页面上的标签越多,效率越低,所以页面上最好不要出现这个选择器

2、标签选择器:li(匹配标签为li的元素)

a、所有标签都能够当做选择器,比如body、h1、dl、ul、span等等

b、不管这个标签藏的多深,都能够被选择上

c、选择的是所有的,而不是某一个。所以是共性,而不是特性

3、ID选择器:#content(匹配ID属性值等于content的元素)

4、类选择器:.list(匹配class属性包含list的元素)

a、class可以重复,也就是说,同一个页面上可能有多个标签同时属于某一个类

b、同一个标签可以同时携带多个类,多个类用空格隔开,多个样式有冲突的,以css中后出现的为准

c、不要去试图用一个类名,把某个标签的所有样式写完。这个标签要多携带几个类,共同造成这个标签的样式

d、每一个类要尽可能小,有“公共”的概念,能够让更多的标签使用

【关系选择器】

1、后代选择器:#content h3(匹配ID为content的元素内所有的h3元素)

a、空格就表示后代,强调一下:选择的是后代,不一定是儿子

b、当要把某一个部分的所有的什么,进行样式改变,就要想到后代选择器

2、子元素选择器:#content>h3(匹配ID为content的元素子级的h3元素)

3、交集选择器:h3.content(匹配class为content的h3元素)

a、交集选择器没有空格

b、交集选择器可以连续交(一般不要这么写)

c、交集选择器,我们一般都是以标签名开头,比如div.haha  比如p.special

4、并集选择器(分组选择器):h1,h2(匹配所有的h1和h2元素)

5、相邻选择器:h1+h2(匹配 h1 元素之后紧跟的 h2 元素)

6、兄弟选择器:h1~h2(匹配 h1 元素之后所有的 h2 元素)

【属性选择器】

1、a[class]:匹配具有 class 属性值的 a 的元素

2、a[target="_blank"]:匹配 target 属性值等于 _blank 的 a 元素

3、a[href^="https"]:匹配 href 属性值以 https 开头的 a 元素

4、a[href$=".jpg"]:匹配 href 属性值以 .jpg 结尾的 a 元素

5、a[href*="baike"]:匹配 href 属性值包含 baike 的 a 元素

6、a[class~="abc"]:匹配 class 属性值以空格为分隔符,其中有一个等于 abc 的 a 元素

伪类选择器和伪元素选择器使用频率不高,本文暂不说明,详细示例可参考:https://www.haorooms.com/tools/css_selecter/

二、CSS选择器权重和优先级

共分为5个等级 :

第1等:提升指定样式规则的应用优先权,如:color:red !important,权值为10000(不建议使用)

第2等:代表内联样式,如: style="xxx",权值为1000

第3等:代表ID选择器,如:#content,权值为100

第4等:代表类,伪类和属性选择器,如.content,:hover,[attribute],权值为10

第5等:代表元素选择器和伪元素选择器,如div,p,权值为1

通用选择器(*),子选择器(>)和相邻同胞选择器(+)并不在这四个等级中,所以他们的权值都为0

三、CSS选择器权重计算

常见CSS选择器的权重和优先级

1、元素被两个css样式选中,选择权重大的样式,如果权重一样,以css中后出现的为准

2、元素没有被css样式选中,要显示继承的样式时,使用就近原则

2、继承的样式权重为0(color、 text-开头的、line-开头的、font-开头的样式都可以继承)

判断一块内容的样式是什么?按照以下步骤:

常见CSS选择器的权重和优先级

HTML代码:

<div id="content">
<div id="main-content">
<h2>CSS简介</h2>
<p>CSS是一组格式设置规则,用于控制Web页面的外观。</p>
<div class="paragraph">
<h2 class="first">使用CSS布局的优点</h2>
<p>1、表现和内容相分离 2、提高页面浏览速度 3、易于维护和改版</p>
</div>
</div>
</div>

CSS代码:

/* 100(#main-content) + 10(class="paragraph") + 1(h2) = 111 */
#main-content [class="paragraph"] h2 {
color:yellow;
} /* 100(#main-content) + 1(div) + 10(.paragraph) + 1(h2) = 112 */
#main-content div.paragraph h2 {
color:orange;
} /* 1(body) + 100(#content) + 1(div) + 10([id="main-content"]) + 1(h2) = 113 */
body #content div[id="main-content"] h2 {
color:green;
} /* 1(div) + 100(#main-content) + 1(div) + 10(.paragraph) + 1(h2) + 10(.first) = 123 */
div#main-content div.paragraph h2.first {
color:pink;
} /* 100(#content) + 100(#main-content) + 1(h2) = 201 */
#content #main-content>h2 {
color:blue
} /* 100(#content) + 1(div) + 100(#main-content) + 1(h2) = 202 */
#content div#main-content h2{
color:red;
}

试一试