标签为css的几个答案阻止使用!important
有利于特异性。为什么?为什么使用`!重要`不鼓励?
回答
有实际的数学可以用来预测,控制和反向工程CSS规则的影响。通过使用!important
你打破了这一点。看看this JS fiddle例如,不使用!important
:http://jsfiddle.net/hXPk7/
如果你使用Firebug或Chrome开发者工具来检查它说:“理查德”的称号元素,你应该看到这些规则,顺序如下:
/**************************/
/* /hXPk7/show/ (line 20) */
/**************************/
#myExample #title .name {
color: yellow;
}
/********************************************************/
/* /hXPk7/show/ (line 14) - Inherited fromdiv#myExample */
/********************************************************/
#myExample {
color: blue;
}
请注意,这不是它们在CSS样式表中出现的顺序,而是它们按照它们的特殊性的降序排列。优先列出的是先列出的,其他列表(其规则被更具体的规则覆盖)可能具有划掉的特性。这表明特异性使得跟踪(调试?)元素获取其CSS属性的位置变得很容易。
现在,比较this JS fiddle - 这实际上是一样的,但它现在使用!important
一个新的规则:http://jsfiddle.net/hXPk7/1/
使用Firebug或Chrome开发工具检查相同的元素,你会看到类似这样的:
/**************************/
/* /hXPk7/1/show/ (line 20) */
/**************************/
#myExample #title .name {
color: yellow;
}
/**************************/
/* /hXPk7/1/show/ (line 26) */
/**************************/
span {
color: black !important;
}
/********************************************************/
/* /hXPk7/1/show/ (line 14) - Inherited fromdiv#myExample */
/********************************************************/
#myExample {
color: blue;
}
同样,规则是根据它们的特异性有序 - 但请注意,这一次,当它首先列出最具体的规则规定的yellow
一个color
,浏览器,而不是呈现文本黑色!这是因为!important
声明打破了特异性的正常行为,优先考虑可追踪性。设想一个更现实的网站,可能有数百条规则,而控制color
的网站并不明显可以找到或更改。
现在,也许这是开发人员工具的问题,但我认为它反映了!important
采用通常易于预测的优先系统并使其更具挑战性的事实。也许有时候需要使用它,但它不应该成为编写CSS时的第一个工具。
谢谢您的详细解释!这就是为什么我喜欢它:) – CodeMonkey 2013-03-23 01:42:53
很好的解释..但它看起来像你只是解释写一个更聪明的方式,而不是使用'!important' ..而不是讨厌'!important'的原因......其实是你的问题。 :) – sohaiby 2015-10-03 12:43:41
- 1. 为什么Debug.Print不鼓励?
- 2. 为什么setAnimationDidStopSelector不鼓励?
- 3. 为什么sun.misc不鼓励使用?
- 4. 为什么不鼓励LD_PRELOAD的使用?
- 5. 为什么不鼓励使用Resources.getIdentifier()
- 6. 为什么mysql_escape_string非常不鼓励?
- 7. 为什么要标记组件ComVisible(true)不鼓励?
- 8. 为什么GAE中的URL重写不被鼓励?
- 9. 为什么jQuery似乎不鼓励使用常规的OOP?
- 10. 为什么在Silverlight 4中不鼓励使用触发器?
- 11. 为什么不鼓励在Shiny includeScript()中使用绝对路径?
- 12. CNAME链不鼓励?
- 13. 为什么鼓励使用处理程序的私有变量?
- 14. 为什么不可变的null不鼓励?
- 15. 为什么在SQLAlchemy中不鼓励这种模式?
- 16. 为什么不鼓励直接实例化Dialog类?
- 17. 为什么不鼓励前端的OAuth密钥?
- 18. 为什么不鼓励Java EE容器中的产卵线程?
- 19. 不鼓励使用的方法
- 20. 为什么我鼓励在本地下载jQuery而不是使用CDN?
- 21. 为什么鼓励java hibernate-mapped对象成为POJO的对象?
- 22. 由于Django不鼓励将参数传递给模板中的函数,因此鼓励什么呢?
- 23. Java中的“不鼓励参考”是什么意思?
- 24. 为什么混合'从x进口y'和'进口x'不鼓励?
- 25. 鼓励地理位置API
- 26. 为什么双重检查锁定仍然不鼓励,即使在波动的修复之后?
- 27. 投掷泛型异常不鼓励?
- 28. 在CSS中不鼓励利润率?
- 29. 鼓励团队沟通的最佳方式是什么?
- 30. 如果ruby鼓励鸭子打字这么多,为什么我们不用Hash.count而不是Hash.length?
这是[回复评论](http://stackoverflow.com/questions/2754787/css-margin-0padding-0-override/2763068?noredirect=1#comment22091331_2763068)有人指示我的方式。 – 2013-03-23 01:32:45
你的回答很好,但是这个问题似乎很短,而且不完整,因为不这样做是正义的IMO(因此积累了密切的投票)。 – BoltClock 2013-03-23 17:10:19
@BoltClock - 你有如何改进它的建议?我没有多少考虑,因为我的目标只是回应评论。 – 2013-03-23 21:21:17