写出简洁优雅的 CSS 代码不仅能提高代码的可维护性,还能减少样式冲突。本文将介绍 8 个实用技巧,帮你提升 CSS 代码质量。
使用 CSS 变量的好处:
集中管理主题色值
一处修改,处处生效
支持运行时动态修改
提高代码可维护性
/* 之前的写法 */.card h2,.card h3,.card h4,.card h5,.card h6{margin-bottom:16px;}/* 使用 :is() 简化后 */.card:is(h2,h3,h4,h5,h6){margin-bottom:16px;}/* 使用 :where() 降低优先级 */:where(.card,.panel,.box)p{line-height:1.5;}
这个技巧可以:
减少代码重复
提高代码可读性
灵活控制选择器优先级
/* 常见的 16:9 视频容器 */.video-container{width:100%;aspect-ratio:16/9;background:#000;}/* 保持正方形的头像容器 */.avatar{width:100px;aspect-ratio:1;object-fit:cover;border-radius:50%;}
这个属性特别适合:
响应式图片布局
视频容器
卡片网格布局
保持元素固定比例
.title{/* 最小 16px,最大 32px,基于视窗宽度动态计算 */font-size:clamp(16px,4vw,32px);}.container{/* 响应式内边距 */padding:clamp(1rem,3vw,3rem);/* 响应式宽度 */width:clamp(320px,80vw,1200px);}
clamp() 的优势:
无需媒体查询
平滑过渡
代码更简洁
避免内容溢出
.grid-container{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:20px;}.flex-container{display:flex;flex-wrap:wrap;gap:16px;/* 可以分别设置行列间距 *//* gap: 16px 24px; */}
gap 属性的优点:
替代传统的 margin
更容易维护间距
支持 flex 和 grid 布局
避免临边距叠加问题
.container{/* 替代 margin-left/right */margin-inline:auto;/* 替代 padding-top/bottom */padding-block:2rem;/* 替代 width */inline-size:100%;/* 替代 height */block-size:auto;}
逻辑属性的优势:
更好的国际化支持
适应不同书写模式
代码更具语义化
简化 RTL 适配
/* 当卡片包含图片时应用样式 */.card:has(img){padding:0;}/* 当表单存在错误输入时改变样式 */.form:has(:invalid){border-color:red;}/* 调整空列表的样式 */ul:not(:has(li)){display:none;}
:has() 选择器的应用场景:
基于子元素状态修改父元素
实现复杂的条件样式
减少 JavaScript 的使用
提高样式的动态性
@layer base,components,utilities;@layer base{h1{font-size:2rem;margin-bottom:1rem;}}@layer components{.button{padding:0.5rem 1rem;border-radius:4px;}}@layer utilities{.text-center{text-align:center;}}
@layer 的优势:
明确的样式优先级
更好的代码组织
避免优先级混乱
便于维护大型项目