覆盖CSS和选择器的数量
我正试着把我的头脑集中在CSS上。我一直认为包含CSS文件的顺序很重要(它的“级联”部分)。我正在使用Bootstrap3,并试图覆盖活动顶部导航链接的背景色 为了做到这一点,我必须使用的确切选择器是:(实际上是SCS,但这不重要) 然后覆盖CSS和选择器的数量,css,twitter-bootstrap,Css,Twitter Bootstrap,我正试着把我的头脑集中在CSS上。我一直认为包含CSS文件的顺序很重要(它的“级联”部分)。我正在使用Bootstrap3,并试图覆盖活动顶部导航链接的背景色 为了做到这一点,我必须使用的确切选择器是:(实际上是SCS,但这不重要) 然后scss lint对我大喊大叫,因为我的应用深度大于3。但如果我尝试这样做: .navbar-nav > .active > a { background: $sp-blue; color: #fff; } 然后它停止工作。这是我不明白的。
scss lint
对我大喊大叫,因为我的应用深度大于3。但如果我尝试这样做:
.navbar-nav > .active > a {
background: $sp-blue;
color: #fff;
}
然后它停止工作。这是我不明白的。为什么必须在选择器中包含.navbar default
?如果.navbar nav
在其中,我就不需要更多了。必须完全按照在上一个样式表中使用的方式复制选择器,这很烦人。现在,如果我使用!重要信息
,然后它会起作用,但我们都知道这是一种不好的做法
有人能帮我理解CSS的这一方面吗?这是因为
默认值。导航栏导航>.active>a
比更具体
尽管样式表的排序与浏览器如何分析哪个css更相关有关,但css的特殊性也起到了一定作用
基本上,CSS选择器越具体,它与浏览器的相关性就越大。比如说,我们按如下方式订购您的css:
/*this will be followed*/
.navbar-default .navbar-nav > .active > a {
background: #fff;
}
/*this will be ignored*/
.navbar-nav > .active > a {
background: #000;
}
尽管第二个选择器的顺序是最后一个,但它不能覆盖前一个选择器,因为它的特异性较弱。只有当另一个css与前一个css具有相同或更大的特异性时,它才能重写另一个css。但是当然,!重要信息
是该规则的例外
进一步阅读:
这是因为.navbar default.navbar nav>.active>a
比.navbar nav>.active>a
更具体
尽管样式表的排序与浏览器如何分析哪个css更相关有关,但css的特殊性也起到了一定作用
基本上,CSS选择器越具体,它与浏览器的相关性就越大。比如说,我们按如下方式订购您的css:
/*this will be followed*/
.navbar-default .navbar-nav > .active > a {
background: #fff;
}
/*this will be ignored*/
.navbar-nav > .active > a {
background: #000;
}
尽管第二个选择器的顺序是最后一个,但它不能覆盖前一个选择器,因为它的特异性较弱。只有当另一个css与前一个css具有相同或更大的特异性时,它才能重写另一个css。但是当然,!重要信息
是该规则的例外
进一步阅读:
这是一个奇妙的问题!这表明你实际上是在通过css思考,而不是数百万不问问题只是“重要”的新手每当有问题的时候。但你完全正确。据说写得很好的CSS有以下限制:
不要使用“重要!”强>
“重要!”打破CSS的级联特性,使您的设计面临可维护性和简单性方面的问题:
见:
出于与“重要”相同的原因,避免大量的“适用性深度”同样,这导致设计不易维护、简单或易于重新设计:
见:
不要修改框架代码当然,你不应该回去修改框架的CSS。如果将来需要更新此代码,或者某个自动化过程会覆盖它,该怎么办?你的代码中断了
一个解决方案(如果您相信上述内容的话)是使用CSS规则,并以更有效的方式针对您的元素。使用CSS专用性计算器,例如:
我们可以找到其他方法更好地针对您的元素。根据计算器,元素的特异性为0031。但是,只有一个id
#mynav {
background: $sp-blue;
color: #fff;
}
得分0100,将满足上述约束条件。一个问题是有些人还说
出于与上述类似的原因,请勿使用IDs:
见:
不过,我们也可以使用“内联样式”(从计算器中可以看到)
不要使用内联样式
那么,有没有其他方法1)增加特异性2)不增加深度,不使用3)IDs 4)“重要!”5) 内联样式,还是6)修改框架代码?通过将多个类分配给一个元素(或父元素),我们可以在不增加适用性深度的情况下增加特定性。当然,这也会起作用
.thislink1.thislink2.thislink3.thislink4 {
background: $sp-blue;
color: #fff;
}
现在,当然,你不必为你的锚点分配4个不同的类,只是为了足够具体或者让你的深度小于3。如果将类指定给父类
.navbar-nav.mynav > .active.myactivelink {
background: $sp-blue;
color: #fff;
}
该分数为0040(深度为2)。如果您确定css修改是最后加载的(因为以后加载的规则优先),那么您可能会进一步简化此过程
这个分数为0031(深度为3),就像你的引导CSS一样,但是如果它是在引导之后加载的,它将被应用
要点:CSS不是一种被专家用来量化圈复杂度和代码质量等指标的计算机语言,它是一种没有对客观指标进行严格研究的样式表语言。很容易就可以知道,你有许多没有经验的电枢和比确凿证据更糟糕的建议。我当然不是专家,所以将以上内容视为“选项”。要意识到,从别人所遭遇的陷阱中学习风格是很重要的。但是您的具体情况包括您的偏好和您所处的开发环境类型,以及学习所有这些建议所需的时间。这是一个非常好的问题!这表明你实际上是在通过css思考,而不是数百万不问问题只是“重要”的新手每当有问题的时候。但你完全正确。据说写得很好的CSS有以下限制:
不要使用“重要!”强>
“重要!”打破CSS的级联特性,使您的设计面临可维护性和简单性方面的问题:
见:
Av
.navbar-nav > .active > a.mylink {
background: $sp-blue;
color: #fff;
}