原生CSS写得慢是因缺乏变量、嵌套、混合和条件复用能力,导致重复书写与全局搜索;Sass提供成熟变量、嵌套和mixin机制,PostCSS通过插件支持现代语法,配合source map实现精准调试。
原生 CSS 缺乏变量、嵌套、混合逻辑和条件复用能力,导致相同颜色、间距、断点反复写,改一个 margin 要全局搜,加个响应式要复制三段媒体查询。这不是效率低,是语言设计没跟上现代 UI 的组织需求。
#4a90e2 → #357abd .btn:hover .icon、.btn:hover .text 两行 button、a.btn、input[type="submit"] 上重复声明 Sass(尤其是 SCSS 语法)生态成熟、文档清晰、构建链路稳定,VS Code 插件和 webpack / Vite 集成开箱即用,比 Less 更少遇到作用域泄漏或解析歧义问题。
$primary-color: #4a90e2;
$spacing-xs: 4px;
$breakpoint-md: 768px;
.card {
padding: $spacing-xs * 2;
&__header { font-weight: bold; }
&:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
} @mixin:@mixin flex-center {
display: flex;
justify-content: center;
align-items: center;
}
.logo { @include flex-center; } @extend:它会把选择器硬塞进其他规则里,造成 CSS 文件体积膨胀和难以调试的继承链 PostCSS 本身不提供变量或嵌套,但它通过插件把现代 CSS 特性“编译”成兼容写法,比如 color-mix()、:has()、嵌套语法(&)直接写进 .css 文件也能用——前提是配好 postcss-nested 和 autoprefixer。
.container {
& > header { margin-bottom: 1rem; }
& > main { color: color-mix(in srgb, #4a90e2 70%, white); }
} autoprefixer 自动加 -webkit- 前缀,不用查 Can I Use @media 内再嵌套选择器(如 @media (min-width: 768px) { .btn { &:hover {} } }),这得靠 Sass 或最新 CSS Nesting 标准(部分浏览器已支持) 预处理后报错信息如果还显示 “Error in style.css: line 123”,就等于白搭。必须确保构建工具输出准确的原始文件位置。
css-loader 和 sass-loader 中都启用 sourceMap: true vite.config.ts 是否误关了 css.devSourcemap Button.scss 第 42 行,而不是生成的 style.css 第 891 行 真正卡住开发节奏的,从来不是写一行 CSS 要敲几个字母,而是改一处样式要猜三处影响、查五份文档、清两次缓存。选对工具只是开始,让错误可追溯、变量可收敛、嵌套不爆炸,才算把时
间省回来。