程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长嵌入式、鸿蒙、人工智能、Java等,专注于程序员成长那点儿事,希望在成长的路上有我相伴!君志所向,一往无前!
一、CSS选择器
CSS选择器是网页样式控制的核心工具,通过精准匹配HTML元素实现视觉呈现的精细化管理。根据W3C规范和实际开发场景,选择器可分为以下六大类:
1. 基础选择器
-
标签选择器:
p { color: red; }
直接选取HTML标签元素,常用于基础样式重置
-
类选择器:
.highlight { background: yellow; }
通过class属性匹配元素,支持复用与组合
-
ID选择器:
#header { height: 80px; }
唯一标识元素,优先级最高但应避免滥用
-
通配符选择器:
* { margin: 0; }
匹配所有元素,性能敏感场景需谨慎使用
2. 层次选择器
-
后代选择器:
nav a
选取所有嵌套层级的锚点元素 -
子选择器:
ul > li
仅匹配直接子元素,减少样式污染 -
相邻兄弟选择器:
h2 + p
选取紧接在h2后的同级段落 -
通用兄弟选择器:
h2 ~ div
匹配h2之后所有同级的div元素
3. 属性选择器
-
存在性匹配:
[disabled]
选择具有disabled属性的元素 -
精确值匹配:
[type="email"]
常用于表单元素精准定位 -
正则匹配:
-
^=
(开头匹配)a[href^="https"]
-
$=
(结尾匹配)a[href$=".pdf"]
-
*=
(包含匹配)[class*="btn"]
4. 伪类选择器
-
状态伪类:
-
:hover
鼠标悬停状态 -
:focus
输入聚焦状态 -
:active
激活状态 -
结构伪类:
-
:nth-child(2n+1)
奇数行样式 -
:first-of-type
匹配同类型首个元素 -
:has(.error)
父元素包含错误类(CSS4新特性)
5. 伪元素选择器
-
::before
在元素前插入内容 -
::after
创建装饰性元素 -
first-letter` 首字母特效
6. 组合选择器
-
并集选择器:
h1, h2, .title
批量设置相同样式 -
交集选择器:
button.primary
复合条件精准定位
二、优先级权值计算模型
选择器优先级遵循权值累加原则:
-
行内样式:权值1000(
<div style="...">
) -
ID选择器:每个ID计100分(
#main
) -
类/属性/伪类:每项计10分(
.btn
、:hover
) -
标签/伪元素:每项计1分(
div
、::before
) -
通配符/继承样式:0分
示例:
#nav li.active > a:hover
的权值为:
100(ID) + 1(li) + 10(.active) + 1(a) + 10(:hover) = 122
三、开发最佳实践
1. 性能优化策略
• 避免超过3级的选择器嵌套(如.nav > ul > li > a
)
• 优先使用类选择器替代属性选择器(.btn-primary
vs [type="submit"]
)
• 复杂选择器添加/*!purgecss ignore */
注释避免被CSS清理工具误删
2. 可维护性规范
• BEM命名规则:.block__element--modifier
• 禁止ID选择器用于样式定义(仅限JS交互)
• 链接伪类顺序遵循LVHFA原则(:link → :visited → :hover → :focus → :active
)
3. CSS特性应用
/* CSS4级选择器 */
.card:has(img) { border: 2px solid; } /* 包含图片的卡片 */
:is(h1, h2, h3) { font-family: serif; } /* 批量设置标题样式 */
四、浏览器兼容解决方案
针对老旧浏览器(如IE11)提供渐进增强方案:
/* 现代浏览器支持的网格布局 */
@supports (display: grid) {
.container { display: grid; }
}
/* 传统浏览器备用方案 */
.container {
display: flex; /* 兼容方案 */
@supports not (display: grid) {
width: 100%;
}
}
五、综合应用案例
多条件筛选组件样式:
/* 筛选容器 */
.filter-group:has([data-active]) {
border-color: #4F46E5;
}
/* 激活状态的选项 */
.filter-item[data-active="true"] {
background: rgba(79,70,229,0.1);
&::after {
content: "✓";
color: #4F46E5;
}
}
/* 移动端适配 */
@media (max-width: 640px) {
.filter-group > .item:nth-child(2n) {
margin-right: 0;
}
}
通过系统掌握选择器体系,开发者能构建出既符合视觉设计要求,又具备高性能表现的样式系统。
好啦,就到这里吧,其实有没有发现,很多知识点重新再使用的时候,去深挖一下,就会有不同的收获!