简短版 - 我如何使用SASS mixin嵌套验证状态?
详细版 -
我正在使用Bootstrap 4的SASS生成深色主题时遇到了一些困难。有些变量替换很明显,但其他变量替换却出现了问题。我目前卡在表单输入上。Bootstrap的SASS默认会输出白色背景的输入框。我用收集到的变量覆盖此背景,并将边框设置为正文颜色的50%(仍然具有对比度,但不会太过鲜明)。
在编译时(这是一个动态过程,由后端处理),编译引擎“不能”知道主题是否应该是深色的或浅色的,因此我让设计师为应该采用深色主题的容器(通常是但不一定是正文)添加“content-dark”类。
到目前为止还不错!然后我发现焦点看起来很奇怪,因为我的更具体规则正在强制执行我的新边框颜色覆盖SASS计算出的颜色。包含整个“focus”mixin并不起作用,因为它会再次将背景恢复为白色。我找到了单个“bit”并将其移入我的新嵌套规则中。
然而,验证的mixin要复杂得多,因此我愿意尝试完整的mixin……使用(不幸的是有点复杂的)想法让它做自己的事情,然后再次调整我的背景颜色更加具体(yay specificity war)。但是,我的SASS知识有点薄弱,这并没有起作用:
.content-dark {
select.form-control, .form-control {
background-color: $nav-background;
color: darken($body-color, 33%);
border: 1px solid darken($body-color, 50%);
&:focus {
border-color: $input-focus-border-color;
}
@include form-validation-state("valid", $form-feedback-valid-color);
@include form-validation-state("invalid", $form-feedback-invalid-color);
}
}
输入框的背景颜色是正确的暗色,边框通常是对比但不粗体的颜色,聚焦时是正确的发光蓝色。但验证状态无法正常工作。它们仍然没有嵌套,这意味着即使“发光”也不会更新边框。
我正在寻找最佳方法来实现深色主题的验证状态(嵌套是必需的;单独编译可以解决问题,但我没有那个选项)。