论坛首页 Web前端技术论坛

到底谁说了算?CSS样式优先级判断

浏览 12498 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-31  
CSS

 到底谁说了算?
                          CSS样式使用优先级判断

修正前,再次谢谢hax的指点。最正确的说法:http://www.w3.org/TR/CSS21/cascade.html#specificity 参见这里的相关内容,一下只是我个人偷懒的理解方式,只解决常规情况下的绝大部分问题。不是预期使用的样式,如何判断那个样式会最终起作用呢?到底谁说了算,可以依据下面几个原则:


CSS样式定义多了,常常出现显示效果与预期不一致的情况。其中很大一部分原因在于起作用的样式。

1。多个选择器可能会选择同一个元素,有3个规则,从上到下重要性降低:
      !important的用户样式
      !important的作者样式
      作者样式
      用户样式
      浏览器定义的样式

2。CSS样式的特殊性权重——谁有分量,谁说了算。
CSS规范为不同类型的选择器定义了特殊性权重,特殊性权重越高,样式会被优先应用。
权重设定如下:
html选择器,权重为1;
类选择器,权重为10;
id选择器,权重为100;
这里还有一种情况:在html标签中直接使用style属性,这里的style属性的权重为1000;
即如下情况:
#x34y {color:red}
<.  p id=x34y style="color:green">  优先选择style=""设定的样式。
其他类型的,大家看看例子就明白了。
例子:
h1{color:blue}  权重为1
p  em{color:yellow}  权重为2
.warning{color:red}  权重为10
p.note em.dark{color:grag}  权重为22
#main{color:black}  权重为100     这里还有一种情况:
权重一样时如何处理?权重一样时就另说了。看看下面的就明白了。

3。CSS样式的层叠原则——谁离我近,谁说了算。
当权重一样时,会采用“层叠原则” 后定义的会被应用。
如:p{color:yellow}
        p{color:red}
作用到这里   <. p >我的什么颜色呢?< /p>
结果会是red的。


4。CSS样式的特殊标记——谁有特权,谁说了算。
如果有人看不顺眼,非得要自己说了算,那可以搞点特权,如下即可
p {color:blue !important;}
加上!important;可将自己权重设为最高。
如果你要问两个!important;设定的样式,那个样式说了算,我说你为什么不自己试试看看呢!


好了,谁说了算的问题就到这里了。欢迎大家拍砖。不要投新手贴就可以了。

   发表时间:2007-05-31  
我使用firefox浏览器和firebug调试css、js和html,firebug是firefox的plugin,
firebug显示当前鼠标所指的元素的html代码、相关的css列表、样式所在文件名及行号,无效的样式定义显示为删除线,还可以及时修改样式,查看修改后结果,非常方便。

使用Eclipse开发ajax应用的,可以使用AJAX Toolkit Framework,有和firebug相似的功能,无效的样式以红色表示,有效的样式以绿色表示
0 请登录后投票
   发表时间:2007-05-31  
谢谢楼上的介绍的工具,有机会试用一下。还没有用过,哈哈
0 请登录后投票
   发表时间:2007-05-31  
顺便想问个问题:firefox的各个版本有什么区别?比如有firefox1.0 也有firefox1.5 还有2.0的
它们有什么不一样吗?插件也好像有特定支持的版本,好像不是每个插件都支持所有版本的。大家开发时候一般选择什么版本的firefox?
0 请登录后投票
   发表时间:2007-05-31  
关于css selector的优先级别,请看http://www.w3.org/TR/CSS21/cascade.html#specificity,楼主的解释比较通俗,但是不准确。因为按照楼主的解释,那以下两个的优先级如何呢?

p.a.b.c.d span.a.b.c.d.e.f   102?
#x    100?

另外楼主漏掉了author, user, user agent样式表之间的优先级问题。
0 请登录后投票
   发表时间:2007-05-31  
hax 写道
关于css selector的优先级别,请看http://www.w3.org/TR/CSS21/cascade.html#specificity,楼主的解释比较通俗,但是不准确。

谢谢指教了,确实不够准确。http://www.w3.org/TR/CSS21应该好好看看,以前没有看过。

hax 写道
因为按照楼主的解释,那以下两个的优先级如何呢?
p.a.b.c.d span.a.b.c.d.e.f   102?
#x    100?

照我的解释,是这样的,没看出什么问题啊?还请指教。

hax 写道
关于css selector的优先级别,请看http://www.w3.org/TR/CSS21/cascade.html#specificity,楼主的解释比较通俗,但是不准确。因为按照楼主的解释,那以下两个的优先级如何呢?

p.a.b.c.d span.a.b.c.d.e.f   102?
#x    100?

另外楼主漏掉了author, user, user agent样式表之间的优先级问题。

漏掉的不完善的部分,待会有时间我再结合http://www.w3.org/TR/CSS21/cascade.html#specificity 給补上。再次谢谢hax的指点。
0 请登录后投票
   发表时间:2007-05-31  
pengjun_lovecoding@hotmail.com 写道
顺便想问个问题:firefox的各个版本有什么区别?比如有firefox1.0 也有firefox1.5 还有2.0的
它们有什么不一样吗?插件也好像有特定支持的版本,好像不是每个插件都支持所有版本的。大家开发时候一般选择什么版本的firefox?


区别其实不少,不过现在mozilla都要只支持ff2.0+了,我们还要支持以前的吗
0 请登录后投票
   发表时间:2007-05-31  
一个不错的idea,推荐給javaeye,刚刚想到的。
刚刚hax指出了不少我帖子中的漏洞,我在想如果我愿意我是不是可以将这个帖子共享給他,hax也可以在线编辑这个帖子。以类似一种wiki的形式来完善帖子的内容。不知道javaeye是不是有这样的考虑。期待这样的功能。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics