- .和普通类的可以应用在多个元素不同,伪类仅仅限定当前元素使用,所以叫伪类
- .伪元素会增加元素,伪类不增加元素
- 超链接伪类选择器
- .常见于超链接<a>桌面端应用,移动端无效
- .<a>使用时,需按下述顺序定义:a:link→a:visted→a:hover→a:active
- .除了超链接<a>,还可以作用于其它元素,如表单元素
- .详情参看 超链接一节
- .更多案例,请查看 accordion
-
类别 |
说明 |
:link |
<a>初始状态/为访问过 |
:visited |
<a>访问过/点击后状态 |
:hover |
鼠标置于<a>上时的状态;使用最广泛 |
:focus |
<a>获取焦点时的状态 |
:active |
<a>为活动状态时 |
:target |
当前元素为锚点目标时选中;目标元素需要指定ID |
- 表单伪类
- .多用于表单元素
- .功能非常强大,很多纯CSS效果甚至可以媲美JavaScript
- .凡是鼠标点击的联动响应,都可以使用:checked,如标签页、轮播、导航;见后续案例
- .更多案例,请查看 form
-
类别 |
说明 |
:checked |
元素选择中 |
:valid |
有效时 |
:invalid |
无效时 |
:in-range |
在指定范围 |
:out-of-range |
超出指定范围 |
- 结构伪类选择器
- 1. 根据序号选择元素
-
类别 |
说明 |
:first-child |
第一个孩子 |
:last-child |
最后一个孩子 |
:nth-child(n) |
第几个孩子;孩子从1开始 |
- .根据文档结构来选择,通常配合父级元素一起使用
- .nth-child可以使用关键字;odd选中序号为奇数的孩子;even选中序号为偶数的孩子
- .nth-child可以使用表达式;n只能是数字,不能是字母;n必须是表达式的第一项
- .以上选择器不区分元素类型
- .请参看- table一节斑马纹实例
-
:nth-child(even)//选择序号为偶数的元素
:nth-child(odd)//选择序号为奇数的元素
:nth-child(2n)//选择序号为偶数的元素
:nth-child(2n+1)//选择序号为奇数的元素
:nth-child(3n)//选择序号为3、6、9等元素
:nth-child(3n+1)//选择序号为1、4、7、10等元素
:nth-child(-n+3)//选择序号为3、2、1的元素;:nth-child(3-n)错误
- 2. 根据类型选择元素
-
类别 |
说明 |
first-of-type() |
选择指定类型第一个 |
last-of-type() |
选择指定类型最后一个 |
nth-of-type() |
选择指定类型第几个 |
- .根据类型选择符合条件的元素;适合多种元素类型并存的情况
- .同样可以使用关键字或表达式
- [] 按序号、按类型选择元素
- [HTML]
-
<div class="box">
<h2>...</h2>
<p>...</p>
<p>...</p>
<p>...</p>
<h2>...</h2>
<p>...</p>
<p>...</p>
<h2>...</h2>
<p>...</p>
<p>...</p>
<p>...</p>
</div>
- [CSS]
-
.box h2:first-child {
color: #f40;
}
.box p:first-child {
color: #f40;//NOT
}
.box p:first-of-type {
color: #f40;
}
.box p:nth-child(2) {
text-decoration: underline;
}
- :root选择器
- .定义CSS变量,供当前CSS文件所有元素使用,也称全局CSS变量
- .借助函数 var() 使用/获取定义的变量
- .方便统一调整
- .还可以在元素上使用style定义内联变量,供当前元素使用,详情请查看 CSS 函数一节
-
:root {
--title-h: 100px;
--main-color-white: #f3f3f3;
--main-color-red: #ff0f5b;
--main-color-purple: #be01fe;
--main-color-blue: #01b4ff;
--main-color-green: #2dfc52;
--main-color-orange: #ff7f50;
--main-color-gray: #333849;
}
.warn {
font-weight: 600;
color: var(--main-color-red);
}
- :not() 选择器
- .选中不符合条件的元素
- [] 元素彼此之间等间隔排列
- 使用:not;最后一个<li>不指定margin-right
-
ul li:not(:last-child) {
margin-right: 10px;
}
- 使用相邻兄弟选择器实现
-
ul li + li {
margin-left: 10px;
}
- 使用flex的gap实现
-
ul {
display: flex;
gap: 10px;
}
- [] 选中不属于<header>或<section>的<h2>;范围中的h2不能省略
-
h2:not(header h2, section h2) {
color: #f40;
}
- :is() 选择器
- .为同一个父级容器的后代元素指定相同的样式
- .选中当前选择器的后代是 哪些的选择器
- .后代选择器的高级用法;简化代码;而且可以容错;独立写法中,如果有一个语法错误,则所有样式都不生效;:is则可以大胆使用
- .The :is() CSS pseudo-class function takes a selector list as its argument, and selects any element that can be
selected by one of the selectors in that list. This is useful for writing large selectors in a more compact form.
-
.box h1,
.box h2,
.box h3 {
color: #f40;
}
-
.box :is(h1, h2, h3) {
color: #f40;
}
- 或者当前元素是哪些状态,如表单的伪类选择器
-
input:is(:hover, :focus) {
border: 1px solid #f40;
outline: none;
}
- :has() 选择器
- .选中具备某种关系的元素
- .如果某个选择器 有 哪些选择器,则选中当前选择器
- .可以根据子元素的状态设置父元素的样式,经常被认为是 父级选择器 -referred to as the parent
selector;也有看作是家庭选择器,还可以匹配兄弟关系
- .本质上是一个函数,参数就是和当前元素存在父子关系或兄弟关系的选择器列表,以逗号分隔- a comma-separated list
- .属于关系型伪类选择器的范畴-The Relational Pseudo-class
- .This pseudo-class presents a way of selecting a parent element or a previous sibling element with respect to a
reference element by taking a relative selector list as an argument.
- [] 如果包含有一个图形img和一个紧跟着图形的段落p,则选中
-
.card:has(img + p) {
flex-direction: row;
}
- [] 匹配到包含有<ol> 或 <ul>的文章
-
article:has(ol, ul) {
/* Matches an that contains either
an ordered or unordered list. */
}
- [] 选中直接兄弟是dt的dt
-
dt:has(+ dt)
- []
自适应布局-没有--left-width就使用48px;当元素left处于hover状态时,定义--left-width变量为30%
-
.grid {
display: grid;
transition: 300ms;
grid-template-columns: var(--left-width, 48px) auto;
}
.grid:has(.left:hover) {
--left-width: 30%;
}
- [] 某个ID被选中时
-
body:has(#p0:checked) {
background-color: #ffb8b8;
color: #ffb8b8;
}
body:has(#p1:checked) {
background-color: #f1c40f;
color: #f1c40f;
}
- :where() 选择器
- .指定一个选择器集合,当某个选择器符合条件时设置对应的样式
- .对于缩短一个较长的选择器列表非常有用
- .如果样式使用比较频繁,建议定义为公共类
- .The :where() CSS pseudo-class function takes a selector list as its argument, and selects any element that can
be selected by one of the selectors in that list.
- [] 为多个元素指定样式
-
:where(.left, .center, .right):hover {
background: crimson;
}
- [] 为<body>和<main>指定水平垂直居中
-
:where(body, main) {
display: flex;
justify-content: center;
align-items: center;
}
- 使用公共类更加直观
-
.center-item {
display: flex;
justify-content: center;
align-items: center;
}