【发布时间】:2018-08-02 14:12:03
【问题描述】:
TL;DR - 如何使用 SASS mixin 嵌套验证状态?
加长版 -
我在使用 Bootstrap 4 的 SASS 生成深色主题时遇到了一些困难。一些变量替换是显而易见的,但其他变量会导致问题。我目前坚持的是表单输入。默认情况下,Bootstrap 的 SASS 会输出白色背景输入。我用我收集的一个变量覆盖了这个背景,并将边框设置为正文文本颜色的 50%(它仍然有对比度,但不是很鲜明)。
在编译时(这是一个交给后端的动态过程),编译引擎“无法”知道主题是暗还是不暗,所以我把它留给设计师添加应具有深色主题(通常但不一定是主体)的容器的“content-dark”类。
到目前为止一切顺利!然后我突然想到,焦点看起来很有趣,因为我更具体的规则是在 SASS 计算的颜色之上强制执行我的新边框颜色。包括整个“焦点”混合不起作用,因为它再次将背景恢复为白色。我找到完成工作的单个“位”并将其移动到我的新嵌套规则中。
但是,用于验证的 mixin 要复杂得多,所以我愿意尝试完整的 mixin... 的想法(不幸的是有点令人费解)让它做它的事情然后调整我的背景颜色再次变得更加具体(耶特异性战争)。但是,我对 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);
}
}
输入背景正确地是深色,边框通常正确地是对比色(但不是粗体),焦点正确地是明亮的蓝色。但是验证状态不起作用。它们仍然没有嵌套,这意味着即使“发光”是边框也不会更新。
我正在寻找具有深色主题验证状态的最佳方式(需要嵌套;单独编译可以解决问题,但我没有该选项)。
【问题讨论】:
-
重申一下:我意识到如果原始轮廓覆盖和背景由于嵌套而没有更具体,则可以避免所有事情。破坏事物的是更高的特异性。