选择器分类
基本选择器
基本选择器主要争对于 tag
、id
、class
这种简单标签,可以结合一些组合器,提高作用属性的优先级,实现局部样式覆盖。比如:
1 | <div class="table"> |
需要注意的是,在 CSS
中请不要以 {}
为一个单位思考,而是争对某一个属性值来思考,比如比如 div{color:red}
,你应该关心的是 color
在 div
这个选择器下的优先级和值。
属性选择器
无非就那一套
- 是否有 [attr]
- 第一个是否匹配 [attr^=value]
- 最后一个是否匹配 [attr$=value]
- 全匹配,还是忽略大小写匹配 [attr=value i|s ]
- 是否包含匹配
- 是否不匹配的否定词
- 比较特殊好玩的一个
[attr|=value]
表示带有以 attr 命名的属性的元素,属性值为"value"或是以"value-"为前缀(-
)开头。有一种命名空间的含义。
伪类选择器
伪类选择器,是对于特殊身份(nth-child 系列、etc.),或者某一个节点的特殊状态(hover、 active、link、visited、etc.)进行选择的工具。
%%TODO 简单分类%%
表单相关
:autofill : 设置自动填充部分的样式
:blank : 选择用户输入为空的输入框
:checked : 选择任何处于选中状态的 radio
:default: 设置之前默认设置的表单元素,例如:
:disabled 、 :enabled :这两个是一对对立的东西,表示是否启用的元素。
:valid :表示内容验证正确的 <input>
或其他 <form>
元素
例:
超链接相关
元素状态相关
:empty
:first
:first-child
:first-of-type
:focus
:focus-visible
:focus-within
:fullscreen
:future(en-US)实验性
:host-context() 1 w 4.
[:last-child](https://developer.mozilla.org/zh-CN/docs/Web/CSS/:last-2 w 2. )
[:nth-of-type()](https://developer.mozilla.org/zh-CN/3 w 4. Web/CSS/:nth-of-type)
[:only-of-type](https://developer.mozilla.org/zh-CN3 w 6. /Web/CSS/:only-of-type)
[:out-of-range](https://developer.mozilla.org/zh-3 w 8. cs/Web/CSS/:out-of-range)
:popover-open(en-US)实验性
:read-write
:right
:scope
:target-within(en-US)实验性
:user-valid(en-US)
:where()
伪元素选择器
::-webkit-inner-spin-button(en-US) 改变输入框旁边的操作按钮的样式。
::-webkit-outer-spin-button(en-US)非标准
设置进度条的样式
::-webkit-progress-bar
::-webkit-progress-inner-element
::-webkit-progress-value
设置滚动条的样式
::-webkit-scrollbar
::-webkit-slider-thumb 非标准
设置文件选择按钮的样式
::marker
::placeholder
::selection
::target-text
::view-transition(en-US)实验性
::view-transition-group(en-US)实验性
::view-transition-image-pair(en-US)实验性
::view-transition-new(en-US)实验性
:: view-transition-old(en-US)实验性
@规则
@charset
@color-profile(en-US)
@container(en-US)
@counter-style
@document非标准已弃用
@font-face
@font-feature-values
@font-palette-values(en-US)
@import
@keyframes
@layer
@media
@namespace
@page
@property
@supports
选择器的优先级
important
最大,高于一切,包括id
选择器,藏匿于无形,非必要,不适用id
选择器其次,当前网页唯一值。class
再次- 然后是伪类选择器
当然选择器是可以叠加计算的,《CSS REFACTORING》中提到了算法的过程。
具体算法如下:
- 将数字放到(important,a,b,c,d)中
important
,有1
无0
。a
由内联样式决定,有1
无0
。b
等于是ID 选择器次数。c
的值等于类选择器和属性选择器和伪类出现的总次数。d
则是标签选择器和伪元素的次数。
举个例子
1 | <div class="table"> |
此外还有层叠式的效应,也就是在同级别的优先级下。后面的会覆盖前面的。
[!TIP]
当你不知道你的选择器是否生效的时候,你可以尝试使用border: solid !important
;来验证。