网站首页 > 技术文章 正文
CSS伪类选择器是前端开发中不可或缺的强大工具,它们允许我们根据元素的状态、位置或用户行为动态地应用样式。本文将全面介绍常用的伪类选择器,并通过代码示例展示其实际应用场景。
一、基础交互伪类
1. 超链接状态伪类
/* 未访问链接 */
a:link { color: green; }
/* 已访问链接 */
a:visited { color: purple; }
/* 鼠标悬停 */
a:hover { color: blue; }
/* 激活状态(点击时) */
a:active { color: red; }
记忆口诀:Love Hate (LVHA) - :link > :visited > :hover > :active
2. 表单元素伪类
/* 获取焦点时 */
input:focus { border-color: yellow; }
/* 禁用状态 */
input:disabled { opacity: 0.5; }
/* 选中状态 */
input:checked { background: green; }
结构位置伪类
1. 基础子元素选择
/* 偶数段落变红 */
p:nth-child(2n) { color: red; }
2. 类型过滤选择
/* 第一个<p>变红(跳过前面的<span>) */
p:first-of-type { color: red; }
3. 高级公式选择
选择器格式 | 说明 |
:nth-child(2n) | 选择偶数元素(2,4,6...) |
:nth-child(2n+1) | 选择奇数元素(1,3,5...) |
:nth-child(4n+1) | 每4个中的第1个(1,5,9...) |
:nth-last-child(2) | 倒数第2个子元素 |
实际应用
/* 每行第1张图去左边距 */
.item-list img:nth-child(4n+1) {
margin-left: 0;
}
/* 每行第4张图去右边距 */
.item-list img:nth-child(4n) {
margin-right: 0;
}
特殊状态伪类
/* 隐藏空元素 */
:empty { display: none; }
/* 反向选择 */
:not(.ignore) { font-weight: bold; }
/* URL锚点目标 */
:target { animation: highlight 1s; }
实战案例
新闻列表样式
/* 第一条新闻特殊样式 */
.nav a:first-child {
font-size: 18px;
background: #ccc;
display: block; /* 独占一行 */
}
/* 奇偶行span不同背景 */
.nav a:nth-child(2n) span {
background: #e5a7b2;
}
.nav a:nth-child(2n+1) span {
background: #e9d2da;
}
完整参考手册
推荐查阅MDN官方文档获取最新最全的伪类列表:
伪类 - CSS:层叠样式表 | MDN
小贴士:伪类选择器可以组合使用,如 a:hover:first-child 表示鼠标悬停时的第一个子链接。
通过合理使用伪类选择器,可以极大提升网页的交互体验和视觉效果,而无需编写大量JavaScript代码!
猜你喜欢
- 2025-06-15 研发Web Components库,深入探究DOM 节点之间的关系
- 2025-06-15 CSS基础(css基础知识)
- 2025-06-15 强大而好用的选择器:focus-within
- 2025-06-15 性能出色,纯CSS实现的loading动画——Loaders.css
- 2025-06-15 零基础学习HTML之CSS篇内联内部外部样式表和类型选择符
- 2025-06-15 CSS 选择器优化::where() 的妙用,让你的代码更优雅!
- 2025-06-15 JavaScript开发基础——CSS知识(css开发技巧)
- 2025-06-15 JavaScript脚本如何断言select下拉框的元素内容?
- 2025-06-15 前端面试:css选择器有哪些,选择器的权重的优先级
- 2025-06-15 爬虫(6) - 网页数据解析(2) | BeautifulSoup4在爬虫中的使用
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)