我有一个常用的组件,它的scss是这样的:
.component {
margin-right: 12px;
&.specified-use-case {
margin-right: 30px;
&:nth-child(odd) {
margin-right: 70px
}
}
}
现在,我希望所有内容在移动视图中都具有相同的样式
.component {
margin-right: 12px;
// some predefined mixin
@include viewport(mobile) {
margin-right: 0px;
margin-bottom: 14px;
}
&.specified-use-case {
margin-right: 30px;
&:nth-child(odd) {
margin-right: 70px
}
}
}
但这无法更改移动视图中“指定用例”的样式。为了做到这一点,我必须
.component {
margin-right: 12px;
// some predefined mixin
@include viewport(mobile) {
margin-right: 0px;
margin-bottom: 14px;
}
&.specified-use-case {
margin-right: 30px;
@include viewport(mobile) {
margin-right: 0px;
margin-bottom: 14px;
}
&:nth-child(odd) {
margin-right: 70px
@include viewport(mobile) {
margin-right: 0px;
margin-bottom: 14px;
}
}
}
}
这对我来说似乎不合适。有没有更好的方法来一次定义移动视图CSS?
答案 0 :(得分:2)
很遗憾,根据CSS' specificity rules(尝试this calculator),您需要重复一遍。您的SCSS解释器所做的只是将您编写的内容编译为标准CSS,这看起来类似于:
.component {
margin-right:12px
}
@media (max-width:768px) {
.component {
margin-right:0px;
margin-bottom:14px
}
}
.component.specified-use-case {
margin-right:30px
}
@media (max-width:768px) {
.component.specified-use-case {
margin-right:0px;
margin-bottom:14px
}
}
.component.specified-use-case:nth-child(odd) {
margin-right:70px
}
@media (max-width:768px) {
.component.specified-use-case:nth-child(odd) {
margin-right:0px;
margin-bottom:14px
}
}
如您所见,在声明之后,您将使用@media
规则集覆盖每个类。而且由于我是一个强烈建议不要使用!important
(因为您将打开潘多拉魔盒)的人,所以缩短SCSS的唯一方法是:
.component {
margin-right: 12px;
// some predefined mixin
@include viewport(mobile) {
margin-right: 0px;
margin-bottom: 14px; // only need to define margin-bottom once, here.
}
&.specified-use-case {
margin-right: 30px;
@include viewport(mobile) {
margin-right: 0px;
//margin-bottom: 14px;, remove this
}
&:nth-child(odd) {
margin-right: 70px
@include viewport(mobile) {
margin-right: 0px;
//margin-bottom: 14px;, remove this
}
}
}
}
希望这会有所帮助!
答案 1 :(得分:1)
您可以将规则放在媒体查询中:
@include viewport(mobile) {
margin-right: 0px;
margin-bottom: 14px;
&.specified-use-case {
margin-right: 0px;
margin-bottom: 14px;
}
}
答案 2 :(得分:1)
似乎像sass是错误的,因为您在断点上方指定了边距,请尝试以下操作:
.component {
margin-right: 12px;
&.specified-use-case {
margin-right: 30px;
&:nth-child(odd) {
margin-right: 70px
}
}
// some predefined mixin
@include viewport(mobile) {
margin-right: 0px;
margin-bottom: 14px;
}
}