css的优先级和!important与ie6的BUG

2016-02-19 23:59 10 1 收藏

今天图老师小编要向大家分享个css的优先级和!important与ie6的BUG教程,过程简单易学,相信聪明的你一定能轻松get!

【 tulaoshi.com - Web开发 】

一 css的优先级

今天有人跟我说css hack中用!important来区分ie6,因为ie6不支持!important,是的在很早以前我也是用过这种方法写hack,但是后来就基本不用了。本来我对他谁的ie6不支持!important也没什么异议,可是正好在前几天正好用个这个!important属性解决了一个样式优先级的问题,而且是支持ie6的,这是为什么呢?到底ie6支不支持!important呢?

首先我们来看看!important这个属性的作用:!important是用来提升样式优先级的,我们知道样式是有优先级的。

我们先看看css的优先级的几个基本的规则:

ID选择器(形如#id{}) 类选择器(形如.class{}) 标签选择器(形如body{}或者*{}),也就是ID选择器,类选择器,标签选择器中,ID选择器的优先级最高,标签选择器最低; 选择器越具体优先级就越高,也就是
.classA .classB .classC{font-size: 25px;}
.classB .classC{font-size:18px}
.classC { font-size: 12px; }
这里.classA .classB .classC的优先级最高,.classC的优先级最低; 在同一个级别的情况下,最后指定的规则优先级就越高,也就是我们通常说的就近原则;html中标签的style的属性都高于css文件中的选择器样式; 标有!important的规则有最高优先级。

我们可以利用!important使该样式优先级最高,例如:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

CSS代码:
#idA{font-size:20px}
.classA{ font-size: 12px; }

HTML代码:
div id=idA class=classA我要20像素的字/div

我们知道根据上面的规则可以看出#idA{font-size:20px}的样式将被引用,那我们如果要12像素的字呢?

CSS代码:
#idA{font-size:20px}
.classA{ font-size: 12px !important; }

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

HTML代码:
div id=idA class=classA我要12像素的字/div

这样.classA{ font-size: 12px !important; }这个样式就被引用了。

这种方法在优先级低的样式被优先级高的样式覆盖,又想引用优先级低的样式时候非常有用!

二  !important在ie6下的一个BUG

还是看这一段代码,

CSS代码:
#idA{font-size:20px}
.classA{ font-size: 12px !important; }

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

HTML代码:
div id=idA class=classA我要12像素的字/div

大家可以在IE6下测试一下,文字是12像素的,也就是.classA{ font-size: 12px !important; }被引用了,这证明IE6是支持!important的。但是css hack中用!important来区分ie6,说ie6不支持!important又是怎么回事呢?

原来ie6下,在同一个选择器样式(即同一个大括号里面)下!important是无效的,例如:

css代码:
.classA{ font-size: 68px !important; font-size: 12px }

HTML代码:
div class=classA我要12像素的字/div

这里在ie6下是12像素的字,而其他浏览器下是68px的字,当然我们把样式改一下,!important放在后面,即.classA{ font-size: 12px;font-size: 68px !important; },那么ie6下和其他浏览器一样也是68px的字。也就是在同一个选择器样式(即同一个大括号里面)下!important被ie6彻底的无视了。

==============以下2009年8月1日更新==============

昨天在紫鼠的博客上也看到了关于!important的文章,说IE8在同一个选择器样式(即同一个大括号里面)下对!important的解析也是和IE6一样的,可是我测试的情况是IE8和IE6是不一样的,并留了言,今天我们讨论了这个问题,确实他写的他写的代码IE8和IE6对!important的解析是一样的。经过比较发现,他代码上没有DTD的声明,就是html代码上面的这一句:!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd,神啊,在没有DTD的声明的情况下,在同一个选择器样式(即同一个大括号里面)下,IE6,IE7,IE8对!important的解析都是无效的。还有只要有声明文档类型的不管是html4,xhtml1.o,还有html5(!DOCTYPE html),除去ie6有上面说的BUG外其他都是正常的。

来源:https://www.tulaoshi.com/n/20160219/1630993.html

延伸阅读
标签: Web开发
IE6真是太疯狂了。今天由于项目需要做了这么一个布局:一个外部的相对定位div,内部一个绝对定位的div(right:0), 如图: 可是在IE6下查看,却变成了right:1px的效果了: IE6还有奇数宽度的bug,解决方案就是将外部相对定位的div宽度改成偶数。 查看源码: CSS代码#out { width: 609px;/*这里宽度为奇数,bug就出现了!!改成偶数...
IE6真是太疯狂了。今天由于项目需要做了这么一个布局:一个外部的相对定位div,内部一个绝对定位的div(right:0), 如图: 可是在IE6下查看,却变成了right:1px的效果了: IE6还有奇数宽度的bug,解决方案就是将外部相对定位的div宽度改成偶数。 查看源码: CSS代码 #out { width: 609px;/*这里宽度为奇数,bug就出现了!!改成偶数...
标签: Web开发
IE6下默认的字体尺寸大致在 12 - 14px 之间,当你试图定义一个高度小于这个默认值的 div 的时候, IE 会固执的认为这个层的高度不应该小于字体的行高。所以即使你用 height: 6px; 来定义了一个 div 的高度,实际在 IE 下显示的仍然是一个 12 px 左右高度的层。 要解决这个问题,可以强制定义该 div 的字体尺寸,或者定义 overflow 属性来限制...
标签: Web开发
一、CSS HACK 以下两种方法几乎能解决现今所有HACK. 1, !important 随着IE7对!important的支持, !important 方法现在只针对IE6的HACK.(注意写法.记得该声明位置需要提前.) style #wrapper { width: 100px!important; /* IE7+FF */ width: 80px; /* IE6 */ } /style 2, IE6/IE77对FireFox *+html 与 *html 是IE特有的标签, firefox 暂不支...
CSSer必须掌握的关于IE6、IE7和FF的最简单的hack技巧。 FF浏览器 .test{     height:20px;     background-color:orange; } IE7浏览器 *+html .test{/*IE7*/     height:20px;     background-color:blue; } ...

经验教程

205

收藏

17
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部