效果
一、使用公共样式类@extend继承
适用于小型项目,样式简单,共享样式局部复用时适用。
/* 公共样式 */
.stat-common {
font-family: "Arial";
font-weight: 400;
color: #fff;
text-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.stat {
.stat-title {
@extend .stat-common; /* 复用公共样式 */
font-size: 25px;
}
.stat-description {
@extend .stat-common; /* 复用公共样式 */
font-size: 40px;
}
}
二、使用父级继承
适用于当子元素都共享同样的公共样式,且都位于同一个父级容器内。
.stat {
font-family: "Arial";
font-weight: 400;
color: #fff;
text-shadow: 0 0 6px rgba(16, 173, 255, 0.91);
.stat-title{
font-size: 25px;
}
.stat-description{
font-size: 40px;
}
}
三、使用 CSS 变量
适用于公共样式需要在多个组件之间共享,甚至跨页面使用。
:root {
--font-family: "Arial";
--font-weight: 400;
--text-color: #fff;
--text-shadow: 0 0 6px rgba(16, 173, 255, 0.91);
}
.stat {
font-family: var(--font-family);
font-weight: var(--font-weight);
color: var(--text-color);
text-shadow: var(--text-shadow);
.stat-title{
font-size: 25px;
}
.stat-description{
font-size: 40px;
}
}
四、使用混合宏(Mixin,适用于 Sass/LESS)
适用于需要高度复用的样式,并且已经使用 Sass/LESS 等 CSS 预处理器。
@mixin stat-common {
font-family: "Arial";
font-weight: 400;
color: #fff;
text-shadow: 0 0 6px rgba(16, 173, 255, 0.91);
}
.stat {
.stat-title{
@include stat-common;
font-size: 25px;
}
.stat-description {
@include stat-common;
font-size: 40px;
}
}
五、使用 Utility 类(BEM 方法论扩展)
适用于公共样式需要在多个类之间自由组合和复用。
.u-stat-common {
font-family: "Arial";
font-weight: 400;
color: #fff;
text-shadow: 0 0 6px rgba(16, 173, 255, 0.91);
}
.stat-title{
ime-mode: u-stat-common;
font-size: 25px;
}
.stat-description{
ime-mode: u-stat-common;
font-size: 40px;
}
若不使用CSS Modules,可以直接使用组合类:
六、总结
方法适用场景优点局限性@extend小型项目,样式简单,共享样式局部复用时适用简洁,直接复用样式耦合,可能导致选择器冗余父级继承简单需求,子元素同属一个父级,所有元素共享公共样式简单直观子元素必须在同一父级内,缺乏灵活性CSS 变量需要动态更新样式(如主题切换)或跨组件复用场景动态可变,跨组件复用,支持主题切换不支持旧版浏览器,复杂样式不易管理混合宏 (Mixin)参数化高复用,样式中有细微差异,或公共样式需要配置参数灵活可控,支持参数样式量多时会增加生成 CSS 的体积Utility 类 (BEM 扩展)组件高度模块化,样式需要跨组件复用高度复用,与结构解耦命名规则需要统一,语义化可能不足
追更:
:root 伪类
是一个 CSS 伪类,它匹配文档的根元素。在 HTML 文档中,根元素就是 。使用 :root 定义的 CSS 变量在整个文档中都是全局可用的。
:root {
--el-color-primary: #fff;
// css自定义属性,以 -- 开头,表示自定义属性
/**
--el-color-primary 被设置为 #fff(白色)
--el-color-primary 的地方都会应用这个颜色值
如果你在其他地方已经定义了 --el-color-primary,这里的定义会覆盖之前的值。
*/
}
绝命律师哪里看?“从中国到意大利:探索丝袜的主要生产地“