.btn:hover [class*='glyphicon-'] {...}
... 匹配其属性内.btn:hover
包含的所有子元素。如果它们始终是直接子级,则应使用直接后代运算符:glyphicon-
class
.btn:hover > [class*='glyphicon-'] {...}
...所以当.glyphicon-*
它不是.btn
.
注意:(@Paulie_D)原则上和一般情况下,这比使用更安全[class^="glyphicon-"]
,因为当匹配的孩子有多个班级并且被匹配的不是第一个班级时,选择器将不会匹配。例如:
<a class="btn"><i class="glyphicon glyphicon-floppy-disk"></i>Old devices</a>
注意:(@GeomanYabes,关于使用 SASS 的建议)。使用 SASS(或不使用)通常与您工作的团队/公司的堆栈有关,与作为开发人员的个人选择或项目/客户要求有关,而不是在特定项目的特定情况下编写更少的代码(例如上面那个)。我的意思是,如果您有上述情况,则不要选择使用 SASS,如果没有,请放弃。该决定是基于更大的考虑,并且无论如何都会做出。根据经验,我告诉大家:如果您编写 CSS,请务必使用 SASS。回到您的建议和问题,请注意 SASS 产生 CSS,而 CSS 不一定更有效,这似乎是 OP 有意或无意要求的。
在效率方面,例如渲染速度和浏览器性能,我必须说我真的不确定两者之间哪个代码效率更高(指定每种情况或模式)。我假设解析器上的模式应该更重一些,额外的权重可能无法证明较短语法保存的字符是合理的。
无论如何,差异是如此之小,以至于在 99,99% 的情况下它们并不重要。无论如何,如果您决定解决这个问题,我真的对任何结果/测试感兴趣。假设我选择将 CSS 视为一种爱好而不是工作,这与我现在对 JavaScript 的看法相反。
如果效率是用输入的字符来衡量的,我猜模式会赢。如果以编写代码所花费的时间来衡量,那么它因人而异,并且更多地与知识有关,而不是语法。