CSS选择器优先级

如题

今天写css时遇见一个问题,本不知所错,后查找才发现其原因。
究其结果竟是CSS选择器的优先级造成的。

问题:

#parent #child{
    position:absolute;
    top:50%;
    right:0;
    width:41px;
    height:69px;
    margin-top:-35px;
    background:url(../../images/slides.png) no-repeat -125px;
    z-index:1000;
    cursor:pointer;
}

#child:hover{
    background-position:0px;
}

我想用 :hover 伪类来改变图片的位置,但却怎么也实现不了,最后无奈改成下面这样,在选择器前加了个父选择器才行,还不可能的以为 :hover 不能直接在选择元素后直接调用,但怎么想也不可能,却也不知道为何。

#parent #child:hover{
    background-position:0px;
}

在此,关于CSS选择器优先级我是知道的,但不知道调用伪类也会有所限制吧,所以特写下并附上CSS选择器优先级解释


CSS选择器优先级

优先级实为CSS样式在浏览器中被解析的次序。

  • 引入方式的优先级:标签内嵌样式 > 头部书写样式 > 外部引用样式 > 浏览器默认样式。

  • 选择器的优先级:id选择器 > class选择器 > 标签选择器

  • 属性选择器,伪类选择器和class类选择器优先级一样,伪元素选择器也和类型选择器一样。

  • !important 权重最高,比内嵌样式还要高

注:当指定同一元素的选择器的优先级相同时,后面的优先级大于前面的优先级;覆盖之前的样式。
当同一个元素中定义多个class名时,各个类选择器之间的优先级与元素标签中的class名排列无关,而是与 CSS 文件中各个类选择器的排列有关。

注:利用!important提升优先级:通过在css属性后面标明!important的方法提升该条属性的优先级。被!important注明的css属性具有最高的优先级,是不能被覆盖的。
但在IE6中!important具有一个BUG,就是同一组CSS属性中,!important是没有作用的。

.class{ color:blue !important; 
        color:red; 
}

在IE6下文字的最终显示效果为红色,!important没起作用。


优先级计算

CSS样式选择器分为4个等级,a、b、c、d,以这四种等级为依据确定CSS选择器的优先级。

选择器特殊性(a,b,c,d)
Style= ””1,0,0,0,
ID选择器0,1,0,0
Class选择器0,0,1,0
Tag选择器0,0,0,1

优先级的计算为4个级别的选择器出现的次数,并非加减所的(虽然结果相同,但原理不同,以前一直认为都差不多)。

CSS优先级包含四个级别(文内选择符,ID选择器,Class选择器,元素选择器)以及各级别出现的次数。根据这四个级别出现的次数计算得到CSS的优先级。

w3c.org中原文所示,分为a,b,c,d四组,全为正整数,默认为0,对应于不同的选择器结构和组成形式。在选择器之间的优先级进行对比时,从左到右1对1对比,当比出有大者时即可停止比较。

注:四组数值分别对应于不同类型的选择器,互不影响,并计算与元素层级深度无关。

例如:
2,3,3 为两个ID选择器,3个类选择器,3个标签选择器(#parent div ul .list li #menu .box .child 总算编完了)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值