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优先级(借鉴前辈整理的笔记)
id选择器默认优先级最高,其权值为100
class选择器、属性选择器和伪类选择器的权值为10
标签选择器的优先级较低,其权值为1 所以在比较样式的优先级时,只需统计选择符中的id、class、标签名个数,然后把对应的权值相加即可。根据结果便可得出优先级高低。
如果样式值中含有!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优先级考虑其中,或许能够得到意想不到的效果。
css 优先级的bug的更多相关文章
- CSS优先级总结(转载)
		
样式的优先级 多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External styl ...
 - 关于css优先级
		
css的优先级从低到高依次是:内部样式表的优先级为(1,0,0,0),id选择器优先级为(0,1,0,0),class选择器为(0.0,1,0),tag标签为(0.0,0,1).除此之外,!impor ...
 - 前端面试题-CSS优先级
		
一.选择器优先级 浏览器通过优先级来判断哪一些属性值与一个元素最为相关,从而在该元素上应用这些属性值.优先级是基于不同种类选择器组成的匹配规则. 二.优先级计算 优先级就是分配给指定的CSS声明的一个 ...
 - css选择器及css优先级
		
三个css选择器:id选择器#test1{ }.class选择器.test2{ }.标签选择器div{ }对三个div:<div>我是普通div</div>.<div i ...
 - 关于CSS的优先级,CSS优先级计算
		
原则一: 继承不如指定原则二: #id > .class > 标签选择符原则三:越具体越强大原则四:标签#id >#id ; 标签.class > .class CSS优先级权 ...
 - css 优先级 机制
		
多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External style sheet ...
 - z-index、display、selector选择器优先级css优先级面试用到
		
z-index:控制元素叠放顺序,哪个z-index数值越大,那个优先被叠放在上面. relative.absolute.fixed这三种情况可以使用z-index. static不可以使用. dis ...
 - css优先级和层叠
		
css优先级和层叠 1.优先级 计算方法: a.行内样式 b.id选择器的数量 c.类,伪类和属性选择器的数量 d.标签选择器和伪元素选择 ...
 - 使用background和background-image对CSS优先级造成影响
		
在写一个关于背景图的CSS时候发现一个奇怪的现象, 原图: 如下代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...
 
随机推荐
- 探寻C++最快的读取文件的方案 ——C++ IO优化
			
在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式.相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据.还有人说Pascal的re ...
 - LogBack通过MDC实现日志记录区分用户Session
			
1.首先实现一个interceptor,在请求开始的时候MDC put一个Session标志,interceptor结束的时候remove掉 public class SessionIntercept ...
 - iOS:CoreData数据库的使用一(创建单个数据库表)
			
CoreData数据库框架:mac系统自带的数据库,它是苹果公司对sqlite进行封装而来的,既提供了对数据库的主要操作,也提供了具体的视图关系模型. 需要用到三个对象: 1•Managed Obje ...
 - spring+mybatis 多数据源切换
			
摘自: http://www.oschina.net/code/snippet_347813_12525 1. 代码: DbContextHolder public class DbContextHo ...
 - MYSQL 命令行工具自动登录的方法
			
MYSQL 命令行工具自动登录的方法 1. 需求提出 由于在linux 环境下,经常需要使用mysql(command-line tool) 终端连接到MYSQL DB服务. 其中大致的语法如下: m ...
 - C++标准库简介
			
C++标准库的所有头文件都没有扩展名.C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能. <cname>形式的标准头文件[ <complex>例外]其 ...
 - phpnow 在win7下遇到“安装服务[apache_pn]失败”问题的一种解决办法
			
安装PHPnow时如果遇到下列问题: 安装服务[apache_pn]失败.可能原因如下: 1. 服务名已存在,请卸载或使用不同的服务名. 2. 非管理员权限,不能操作 Windows NT 服务. 将 ...
 - Java网络爬虫 - 一个简单的爬虫例子
			
WikiScraper.java package master.haku.scrape; import org.jsoup.Jsoup; import org.jsoup.nodes.Document ...
 - 算法笔记_042:求最小公倍数(Java)
			
目录 1 问题描述 2 解决方案 1 问题描述 何为最小公倍数?能同时被数字m和数字n整除的最小整数.例如,24和60的最小公倍数等于120.下面请编写相关函数实现求取数字m和n的最小公倍数. 2 ...
 - js获取事件源及触发该事件的对象
			
怎样获取事件源及触发该事件的对象,方法有非常多,js中能够通过event来实现.以下有个不错的演示样例,感兴趣的朋友能够參考下: function myfunction(event) { event ...