我正在尝试使用SCSS清理我的CSS以使其更清洁。
标准CSS:
.dark-hr,
.light-hr {
width: 100%;
height: 1px;
margin: 15px 0px;
}
.dark-hr {
background-color: #595959;
}
.light-hr {
background-color: #cccccc;
}
vs SCSS:
.generic-hr {
width: 100%;
height: 1px;
margin: 15px 0px;
}
.dark-hr {
@extend .generic-hr;
background-color: #595959;
}
.light-hr {
@extend .generic-hr;
background-color: #cccccc;
}
有没有办法避免创建不会被使用的'generic-hr'类?我希望某种巢能很好地运作。 在这种情况下,CSS绝对比SCSS更清晰,更易读。
理想情况下,我需要在SCSS中使用它:
.## {
// base class that is not outputted
.dark-hr {
//attributes the extend the base class '.##'
}
.light-hr {
//attributes the extend the base class '.##'
}
}
输出:
.dark-hr, .light-hr {
//shared attributes defined by '.##'
}
.dark-hr {
// overrides
}
.light-hr {
// overrides
}
答案 0 :(得分:5)
您想要使用的是扩展类(我将其称为“静默类”),使用%
代替.
来表示
hr%base {
width: 100%;
height: 1px;
margin: 15px 0px;
}
.dark-hr {
@extend hr%base;
background-color: #595959;
}
.light-hr {
@extend hr%base;
background-color: #cccccc;
}
答案 1 :(得分:1)
你通常不会这样做:
.generic-hr {
width: 100%;
height: 1px;
margin: 15px 0px;
&.dark {
background-color: #595959;
}
&.light {
background-color: #cccccc;
}
}
答案 2 :(得分:1)
我对这种事情的模式是混合:
@mixin generic-hr {
width: 100%;
height: 1px;
margin: 15px 0px;
}
.dark-hr {
@include generic-hr;
background-color: #595959;
}
.light-hr {
@include generic-hr;
background-color: #cccccc;
}
这具有可扩展性的附加优势,因此如果您发现自己需要多个具有非常相似属性的选择器,则可以添加变量:
@mixin generic-hr($background-color: transparent) {
width: 100%;
height: 1px;
margin: 15px 0px;
background-color: $background-color;
}
.dark-hr {
@include generic-hr(#595959);
}
.light-hr {
@include generic-hr(#cccccc);
}
.medium-hr {
@include generic-hr(#818181);
}