CSS 选择器、优先级、可以继承的属性
一、常见选择器
CSS 中常见的选择器有:
- 基本选择器:
*(通配符)、标签选择器、.class、#id、[attr]、组合器(空格后代、>子代、+相邻兄弟、~通用兄弟)。 - 伪类选择器(单冒号):
:link:选择未被访问的链接;:visited:选取已被访问的链接;:active:选择活动链接;:hover:鼠标指针浮动在上面的元素;:focus:选择具有焦点的元素;:first-child:父元素的首个子元素;:last-child:一组兄弟元素中的最后一个元素;:first-of-type:一组同级元素中其类型的第一个元素;:not(selector):选择与<selector>不匹配的所有元素;:nth-child(n):根据元素在一组同级中的位置匹配元素;:nth-last-of-type(n):基于它们在一组兄弟元素中的位置,从末尾开始计数。
- 伪元素选择器(双冒号):
::first-letter:用于选取指定选择器的首字母;::first-line:选取指定选择器的首行;::before:在被选元素的内容前面插入内容;::after:在被选元素的内容后面插入内容;::selection、::placeholder。
- 属性选择器:
[attribute]:选择带有attribute属性的元素;[attribute=value]:选择所有使用attribute=value的元素;[attribute~=value]:选择attribute属性包含value的元素;[attribute|=value]:选择attribute属性以value开头的元素;[attribute*=value]:选择attribute属性值包含value的所有元素;[attribute^=value]:选择attribute属性开头为value的所有元素;[attribute$=value]:选择attribute属性结尾为value的所有元素。
二、优先级
相信大家对 CSS 选择器的优先级都不陌生:内联 > ID 选择器 > 类选择器 > 标签选择器。
到具体的计算层面,优先级是由 A、B、C、D 的值来决定的,其中它们的值计算规则如下:
- A:内联样式的数量;
- B:ID 选择器的数量;
- C:类选择器、伪类选择器、属性选择器的数量;
- D:标签选择器、伪元素选择器的数量。
举个例子:
#nav-global > ul > li > a.nav-link
套用上面的算法,依次求出 A、B、C、D 的值:(0, 1, 1, 3)。
比较规则:从左到右逐位比较,位数大的优先级高;位数相同则向后比较一位。
内联样式的优先级最高,如果外部样式需要覆盖内联样式,就需要使用 !important。
三、可以继承的属性
在 CSS 中,继承是指给父元素设置一些属性,后代元素会自动拥有这些属性。
关于继承属性,可以分成:
- 字体系列属性:
font、font-family、font-weight、font-size、font-style、font-variant。
- 文本系列属性:
text-indent、text-align、line-height、word-spacing、letter-spacing、text-transform、direction、color。
- 元素可见性:
visibility。 - 表格布局属性:
caption-side、border-collapse、border-spacing、empty-cells、table-layout。 - 列表属性:
list-style-type、list-style-position、list-style。 - 引用:
quotes。 - 光标属性:
cursor。
继承中比较特殊 / 无继承的属性:display、盒子模型属性(width/height/margin/padding/border)、背景属性(图片/颜色/位置)、定位属性、轮廓(outline)。
补充:CSS3 选择器还有结构性伪类(如
:empty、:target、:checked、:enabled/:disabled等)和逻辑组合伪类(:is()、:where()、:has()),扩展了选择器的表达力。



