直接把.css后缀改成.less并加@import会导致90%项目样式优先级混乱或编译失败,因less解析器误将:not(.foo)、calc()等当作函数调用,且未修饰的@import会无作用域嵌入内容;需用postcss-less渐进转换,calc()加~""包裹,第三方css用@import (inline),变量和mixin统一收口至base.less并用@import (reference)防重复。

直接把 .css 文件后缀改成 .less 并加 @import,90% 的项目会炸掉样式优先级或编译失败——这不是语法升级,是架构迁移,得按模块拆、按依赖理、按语义抽。
旧CSS文件改后缀后编译报错或样式丢失
Less 解析器会把原生 CSS 里的 :not(.foo)、calc(100% - 2px) 当成函数调用,导致 ParseError: missing closing ')';更隐蔽的是,未加修饰的 @import "reset.css" 会把整个文件内容无作用域地塞进当前文件,重置规则被后续模块覆盖,按钮边框突然消失。
- 用
postcss-less替代lessc做渐进式转换,它能识别原生 CSS 边界,不误解析伪类和函数 -
calc()必须写成width: calc(~"100% - 2*@spacing-md"),否则 Less 会提前计算 - 第三方 CSS(如
antd.css)用@import (inline) "antd.css"原样保留,避免转义破坏 - IE11 等老环境禁用
strictMath: true,否则10px / 2这类除法直接报错
@import 链过深导致构建失败或体积暴涨
10 个组件各自 @import 'utils/breakpoints',Webpack 中 Less loader 可能爆栈,热更新时整页重刷;编译后 CSS 里重复输出同一套媒体查询,体积涨 40% 以上。
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
- 所有基础变量、Mixin 统一收口到
base.less,其他文件只@import (reference) "base.less" - 禁止在 Mixin 内硬编码
@import路径,用相对路径 + 构建工具解析,否则迁移时@import "mixins/button"指向旧目录 - 对第三方 UI 库单独建
vendor-overrides.less,只覆盖必要样式,不@import整个源文件 - 每次编译后检查生成 CSS 体积,暴涨超 30% 就要查
@import是否漏了(reference)
通用 class 名(如 .btn)全局冲突怎么解
不能靠人眼批量改 HTML 中的 class="btn",也不能直接在 Less 里嵌套 .btn { &.primary { ... } }——那样会生成 .myapp-btn.myapp-btn--primary 这种冗余选择器,权重翻倍还难调试。
- 用
postcss-prefix-selector在构建时统一加前缀,比如把所有.btn变成.myapp-btn - 新模块用命名空间变量:
@ns: ~".myapp"; @{ns}-btn { ... },老代码不动 - HTML 中保留原 class,靠 BEM 式渐进升级:
class="myapp-btn myapp-btn--primary" - 禁止在伪类里再套命名空间:
.btn:hover不要写成&:hover嵌套在@{ns}-btn里
最难的不是语法转换,是把散落在各处的 #333 区分出「主文字色」「分割线色」「禁用态提示色」——变量一旦抽象,就脱离上下文,改一个值崩三处,这事没法靠工具自动做。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










