css 优先级的bug

对于前端而言,了解css样式的优先级,对开发或处理bug有着事半功倍的效果,今天在做项目的时候,突然碰到一个优先级的小问题,刚开始不知道所因,后来才发现这个问题是由优先级造成的。先描述下问题,鼠标悬停在父容器时,子容器显示,移开消失。看到这个问题,可能有些人要喷了,这和优先级有毛线关系,看起来的确没关系,其实还是存在一定关系的。假如你在书写子容器样式时,采用的是内联式写法,那么这个悬停是否还有作用呢?看下面的代码……

示例代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>我是一个测试Demo</title>
    <style>
        .divTest{width: 200px;height: 100px;border: 3px solid red;font-size: 14px;text-align: center;margin: 10px 0}
        .divTest h2{display: none}
        .divTest:hover h2{display: block}
    </style>
</head>
<body>
    <div class="divTest">
        <h2>是不是想我!!!</h2>
    </div>
    <div class="divTest">
        <h2>是不是想我!!!</h2>
    </div>
    <div class="divTest">
        <h2 style="display: none">想我也没用!!!</h2>
    </div>
</body>

测试这个Demo时,会发现鼠标悬停在第三个div时,并没有任何效果。为什么会出现这种问题,是不是鼠标hover事件没有被触发,虽然认为这个是不可能的,但我还是测试了下,我将第三个内联样式去除,发现hover事件是可以被触发的,那是什么原因造成的呢?

分析原因

鼠标hover事件可以被触发,在内联中写入display: none却毫无作用,那么是什么原因造成的?是不是内联中写入display: none,会禁止hover事件?答案并非如此,内联的display: none,并没有禁止鼠标hover事件,而是因为内联样式的优先级要远远高于别的引入方式。

过程大概是这样:

如何在不修改内联样式条件下,可以让它正常出现

css中的一个属性:!important

描述:提升指定样式规则的应用优先权。

如果说内联样式是远程导弹威力惊人,那么!important就好比核武器毁天灭地。它的优先级可以说是css中权重最大,当然是在不考虑兼容性的情况下。

.divTest:hover h2{display: block !important;}

在不兼容!important属性的浏览器中,上面的Demo可以实现预想的效果,因为!important的优先级要高于内联样式优先级。

css优先级规则

  • 基础选择器

    css基础选择器有标签选择器、类选择器、id选择器、通用选择器

    p{color: red;font-size: 14px}/*标签选择器*/
    .test{color: red;font-size: 14px}/*类选择器*/
    #warp{color: red;font-size: 14px}/*id选择器*/
    *{color: red;font-size: 14px}/*通用选择器*/
  • 组合选择器
    div,h2,p{color: red;font-size: 14px}/*群组选择器*/    div a{color: red;font-size: 14px}/*后代选择器*/
    div>a{color: red;font-size: 14px}/*子选择器*/
    h2+p{color: red;font-size: 14px}/*同胞选择器*/
  • 属性选择器
    p[title]{color: red;font-size: 14px}
    p[class="test"]{color: red;font-size: 14px} 

css优先级(借鉴前辈整理的笔记)

  1. id选择器默认优先级最高,其权值为100
  2. class选择器、属性选择器和伪类选择器的权值为10
  3. 标签选择器的优先级较低,其权值为1 所以在比较样式的优先级时,只需统计选择符中的id、class、标签名个数,然后把对应的权值相加即可。根据结果便可得出优先级高低。
  4. 如果样式值中含有!important,则该值优先级最高
h2{color:blue;}//其权值为1
#content{color:#666;}//其权值为100p
.test{color:#ccc;}//其权值为1+10=11
#main div .test{color:red;}//其权值为100+1+10=111div
#main .left #nav{color:#000}//其权值为1+100+10+100=211 

总结

css优先级是前端必须掌握的基础知识,在开发或者修改页面bug时,不同场景都的css样式问题很有可能是由于css优先级所造成的,所以面对页面样式问题时,将css优先级考虑其中,或许能够得到意想不到的效果。

时间: 2024-10-10 04:11:41

css 优先级的bug的相关文章

浅谈CSS优先级机制(一)

初次写随笔,如果有哪个地方不足还望大神指点改正,下面我来谈谈我对于CSS优先级的了解吧. CSS优先级,通俗的理解就是你给元素等一堆属性描述,然后最后到底是哪个描述作为最终显示的效果的规则或机制(个人理解).以下我将分为几个点来谈谈优先级的确定. 1.引入方式: CSS引入的方式,我目前只知道四种:内联式.内嵌式.导入式.链接式(当然网上的说法名称不一,理解就好). 各种引入方式的用法我在这里就不再多说了.以上我所按顺序罗列的四个方式是理论上的优先级顺序,也就是说,我使用内联式引入的css代码作

css 优先级 机制

多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External style sheet <(内部样式)Internal style sheet <(内联样式)Inline style 有个例外的情况,就是如果外部样式放在内部样式的后面,则外部样式将覆盖内部样式. 选择器的优先权--->权值 内联样式---1000: ID选择器----100:class选择器---10: 标签

css优先级

自适应布局 1.适应场景是:左右两列,一列设置浮动和设置宽度,另一列不需要设置浮动和宽度,只需设置overflow:hidden,就可以实现左右两列自适应.原理(BFC,清除浮动原理) 伪类与伪对象 在官方文档中伪类用classify来描述,而伪对象用create.从这里我们就能明白它们的区别: 伪对象则代表了某个元素的子对象,这个子对象虽然在逻辑上存在,但却并不实际存在于文档树中. 就像上文中的first-line,在DOM中其实并不存在.我们经常用的:before :after也属于伪对象.

css优先级汇总

我所理解的css优先级:当两个或者多个样式作用于同一个元素时,就会出现css优先级的问题. 多重样式优先级:当内联样式.内部样式和外部样式作用于同一个元素时,属于多重样式的范畴.优先级的顺序为内联样式>内部样式>外部样式. <head> <link href="style.css" rel="stylesheet" type="text/css" /> /*.color{color:red;}外部样式*/ &l

css优先级机制

所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序. 1.important >(内联样式)Inline style  >(内部样式)Internal style sheet >(外部样式)External style sheet (有个例外的情况,就是如果外部样式放在内部样式的后面,则外部样式将覆盖内部样式.) 2.CSS选择器优先级:id选择器优先级 > 类class选择器优先级 > 标签选择器优先级 1.文内的样式优先级为1,0,0,0,所以始终高于外部定义.

css优先级计算

主要的css选择器有id,class,tag,[],:,::等,而通常需要对其优先级进行判断的有id,class,tag,另外内联样式和!important也和css的优先级有关系. 如果将这五种不同情况的优先级以数字的形式来表示的话,其对应关系如下: !important(10000) > 内联样式(1000) > id(100) > class(10) > tag(1) 则通常的css优先级比较可转化为数值大小的比较,如:#list li和.list .content ul l

html网页的兼容性和css优先级

网页不仅是在一个浏览器上显示的网页,也要多考虑其他浏览器的兼容性,火狐.谷歌.搜狗等浏览器总体来说,网页的变化不大,最主要的是还是IE浏览器. color:red\9; IE6  IE7   IE8  都会执行这段代码. color:red\0 ; IE8  都会执行这段代码. _color:red ; *color:red ; >color:red ; <color:red ;  IE6  IE7  都会执行这段代码. 在编写IE6  IE7   IE8显示不同颜色的时候,要主要编写的顺序,

CSS优先级问题以及jQuery中的.eq()遍历方法和:eq()选择器的差别

在写一个TAB选项卡的时候遇到几个有意思的问题,记录下来 先把代码贴出来 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="

CSS/优先级

css的优先级 所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序. 样式表中的特殊性描述了不同规则的相对权重,它的基本规则是: 1 内联样式表的权值最高               style=""------------1000: 2 统计选择符中的ID属性个数.       #id --------------100 3 统计选择符中的CLASS属性个数. .class -------------10 4 统计选择符中的HTML标签名个数. p ------------