Sass: 外包样式到 mixin 中不起作用
Sass: Outsourcing style into mixin does not work
所以我是 Sass 的新手,有这种奇怪的行为。
我想创建一个在启用和禁用时具有不同边框颜色的复选框。
看起来像这样。
已启用:
已禁用:
到目前为止,还不错。
React 代码片段:
<div className="item">
<input type="checkbox" disabled={true} checked={true}/>
</div>
和(工作)CSS:
input[type=checkbox] {
position: relative;
cursor: pointer;
}
// "before" works with mixin
input[type=checkbox]:before {
@include checkbox_before;
border: 2px solid black;
}
// "before" works with mixin
input[type=checkbox]:disabled:before {
@include checkbox_before;
border: 2px solid red;
}
// ToDo: include mixin like for "before"
input[type=checkbox]:checked:after {
content: "";
display: block;
width: 5px;
height: 10px;
border: solid black;
border-width: 0 2px 2px 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
position: absolute;
top: 2px;
left: 6px;
}
// ToDo: include mixin like for "before"
input[type=checkbox]:disabled:checked:after {
content: "";
display: block;
width: 5px;
height: 10px;
border: solid red;
border-width: 0 2px 2px 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
position: absolute;
top: 2px;
left: 6px;
}
请注意“待办事项:像“之前”一样包含 mixin”。对于“之后”,mixin (@include checkbox_before
) 工作正常。
但是当我对“之前”尝试相同时,它看起来像这样:
这里是 CSS:
input[type=checkbox]:checked:after {
@include checkbox_after;
border: solid #666666;
}
input[type=checkbox]:disabled:checked:after {
@include checkbox_after;
border: solid red;
}
... 和混入:
// "before" section --> works
@mixin checkbox_before {
content: "";
display: block;
position: absolute;
width: 16px;
height: 16px;
top: 0;
left: 0;
border-radius: 3px;
background-color: white;
}
// "after" section --> does not work
@mixin checkbox_after {
content: "";
display: block;
width: 5px;
height: 10px;
border-width: 0 2px 2px 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
position: absolute;
top: 2px;
left: 6px;
}
如您所见,我将所有样式都放在混合“checkbox_after
”中,因为它们对于启用和禁用的变体都是相同的。唯一不同的是颜色。
那么为什么当我将所有样式都放在“大”CSS 中而不是当我将它们外包到 mixin 中时它会起作用?我找不到任何解释。
将不胜感激。
我自己找到了解决方案,以防其他人遇到问题:
为混入使用一个参数。因此,与其包含 mixin 并额外声明边框,不如将其作为参数传递给 mixin 函数,如下所示:
@include checkbox_after(solid red);
mixin 看起来像这样:
@mixin checkbox_after($border) {
content: "";
display: block;
width: 5px;
height: 10px;
border: $border;
border-width: 0 2px 2px 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
position: absolute;
top: 2px;
left: 6px;
}
干杯!
所以我是 Sass 的新手,有这种奇怪的行为。
我想创建一个在启用和禁用时具有不同边框颜色的复选框。
看起来像这样。
已启用:
已禁用:
到目前为止,还不错。
React 代码片段:
<div className="item">
<input type="checkbox" disabled={true} checked={true}/>
</div>
和(工作)CSS:
input[type=checkbox] {
position: relative;
cursor: pointer;
}
// "before" works with mixin
input[type=checkbox]:before {
@include checkbox_before;
border: 2px solid black;
}
// "before" works with mixin
input[type=checkbox]:disabled:before {
@include checkbox_before;
border: 2px solid red;
}
// ToDo: include mixin like for "before"
input[type=checkbox]:checked:after {
content: "";
display: block;
width: 5px;
height: 10px;
border: solid black;
border-width: 0 2px 2px 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
position: absolute;
top: 2px;
left: 6px;
}
// ToDo: include mixin like for "before"
input[type=checkbox]:disabled:checked:after {
content: "";
display: block;
width: 5px;
height: 10px;
border: solid red;
border-width: 0 2px 2px 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
position: absolute;
top: 2px;
left: 6px;
}
请注意“待办事项:像“之前”一样包含 mixin”。对于“之后”,mixin (@include checkbox_before
) 工作正常。
但是当我对“之前”尝试相同时,它看起来像这样:
这里是 CSS:
input[type=checkbox]:checked:after {
@include checkbox_after;
border: solid #666666;
}
input[type=checkbox]:disabled:checked:after {
@include checkbox_after;
border: solid red;
}
... 和混入:
// "before" section --> works
@mixin checkbox_before {
content: "";
display: block;
position: absolute;
width: 16px;
height: 16px;
top: 0;
left: 0;
border-radius: 3px;
background-color: white;
}
// "after" section --> does not work
@mixin checkbox_after {
content: "";
display: block;
width: 5px;
height: 10px;
border-width: 0 2px 2px 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
position: absolute;
top: 2px;
left: 6px;
}
如您所见,我将所有样式都放在混合“checkbox_after
”中,因为它们对于启用和禁用的变体都是相同的。唯一不同的是颜色。
那么为什么当我将所有样式都放在“大”CSS 中而不是当我将它们外包到 mixin 中时它会起作用?我找不到任何解释。
将不胜感激。
我自己找到了解决方案,以防其他人遇到问题:
为混入使用一个参数。因此,与其包含 mixin 并额外声明边框,不如将其作为参数传递给 mixin 函数,如下所示:
@include checkbox_after(solid red);
mixin 看起来像这样:
@mixin checkbox_after($border) {
content: "";
display: block;
width: 5px;
height: 10px;
border: $border;
border-width: 0 2px 2px 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
position: absolute;
top: 2px;
left: 6px;
}
干杯!