闽公网安备 35020302035485号
3.性能隐患:浏览器解析!important时需要额外计算优先级,项目越大,渲染卡顿越明显
| 选择器类型 | 分值 | 例子 |
|---|---|---|
| 内联样式 | a=1 | <div style="color: red"> |
| ID选择器 | b=1 | #header |
| 类/属性/伪类选择器 | c=1 | .nav-item:hover |
| 元素/伪元素选择器 | d=1 | div::before |
总分:(0,1,2,1),比普通类选择器(0,0,3,0)更高,所以样式生效
/* 错误示范:滥用标签选择器 */
div.container .btn { color: blue; }
/* 正确姿势:用ID提升特异性 */
#page-header .action-btn { color: red; }
原理:一个ID选择器的b值=1,相当于100个类选择器的c值,直接碾压普通选择器/* 基础样式 */
.card { border: 1px solid #eee; }
/* 特殊场景强化 */
.home .featured-card .card-header { border-color: #f6a; }
技巧:每多一层嵌套,相当于给c值“叠buff”,但注意不要超过3层嵌套,否则会影响性能/* 全局样式 */
:root { --btn-color: #333; }
/* 局部覆盖 */
.login-section { --btn-color: #f33; }
/* 使用变量 */
.btn { color: var(--btn-color); }
优势:通过变量作用域覆盖样式,比!important更可控,且方便后期统一主题修改@layer components {
.btn { padding: 8px 16px; }
}
@layer utilities {
.btn-primary { @use components; background: blue; }
}
原理:通过@layer声明样式优先级顺序,后续层自动覆盖前序层,比!important更符合工程化思维// Button.module.css
.redBtn { color: red; }
// React组件
import styles from './Button.module.css'
<button className={styles.redBtn}>提交</button>
特点:生成类似.Button_module_redBtn_123的哈希类名,天然避免选择器冲突,从根本上杜绝!important需求/* 覆盖Element UI的按钮样式 */
.el-button.el-button-primary {
background-color: #ff6b6b !important;
}
注意:必须添加注释说明原因,并在后续版本升级时检查是否可移除/* 临时修复按钮消失问题 */
.btn-critical { display: block !important; }
规范:必须在48小时内通过重构代码移除,并用Jira记录修复流程/* 确保高对比度文本 */
.visually-hidden {
clip: rect(0 0 0 0) !important;
}
场景:为满足WCAG标准时,可使用!important确保无障碍样式生效