CSS选择器优先级

选择器优先级

当两个规则都作用到了同一个html元素上时,如果定义的属性有冲突,那么应该用谁的值的,这时就需要用到选择器优先级。

看下面几个例子:

 html
<ul class="shopping-list" id="awesome">
    <li><span>Milk</span></li>
    <li class="favorite" id="must-buy"><span class="highlight">Sausage</span></li>
</ul>
css
ul {
    color: red;
}
li {
    color: blue;
}

网页显示:   ▪Milk

                      ▪Sausage

html
<ul class="shopping-list" id="awesome">
    <li><span>Milk</span></li>
    <li class="favorite" id="must-buy"><span class="highlight">Sausage</span></li>
</ul>
css
ul#awesome #must-buy {
    color: red;
}
.favorite span {
    color: blue!important;
}

在属性后面使用 !important 会覆盖页面内任何位置定义的元素样式。

网页显示:  ▪Milk

                     Sausage

<ul class="shopping-list" id="awesome">
    <li><span>Milk</span></li>
    <li class="favorite" id="must-buy"><span class="highlight">Sausage</span></li>
</ul>
ul.shopping-list li .highlight {
    color: red;
}
ul.shopping-list li .highlight:nth-of-type(odd) {
    color: blue;
}

后代选择器优先于类选择器

网页显示:  ▪Milk

                      Sausage



### CSS选择器优先级规则 CSS选择器优先级决定了当多个样式规则应用于同一个HTML元素时,哪一个规则会被应用。理解这些规则对于编写可维护和高效的CSS至关重要。 #### 计算优先级的方法 每个选择器都有一定的权重,具体如下: - **内联样式**:`1000` - **ID选择器**:`100` - **类选择器、伪类和属性选择器**:`10` - **标签选择器和伪元素**:`1` 如果两个选择器的选择符数量相同,则更晚定义的那个会覆盖较早的一个[^2]。 #### 特殊情况处理 浏览器内置的用户代理(UA)样式表提供了默认样式的设定,在大多数情况下可以被开发者自定义的样式所覆盖。然而,某些特定场景下(比如按钮的颜色),UA样式可能拥有更高的优先权,除非明确指定了相反的指令。 #### 使用JavaScript获取优先级 通过编程手段也可以查询给定属性的实际优先级别。例如,利用DOM API中的`getPropertyPriority()`方法来返回指定CSS属性是否有!important标记[^4]: ```javascript ps.println("priority: " + styleDeclaration.getPropertyPriority(property)); ``` 此代码片段展示了如何打印出某个CSS属性是否带有高优先级标志! #### 实际案例分析 考虑一段简单的HTML结构及其对应的CSS: ```html <div id="main-content"> <p class="highlight">This paragraph has special styling.</p> </div> ``` ```css /* Example of different selectors */ #main-content p { color: blue; } /* Specificity value: 101 */ .highlight { font-weight: bold; } /* Specificity value: 10 */ p { text-decoration: underline; } /* Specificity value: 1 */ ``` 在这个例子中,尽管三个选择器都匹配到了相同的 `<p>` 元素,但由于它们各自的特异性不同,最终的效果将是字体加粗且文字颜色变为蓝色,而不会加上下划线效果.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值