⭐️ CSS 选择器

⭐️ 基础选择器

ID 选择器 #app
类选择器 .container
标签选择器 divp
一般兄弟选择器 p ~ span 匹配同一父元素下,p 元素后的所有 span 元素
紧邻兄弟选择器 h1 + p 紧贴h1 后面的第一个 p 标签。同级标签,之间不能有其他标签
并集选择器 .one, p 给 类名 为 one,标签为 p 标签的元素共同设置
子代选择器 ul > li ul 标签下的下一个层级的 li ,并不是所有
后代选择器 li a 和子代选择器不同,可以选择多层嵌套的后代元素,无论嵌套层次有多深
通配符选择器 *

⭐️ 属性选择器

名称 子类 语法 说明 例子
简单属性选择器 element[attribute] 选择具有指定属性的元素,无论属性值是什么 a[href]会选择所有带有 href 属性的 <a> 元素
具体属性值选择 element[attribute="value"] 选择具有指定属性且属性值完全匹配的元素 input[type="text"]会选择所有 type 属性值为 "text" 的 <input> 元素
部分属性值选择(包含特定词汇) element[attribute~="value"] 选择属性值中包含指定词汇的元素。属性值可以是用空格分隔的多个值,只要其中一个值包含指定词汇,该元素就会被选中 p[class~="important"]会选择 class 属性值中包含 "important" 的 <p> 元素

备注: p 标签的 class 属性中得包含 important 这个单词,且此单词必须独立存在。

正例: <p class="text-center important">...</p> 反例: <p class="text-center !important">...</p> | | 子串匹配属性选择器 | 以指定值开头 | element[attribute^="value"] | 匹配属性值以指定值开头的元素 | a[href^="https"]会选择所有 href 属性值以 "https" 开头的 <a> 元素 | | | 以指定值结尾 | | 匹配属性值以指定值结尾的元素 | img[src$=".jpg"]会选择所有 src 属性值以 .jpg 结尾的 <img> 元素 | | | 包含指定值 | | 匹配属性值中包含指定值的元素 | p[title*="example"]会选择所有 title 属性值中包含 "example" 的 <p> 元素 | | 特定属性选择类型(竖线匹配) | | element[attribute|="value"] | 选择带有指定属性,并且属性值以指定值或者以指定值加横杠(value-)开头的元素。通常用于选择语言属性等。 | [lang|="en"]会选择所有 lang 属性值为 "en" 或者以 "en-" 开头的元素 | | 条件连写 | | element[key1=value1][key2=value2][key3=value3]... | 表示当前元素需要同时具备才会出现效果 | |

https://codepen.io/JingW/pen/VwoygvQ

⭐️ CSS 优先级算法

⭐️ CSS选择器匹配规则

Untitled

.mod-nav header h3 span

.mod-nav ul a

匹配规则:

⭐️ 为什么从右往左

**因为写样式是可以越级设置的,**例如 .mod-nav ul a 的这个 a 不一定是直接挂载到 .mod-nav 下的 li 上的 ,有可能像上图所示在其很深层级的位置。

GPT 回复

CSS选择器的匹配规则的解析是一个从右向左的过程,这样的解析顺序是出于性能优化的考虑。以下是详细解析原理和原因:

解析原理

1. 从右向左匹配的步骤