我第一次将 SASS 用于一个项目,我喜欢它。我再也不想写纯 CSS 了。但是,我对以下情况感到有些困惑,希望我遗漏了一些非常明显的东西。
首先,我有以下 SCSS(包括 CSS 输出):
// SCSS
.pos-button {
@include linear-gradient($color-secondary-green, !important);
@include text-shadow(lighten($color-secondary-green, 10%), !important);
&:active {
box-shadow:inset 0 0 5px 2px darken($color-secondary-green, 20%) !important;
}
&:hover {
@include linear-gradient(darken($color-secondary-green, 10%), !important);
@include text-shadow($color-secondary-green);
}
}
// CSS OUTPUT
.pos-button {
background: #99c965 !important;
background: -moz-linear-gradient(#99c965, #669434) !important;
background: -webkit-linear-gradient(#99c965, #669434) !important;
background: -o-linear-gradient(#99c965, #669434) !important;
background: -ms-linear-gradient(#99c965, #669434) !important;
background: linear-gradient(#99c965, #669434) !important;
text-shadow: 0 1px #99c965 !important; }
.pos-button:active {
box-shadow: inset 0 0 5px 2px #4c6e27 !important; }
.pos-button:hover {
background: #80ba41 !important;
background: -moz-linear-gradient(#80ba41, #4c6e27) !important;
background: -webkit-linear-gradient(#80ba41, #4c6e27) !important;
background: -o-linear-gradient(#80ba41, #4c6e27) !important;
background: -ms-linear-gradient(#80ba41, #4c6e27) !important;
background: linear-gradient(#80ba41, #4c6e27) !important;
text-shadow: 0 1px #80ba41; }
现在,问题。我想将上面的内容重构为一个 mixin,但该:hover
属性没有出现在 CSS 输出中:
// SCSS
.pos-button {
@include color-buttons($color-secondary-green);
}
@mixin color-buttons($color) {
@include linear-gradient($color, !important);
@include text-shadow(lighten($color, 10%), !important);
&:active {
box-shadow:inset 0 0 5px 2px darken($color, 20%) !important;
}
&:hover {
@include linear-gradient(darken($color, 10%), !important);
@include text-shadow($color);
}
}
// CSS OUTPUT
.pos-button {
background: #99c965 !important;
background: -moz-linear-gradient(#99c965, #669434) !important;
background: -webkit-linear-gradient(#99c965, #669434) !important;
background: -o-linear-gradient(#99c965, #669434) !important;
background: -ms-linear-gradient(#99c965, #669434) !important;
background: linear-gradient(#99c965, #669434) !important;
text-shadow: 0 1px #99c965 !important; }
.pos-button:active {
box-shadow: inset 0 0 5px 2px #4c6e27 !important; }
有什么想法是什么问题,或者我是否遇到了 SASS 的限制?我可以将:active
and:hover
属性拆分为它们自己的 mixin,但我真的很想把它变成一个单独的,因为我试图让这个项目尽可能 DRY。
谢谢!
编辑
混合:
@mixin text-shadow($color, $important : null) {
text-shadow:0 1px $color $important;
}
@mixin linear-gradient($color, $important : null) {
$from:lighten($color, 10%);
$to:darken($color, 10%);
background: $from $important; // Old browsers
background: -moz-linear-gradient($from, $to) $important; // FF3.6+
background: -webkit-linear-gradient($from, $to) $important; // Chrome10+,Safari5.1+
background: -o-linear-gradient($from, $to) $important; // Opera 11.10+
background: -ms-linear-gradient($from, $to) $important; // IE10+
background: linear-gradient($from, $to) $important; // W3C
}