Less通过变量、混合(mixin)和模块化组织实现样式复用:用语义化mixins拆分功能,变量统一管理值,组件级文件按命名空间隔离并@import公共层,编译时启用压缩与strictMath,Webpack/Vue/React中配置别名与抽离CSS,避免冗余输出与作用域污染。
Less怎么让重复样式不重复写
靠变量和混合(
)把公共样式抽出来,而不是复制粘贴。比如按钮的圆角、阴影、过渡效果,全塞进一个
里,不同颜色变体只改参数。
常见错误是把混合写成“万能函数”——传七八个参数,最后调用时根本记不清哪个位置是边框宽度、哪个是禁用态透明度。应该按语义拆:一个管尺寸,一个管状态,一个管主题色。
定义主色,所有用到它的组件都引用它,改一处全更新
混合里避免硬编码值,比如
→ 改成
嵌套层级别超过 3 层,编译后选择器会过长,影响性能且难调试
组件级样式怎么拆又不散架
每个组件对应一个
文件,比如
、
,但它们不直接写完整样式,而是 import 公共层:
、
。
容易踩的坑是路径混乱:有人把所有
写成相对路径,结果一挪文件就报
;也有人全用绝对路径,换项目结构就崩。推荐用 Less 的
配置(Webpack 或 less-loader 中设
),然后统一写
。
立即学习
“
前端免费学习笔记(深入)
”;
组件文件里禁止出现全局选择器如
或
,只允许
、
这类带命名空间的
用
符号控制嵌套作用域,比如
编译为
,不是
避免在组件文件里重定义变量,比如
—— 这会覆盖全局变量,其他组件跟着错
为什么用了Less还是CSS体积越来越大
因为没关掉开发期冗余输出。Less 默认编译会保留嵌套结构、注释、空行,还可能把同一份 mixin 多次展开成重复 CSS 块。
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
关键在编译配置:生产环境必须启用压缩(
),并开启
防止意外计算泄露未用样式。更关键是用
控制 mixin 展开条件,比如
,避免无用规则进入输出。
检查最终 CSS 是否含大量
这类冗余选择器——说明嵌套没用好
,或用了多层
导致重复引入
Webpack 项目中,别让
在开发时把所有 less 全打进 JS bundle,应配
单独抽离
运行
能发现未使用的变量和 mixin,但不会自动删,得人工确认再清理
Vue/React里怎么让Less真正复用起来
单文件组件里写
看似方便,实则破坏复用:变量和 mixin 写在里面,别的组件用不了;抽到外部又容易漏
,热更新时样式不生效。
正确做法是把所有基础层(
、
、
)放在
下,然后在每个 SFC 的 style 标签顶部统一加:
注意 Vue CLI 和 Vite 对
别名的支持方式不同,Vite 需在
中配
,否则
报错。
不要在组件 style 里写
来穿透作用域——这等于放弃 CSS 模块化,复用性归零
React 用
或
才能改 create-react-app 的 less 配置,否则默认不支持
别名
如果团队用 Tailwind,Less 就该退居二线:只负责主题变量和极少量定制组件,别试图用 Less 实现整套工具类
最难的不是学会 Less 语法,而是判断哪部分该抽成变量、哪部分该封成 mixin、哪部分干脆不该用 Less——比如动画关键帧、字体加载逻辑,原生 CSS @规则更稳。工具只是延长手,不是代替脑子。
.mixin.btn-base()@primary-colorborder: 1px solid #333border: @border-width @border-style @border-color.lessheader.lesscard.less@import "variables";@import "mixins/border-radius";@importFile not foundpathspaths: ["src/styles"]@import "mixins/grid"bodyh1.card.card__title&.card { &__body { padding: 1rem; } }.card__body.card .card__body@text-color: #222compress: truestrictMath: trueguard.btn(@size) when (@size = large) { font-size: 1.25rem; }.header .header__title&@importstyle-loaderMiniCssExtractPluginlessc --lint@importvariables.lessmixins.lessreset.lesssrc/styles@import "@/styles/variables";
@import "@/styles/mixins";@vite.config.tsresolve.alias@import:global(.some-class)cracoreact-app-rewired@import