网页制作 
首页 > 网页制作 > 浏览文章

解决CSS样式冲突的几个办法(小结)

(编辑:jimmy 日期: 2024/11/28 浏览:3 次 )

1. 细化选择符

通过使用组合器(Combinator)将选择器的描述写得更加精确(参考CSS选择器 - MDN  ),例如对于下述代码片段,如果想给.cellphones中的.apple增加样式,只使用.apple,势必会对.fruit中的.apple也造成影响。

<div class="cellphones">
  <div class="apple"></div>
</div>
<div class="fruit">
  <div class="apple"></div>
</div>

可以使用后代组合器(Descendant Combinator)或子代组合器(Child Combinator)这种更为精确的描述。描述得越精确,优先级越高,优先级更高的描述会覆盖优先级较低的描述。

/* 后代组合器:所有后代节点 */
.cellphones .apple {
 border: 1px solid black;
}

/* 更加精确的后代组合器 */
body .cellphones .apple {
  border: 1px solid blue;
}

/* 子代组合器:直接子节点 */
.cellphones > .apple {
  border: 1px solid red;
}

如果给.apple按顺序加上上述全部样式,最终,边框将呈现蓝色。

详细的优先级规则参见CSS 优先级

2. 再写一次选择器名

本质上是上一种情况的特例。例如对于.apple,添加如下样式:

.cellphones > .apple.apple {
  border: 1px solid purple;
}
.cellphones > .apple {
  border: 1px solid red;
}

最终,边框将呈现紫色。

3. 改变CSS样式表中的顺序

对于相同类型选择器指定的样式,在CSS文件中的顺序靠后的样式会覆盖之前的样式。

例如对于下述代码中的div元素,浏览器渲染的结果会是红色的:

<div class="redBorder" class="blackBorder"></div>
.blackBorder {
  border: 1px solid black;
}
.redBorder {
  border: 1px solid red;
}

需要注意的是,尽管在HTML文件中.blackBorder出现在.redBorder后,但优先级的判断是根据他们在CSS文件中的顺序。也就是说,CSS文件中更为靠后的.redBorder才会被采用。

4. 主动提升优先级(不建议)

还有一种简单粗暴但是并不建议的办法,就是在需要使用的样式后加上关键字!important可以将样式优先级提到极高。例如:

<div class="redBorder" class="greenBorder"></div>
.greenBorder {
  border: 1px solid green !important;
}
.redBorder {
  border: 1px solid red;
}

对于上述代码,边框将显示为绿色。

使用 !important 是一个非常不好的习惯,会破坏样式表中固有的级联规则,使得调试变得非常困难!

参考资料:
优先级 - MDN
css样式冲突怎么解决 - 魔法时光机

上一篇:如何使用HTML+CSS实现TG-vision 主页制作
下一篇:CSS 中使用径向渐变实现卡券效果
一句话新闻
高通与谷歌联手!首款骁龙PC优化Chrome浏览器发布
高通和谷歌日前宣布,推出首次面向搭载骁龙的Windows PC的优化版Chrome浏览器。
在对骁龙X Elite参考设计的初步测试中,全新的Chrome浏览器在Speedometer 2.1基准测试中实现了显著的性能提升。
预计在2024年年中之前,搭载骁龙X Elite计算平台的PC将面世。该浏览器的提前问世,有助于骁龙PC问世就获得满血表现。
谷歌高级副总裁Hiroshi Lockheimer表示,此次与高通的合作将有助于确保Chrome用户在当前ARM兼容的PC上获得最佳的浏览体验。
友情链接:杰晶网络 DDR爱好者之家 南强小屋 黑松山资源网 白云城资源网 网站地图 SiteMap