CSS选择器有哪些?优先级如何?

171 阅读2分钟

CSS选择器有哪些?优先级?

  • id选择器(如#xxx)

  • 类选择器(如.xxx)

  • 标签选择器(如div,h1,p)

  • 相邻选择器(如h1 + p)

  • 子代选择器(如ul > li)

  • 后代选择器(如li a)

  • 通配符选择器( * )

     * { margin:0px; 
         padding:0px; 
       }
    
  • 属性选择器(如a[rel="xxx"])

      a[ href="http://www.baidu.com" ] { 
                  color: red; 
       }
    
  • 伪类选择器(如a:hover,li:nth-child)

优先级问题

内敛 > ID选择器 > 类选择器 > 标签选择器

  • 内敛样式的权值最高1000
  • ID选择器的权值为100
  • Class类选择器的权值为10
  • HTML标签选择器的权值为1
  • !important规则的优先级最大

具体到计算层面,优先级是由A,B,C,D的值来决定,计算规则如下:

  • 如果存在内敛样式,那么A = 1,否则A = 0
  • B值等于ID选择器出现的次数
  • C值等于类选择器、属性选择器和伪类出现的总次数
  • D值等于标签选择器和伪元素出现的总次数

例如:#nav-global > ul > li > a.nav-link

  • 因为没有内联样式 ,所以 A = 0
  • ID选择器总共出现了1次, B = 1
  • 类选择器出现了1次, 属性选择器出现了0次,伪类选择器出现0次,所以 C = (1 + 0 + 0) = 1
  • 标签选择器出现了3次, 伪元素出现了0次,所以 D = (3 + 0) = 3

上面算出的A 、 BCD 可以简记作:(0, 1, 1, 3)

比较规则:

  • 从左往右依次进行比较 ,较大者优先级更高
  • 如果相等,则继续往右移动一位进行比较
  • 如果4位全部相等,则后面的会覆盖前面的

无继承的属性:

  • display
  • 文本属性:vertical-align、text-decoration
  • 盒子模型的属性:宽度、高度、内外边距、边框等
  • 背景属性:背景图片、颜色、位置等
  • 定位属性:浮动、清除浮动、定位等
  • 生成内容属性:content、counter-reset、counter-increment
  • 轮廓样式属性:outline-style、outline-width、outline-color、outline
  • 页面样式属性:size、page-break-before、page-break-after