CSS实践:增加CSS选择器优先级、全局调整盒模型

2021-03-0510:48:20网页制作Comments2,061 views字数 1055阅读模式

增加CSS选择器优先级

在平常开发中,会有不少几率遇到需要增加CSS选择器优先级的场景。如何实现才会更好,比如说需要增强下面这个CSS选择器优先级:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

.bar { background: #DDD; }
复制代码

我相信不少人会选择增加嵌套的方法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

.foo .bar { background: #DDD; }
复制代码

或者选择增加一个标签选择器:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

div.bar{ background: #DDD; }
复制代码

这些都不是最好的方法,因为上述方法会增加了耦合导致可维护性的降低,如果后续父节点类名更改了,或者换成不同的标签,都会影响到样式效果。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

最佳方法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

  • 重复选择器自身
.bar.bar { background: #DDD; }
复制代码
  • 借助存在的属性选择器
.bar[class] { background: #DDD; }
#bar[id] { background: #DDD; }
复制代码

这样即提高了优先级,又不会增加耦合度。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

全局调整盒模型

box-sizing的默认值是content-box,这意味着指定的宽高都只会设置内容盒子的大小。如果设置了内边距或者边框都会使该元素宽高大于指定的宽高值。最笨的办法就是减少widthheight的值,这不是一个理想的办法,因为这是通过改值试出来的,而且往往难以解释这个值生成的原因。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

设置box-sizing值为border-box,这样heightwidth属性会设置为内容、内边距以及边框的大小总和,这就解决了上述问题。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

.main{
    box-sizing: border-box
}
复制代码

这样main元素就更好符合预期了,但其他元素还会遇到相同的事情。所以将其设置为全局文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

*, 
::before,
::after{
    box-sizing: box;
}
复制代码

这样就能给页面上所有元素与伪元素都设置border-box了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

但这样还是有些问题,现在很多业务都会使用带样式的第三方组件,就可能会因此破坏其中一些组件的布局,尤其是当第三方组件在开发css的过程中没有考虑到使用者会修改盒模型。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

利用继承就能解决上述问题了:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

:root{
    box-sizing: border-box;
}

*, 
::before,
::after{
    box-sizing: inherit;
}
复制代码

盒模型通常不会被继承,但使用inherit关键字会强制继承。可以在必要时选中第三方组件的顶级容器,将其恢复为content-box。这样组件的内部元素就会继承该盒模型:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

.third-component{
    box-sizing: content-box;
}

作者:zhangwinwin文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/zhizuo/21010.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/zhizuo/21010.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定