Css 更少的编译器神奇地将不需要的类添加到我的选择器中

Css 更少的编译器神奇地将不需要的类添加到我的选择器中,css,twitter-bootstrap,twitter-bootstrap-3,less,Css,Twitter Bootstrap,Twitter Bootstrap 3,Less,这是我的LESS文件的重要部分: input.ng-invalid { color: #e74c3c; border-color: #e74c3c; } 它可归纳为: input.ng-invalid .form-control { color: #e74c3c; border-color: #e74c3c; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } 表单控件类来自

这是我的LESS文件的重要部分:

input.ng-invalid { 
  color: #e74c3c;
  border-color: #e74c3c;
}
它可归纳为:

input.ng-invalid .form-control {
  color: #e74c3c;
  border-color: #e74c3c;
  -webkit-box-shadow: none;
  -moz-box-shadow: none;
  box-shadow: none;
}

表单控件
类来自引导,如果LESS没有插入空格(
input.ng无效。表单控件
工作正常),则不会破坏选择器

问题是浏览器正在使用类
表单控件
查找
输入的子项。显然,在我的HTML中没有
input
的孩子。


bootstrap的LESS文件中是否有一个设置将
表单控件
类绑定到每个
输入

这不是一个真正的答案,而是对您的问题的调查,它不适合放在注释框中。我没有检查你的一组较少的文件,因为我这里没有7z解压器,但也许我可以给你一些想法来帮助你解决问题或破解它

获得如下上下文关系的一种方法:

input.ng-invalid .form-control { ... }
在Less文件中的某个地方有这样的块:

input.ng-invalid {
   ...
   .form-control { ... }
   ...
}
现在,这种关联可能是通过mixin实现的,所以您可能无法找到上面的确切模式,但您可能希望发现.form控件的声明位置(可能是mixin)

现在,如果你想要这个:

input.ng-invalid.form-control { ...}
您可以在
.form控件
选择器之前添加一个
&
块,这样就不用从嵌套块中获取上下文关系,而是添加一个类。
&
表示父块中的选择器。可能是这样的:

input.ng-invalid {
   ...
   &.form-control { ... }
   ...
}
查看是否发现了
.form控件的定义位置,然后进行尝试


(请注意,如果您的代码的其他部分使用此mixin或选择器,它们可能无法像以前那样工作-这只是对可能使用较少的解决方案的分析,而不是引导框架;在您的问题中添加一个
Bootstrap
标记,您可能会吸引一些可能有更好解决方案的引导专家。)

我查看了您提供的邮政编码包,您的
输入被定义为(
self-made.less:L97
):

它将编译为您实际获得的内容(即,附加
.form control validation
中定义的嵌套类)。这正是这个混血儿应该做的

- bootstrap的LESS文件中是否有将
表单控件
类绑定到每个输入的设置

我看不到(至少在Bootstrap 3.1.1中),所以我只能建议以下技巧:

.danger_ {
    .form-control-validation
        (@brand-danger, @brand-danger);
}

input.ng-invalid.form-control
    :extend(.danger_ .form-control all) {}
将编译为(假设为bs-3.1.1)

- 或者还有
.has error
类,您可以用同样的方法扩展该类:

input.ng-invalid.form-control
    :extend(.has-error .form-control all) {}

并获得更紧凑的输出,但颜色略有不同(
@state danger text
而不是
@brand danger
)。

您不能只添加
。表单控件全局到所有输入?圣公会。像
input{.form control;color:red;}
?我将在我的原始问题中进一步解释,请包括您的实际来源。
input.ng-invalid.form-control
    :extend(.has-error .form-control all) {}