第 1章 概述 1
1.1 为什么CSS选择器很强 1
1.2 CSS选择器世界的一些基本概念 1
1.2.1 选择器、选择符、伪类和伪元素 2
1.2.2 CSS选择器的作用域 3
1.2.3 CSS选择器的命名空间 4
1.3 无效CSS选择器的特性与实际应用 5
第 2章 CSS声明的优先级 8
2.1 继承与级联 9
2.1.1 优先级的底层——继承 9
2.1.2 优先级的中枢——级联 10
2.2 详解@layer规则 11
2.2.1 @layer规则解决的问题 11
2.2.2 掌握@layer规则的语法 13
2.2.3 使整个CSS变成@layer 15
2.2.4 @layer规则的嵌套 16
2.3 叛逆的!important 19
2.3.1 !important与层级跨越 19
2.3.2 !important的逆向越级 19
2.4 CSS选择器的优先级 20
2.4.1 同等级CSS优先级规则概览 20
2.4.2 CSS选择器优先级的计算规则21
2.4.3 256个选择器的越级现象 24
2.4.4 为什么按钮:hover变色了 25
第3章 CSS选择器的命名 27
3.1 CSS选择器是否区分大小写 27
3.2 CSS选择器命名的合法性 28
规范与更多字符的合法性 30
3.3 CSS选择器的命名是一个哲学问题 31
3.3.1 长命名还是短命名 32
3.3.2 单命名还是组合命名 32
3.3.3 面向属性的命名和面向语义的命名 34
3.3.4 我是如何命名的 36
3.4 CSS选择器设计的最佳实践 39
3.4.1 不要使用ID选择器 39
3.4.2 不要嵌套选择器 39
3.4.3 不要歧视面向属性的命名 42
3.4.4 正确使用状态类名 44
3.4.5 工具带来的变化 48
3.4.6 最佳实践汇总 48
第4章 入门必学的选择器 52
4.1 标签选择器 52
4.1.1 标签选择器二三事 52
4.1.2 特殊的标签选择器:通配选择器55
4.2 类选择器 55
4.2.1 类选择器脱颖而出的原因 55
4.2.2 类选择器的其他小知识 57
4.3 ID选择器 58
第5章 精通CSS选择符 60
5.1 后代选择符——空格( ) 60
5.1.1 对CSS后代选择符可能的错误认识 61
5.1.2 对JavaScript中后代选择符可能的错误认识 63
5.1.3 :scope 伪类 64
5.2 子选择符——箭头(>) 66
5.2.1 子选择符和后代选择符的区别 66
5.2.2 适合使用子选择符的场景 67
5.3 相邻兄弟选择符——加号(+) 68
5.3.1 相邻兄弟选择符的相关细节 69
5.3.2 实现类似:first-child伪类的效果 70
5.3.3 众多高级选择器技术的核心 72
5.4 随后兄弟选择符——波浪线(~) 73
5.4.1 随后兄弟选择符和相邻兄弟选择符的区别 73
5.4.2 如何实现前面兄弟选择符的效果 74
5.5 快速了解列选择符——双管道(||) 77
第6章 被低估的属性选择器 80
6.1 属性值匹配选择器逐渐兴起 80
6.2 属性值直接匹配选择器 81
6.2.1 详细了解4种选择器 81
6.2.2 AMCSS开发模式简介 87
6.3 属性值正则匹配选择器 88
6.3.1 详细了解3种选择器 88
6.3.2 CSS属性选择器搜索过滤技术 91
6.4 忽略属性值大小写的正则匹配运算符 92
第7章 常见交互行为的实现 94
7.1 :hover伪类与悬停交互开发 94
7.1.1 体验优化与:hover延时 95
7.1.2 非子元素的:hover显示 96
7.1.3 纯:hover显示浮层的体验问题 98
7.2 使用:active伪类实现点击反馈 99
7.2.1 :active伪类概述 99
7.2.2 按钮的通用:active样式技巧 100
7.2.3 :active伪类与CSS数据上报 102
7.3 聚焦行为伪类:focus与用户体验 103
7.3.1 :focus伪类匹配机制 103
7.3.2 :focus伪类与outline轮廓 105
7.3.3 CSS:focus伪类与键盘无障碍访问 106
7.4 非常实用的整体焦点伪类:focus-within 109
7.4.1 :focus-within伪类和:focus伪类的区别 109
7.4.2 :focus-within伪类实现无障碍访问的下拉列表 110
7.5 键盘焦点伪类:focus-visible 112
:focus-visible伪类的作用及背景变化 112
第8章 通过树结构伪类匹配元素 115
8.1 :root伪类 115
8.1.1 :root伪类匹配的究竟是什么 116
8.1.2 :root伪类的应用场景 117
8.2 要多使用:empty伪类 118
8.2.1 对:empty伪类可能存在的误解 120
8.2.2 超实用超高频使用的:empty伪类 122
8.3 比较实用的子索引伪类 124
8.3.1 :first-child伪类和:last-child伪类 124
8.3.2 给力的:only-child伪类 126
8.3.3 :nth-child()伪类和:nth-last-child()伪类 128
8.4 匹配类型的子索引伪类 136
8.4.1 :first-of-type伪类和:last-of-type伪类 136
8.4.2 :only-of-type伪类 137
8.4.3 :nth-of-type()伪类和:nth-last-of-type()伪类 138
第9章 不容小觑的逻辑组合伪类 142
9.1 务必掌握的否定伪类:not() 142
告别重置,全部交给:not()伪类 143
9.2 不要小看任意匹配伪类:is() 147
9.2.1 :is()伪类与:matches()伪类及:any()伪类之间的关系 147
9.2.2 :is()伪类的语法和两大作用 147
9.2.3 :is()伪类在 Vue 等框架中的妙用 150
9.3 实用的优先级调整伪类:where() 152
9.4 姗姗来迟的关联伪类:has() 153
第 10章 链接与锚点开发相关的伪类 156
10.1 链接历史伪类:link和:visited 156
10.1.1 深入理解:link伪类 156
10.1.2 怪癖最多的CSS伪类:visited 158
10.2 值得关注的超链接伪类:any-link 161
:any-link伪类相比于:link伪类的优点. 162
10.3 实用却很少使用的目标伪类:target 163
10.3.1 :target伪类与锚点 164
10.3.2 :target伪类交互布局技术简介 166
10.4 了解目标容器伪类:target-within 170
10.5 了解链接匹配伪类:local-link 171
第 11章 表单开发相关的伪类 172
11.1 输入控件状态 172
11.1.1 可用状态伪类:enabled与禁用状态伪类:disabled 172
11.1.2 读写特性伪类:read-only和:read-write 176
11.1.3 占位符显示伪类:placeholder-shown 177
11.1.4 使用:autofill伪类自定义自动填充样式 180
11.1.5 默认选项:default伪类 181
11.2 输入值状态 184
11.2.1 实用的选中选项伪类:checked 184
11.2.2 有用的不确定值伪类:indeterminate 196
11.3 输入值验证 199
11.3.1 掌握有效性验证伪类:valid和:invalid 199
11.3.2 熟悉范围验证伪类:in-range和:out-of-range 203
11.3.3 熟悉可选性伪类:required和:optional 205
11.3.4 了解用户交互伪类:user-valid和:user-invalid 210
11.3.5 简单了解空值伪类:blank 211
11.4 表单元素专用伪元素 211
11.4.1 使用::placeholder伪元素改变占位符的样式 212
11.4.2 使用::file-selector-button伪元素匹配文件选择输入框的按钮 213
第 12章 Web Components开发中的选择器 215
12.1 使用:defined伪类判断组件是否初始化 215
12.1.1 普通元素的:defined适配规则 217
12.1.2 Safari不支持内置自定义元素的处理 219
12.2 使用:host伪类匹配Shadow树根元素 219
12.3 使用伪类:host()匹配Shadow树根元素 221
12.4 Shadow树根元素上下文匹配伪类:host-context() 222
12.5 使用::part伪元素穿透Shadow DOM元素 223
::part伪元素对元素也是有效的 226
第 13章 音视频开发中的选择器 228
13.1 音视频元素各种状态的匹配 228
13.1.1 使用:playing伪类、:paused 伪类和:seeking伪类匹配播放状态 228
13.1.2 加载状态伪类:buffering和:stalled 230
13.1.3 声音控制伪类:muted和:volume-locked 230
13.2 视频字幕样式的控制 230
13.2.1 使用::cue伪元素控制字幕的样式 231
13.2.3 了解:current、:past 和:future这些时间维度的伪类 234
第 14章 语言和文字相关的选择器 236
14.1 了解语言相关的伪类 236
14.1.1 方向伪类:dir() 236
14.1.2 语言伪类:lang() 237
14.2 全新的文字相关的伪元素 239
14.2.1 ::mark伪元素简介 239
14.2.2 使用::target-text伪元素高亮锚定的文字 241
14.2.3 使用::spelling-error伪元素和
::grammar-error伪元素高亮拼写和语法错误 242
第 15章 元素特殊显示状态匹配伪类 244
15.1 了解模态层匹配伪类:modal 244
15.2 了解全屏相关的伪类:fullscreen 245
15.3 了解画中画伪类:picture-in-picture 247
15.4 使用::backdrop伪元素改变底部蒙层 248
展开