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确保无障碍样式生效