`

CSS中!important的作用--浏览器兼容性

 
阅读更多

{*rule !important}这个css规则当今在网页制作的时候的普及已经非常流行了,以前我对它的理解就停留在‘浏览器是否识别阶段’ 而没有真正去研究过,可是现在发生了变化。众所周知,!important这个规则对Ie6.0,Ie7.0和Firefox能写hack,现在就来讲解 这是什么原理:

  *对于Ie系列浏览器都能够识别, firefox 浏览器则不能识别;

  !important只有Ie7.0和firefox可以识别,但是Ie6.0不能成功应用.

  (1)区别ie与firefox的hack为:border:2px solid #f00;*border:1px solid #f00;

     (2)区别Ie6.0 与Ie7.0、firefox的hack为:border:1px solid #f00!important;border:2px solid #f00;

  在(1)中,之所以把*放在后面是因为ff不识别*而导致只对它设置了一次border;而ie 系列进行了两次border设置后,后一个属性覆盖了前一个属性,故为一像素的边框。

   在(2)中,之所以把!important放在第一个border 设置,是因为它把这次border的优先级提高了,即使后面在一次甚至在N次设置border 也无效,但是Ie6.0对这个规则不接受,而导致它应用了第二次的border 设置,也就是第二次覆盖了第一次的这一原理, 并不是它不识别!important;所以它的border为2 像素的红框.

这是一个简单的应用:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
div{
width:800px;
height:250px;
background-color:yellow!important;/*提升指定样式规则的应用优先权*/
background-color:red;
border:3px solid #000!important;/*firefox*/
*border:5px solid #f00!important;/*Ie7.0*/
border:1px solid #000;/*Ie6.0*/
}
</style>
</head>
</html>

 例一:

#Box {
      color:red !important;
      color:blue;
 }

HTML

<div id="Box"> 在不同的浏览器下,这行字的色应该不同!</div>

 这个例子应该是大家经常见到的important的用法了,在IE环境下,这行字是蓝色,在firefox下,为红色,其用法不再多说了,看下一个例子。

例二:

#Box div{
     color:red;
}
.important_false{
     color:blue;
}
3.important_true{
     color:blue !important;
}

 HTML

<div id="Box">
    <div class="important_false">这一行末使用important</div>
    <div class="important_true">这一行使用了important</div>
</div>

 例二中,CSS代码第一行设定了box里面所有div中字体色为红色,第二行和第三行都用class重新定义了自身div的字体色为蓝色,不同的是,第二行末使用important,而第三行使用了!


  默认情况下,class的优先级小于id,所以,第二行中即使用class重定义了自身样式,也无法生效,所以继承父级属性,这行字还是红色!
  但是,第三行中,用了important提升优先级(或看成强制重定义),所以这里的css得以生效,这行字变为了蓝色!从这个例子,得以证明,
ie对important的并不是不支持!

  那么为什么很多人都说ie不认识它呢?我想应该是大家实战中可能都没有遇到例子中的情况: 
当你想提升class的优先级时怎么办?

  也就是说大家可能都忽略了它的这一作用,只了解在命名为同一个元素的CSS代码块中,用它来提升排列顺序相对靠前的代码的优先级(例一)!

  通过上边两个例子,得以总结:

        important对 一个良好(或者是标准)的浏览器来说,不仅仅是从顺序上提升代码的优先级,还可以用来提升class的优先级(比如firefox),但是从IE对前者的不支持可以看出,这只是IE的一大BUG,而不能说它“不认识、不支持”!

然而,不管怎么样,IE的这一大BUG帮助我们解决了很多兼容性问题,这显然不是件坏事!

        在IE中对盒模型(box-model)的解释是有BUG的,IE6.0之前的版本会把某元素的边框值和填充值包含在宽度之内(而不是加在宽度值上)。例如,你可能会使用以下css来指定某个容器的尺寸:

#box
   {
    width:100px;
    border:5px;
    padding:20px;
   }

 然后在html中应用:盒的总宽度在几乎所有浏览器中为150像素(100像素宽度+两条5像素的边框+两个20像素的填充),唯独在IE6之前版本的浏览器中仍然为100像素(边框值和填充值包含在宽度值中),使用盒模型的hack可以解决这一问题,

#box 
  { 
   width:150px;        //这个是错误的width,所有浏览器都读到了
   voice-family: \}\;      //IE5.X/win忽略了\}\后的内容
   voice-family:inherit;
   width:100px;       //包括IE6/win在内的部分浏览器读到这句,新的数值(300px)覆盖掉了旧的
  } 
       还有更简单的办法如下:
  CSS:
  #box { width:150px; }
  #box div { border:5px; padding:20px; }
  HTML:
  ...

 这样一来在任何浏览器中盒的总宽度都将是150像素。

  但是即使是到了最新的IE6.0依然存在浮动模型(Float-model)的问题,值得庆幸(还是悲哀?)的是我们可以用IE中一直都不支持的!important来解决这个问题。
  !important是CSS1就定义的语法,作用是提高指定样式规则的应用优先权(参见:W3.org的解释)。语法格式{ sRule!important },即写在定义的最后面,

     例如:

box{color:red !important;} 

 假如我们定义一个这样的样式:

#box{background-color: #ffffff !important; background-color: #000000;}

 那么在支持该语法的浏览器,如Firefox、Opera中,能够理解!important的优先级,背景显示#ffffff颜色,而在IE中则显示#000000.

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    CSS中的!important属性用法

    为了更好地管理和解决浏览器兼容性问题,推荐使用CSS预处理器(如Sass或Less),它们允许更灵活的规则定义,或者采用特性检测库(如Modernizr)配合条件注释来有条件地加载特定浏览器的样式。同时,随着浏览器对W3C...

    div+css中常见的浏览器兼容性处理

    以上是CSS在div+css布局中常见的浏览器兼容性处理方法。理解和掌握这些技巧有助于创建跨浏览器兼容的网页。在实际开发中,可以结合使用条件注释、CSS hack或使用专门的CSS预处理器(如Sass、Less)来进一步优化和...

    CSS在不同浏览器中兼容问题

    * 针对多种浏览器分别配置合适的 CSS 文件,再通过判断浏览器选择不同 CSS 实现兼容性 * 使用 &lt;!--[endif]--&gt; 等方法来区分不同浏览器 CSS 在不同浏览器中的兼容问题是一个复杂的问题,需要认真对待和解决。通过...

    css中提升优先级属性!important的用法总结

    3. **浏览器兼容性**:由于IE6不支持 `!important`,在处理旧版本的IE浏览器时需要额外注意,可能需要提供备用方案或者避免使用 `!important`。 4. **调试和开发**:在开发过程中,`!important` 可以作为临时解决...

    同浏览器CSS样式兼容问题

    除了上述方法,还可以考虑使用CSS前缀,如`-webkit-`、`-moz-`、`-ms-`、`-o-`等,这些前缀分别对应Chrome/Safari、Firefox、IE和Opera浏览器,以确保特定CSS功能在各个浏览器中的兼容性。 此外,使用CSS预处理器...

    Css与各浏览器兼容性

    解决浏览器兼容性问题的最佳实践包括遵循W3C标准编写CSS,使用reset.css重置浏览器默认样式,利用CSS预处理器(如Sass或Less)简化代码,以及利用条件注释或特性检测库(如Modernizr)为不同浏览器提供特定样式。...

    CSS下!important属性

    这个属性在网页设计和开发中非常有用,特别是在处理浏览器兼容性问题和解决CSS层叠冲突时。 重要性标志 "!important" 的使用格式如下: ```css selector { property: value !important; } ``` 在CSS层叠中,有三...

    CSS种针对浏览器兼容问题的解决方法

    以上列举了CSS中常见的浏览器兼容性问题及解决方法。开发者在进行前端开发时,需要时刻关注这些差异,并采取相应的措施来确保网页能够在不同的浏览器下表现出一致的效果。通过合理利用条件注释、特定浏览器的选择器...

    css中!important的作用(IE6 IE7 FF)及其原理

    这个规则在处理浏览器兼容性问题时尤其有用,特别是在处理Internet Explorer 6 (IE6)、IE7和Firefox等早期浏览器时。在这些浏览器中,`!important`规则有时可以作为hack来实现特定浏览器的样式调整。 首先,`!...

    CSS浏览器兼容性的各种代码解决方案

    标题和描述均聚焦于“CSS浏览器兼容性的各种代码解决方案”,这是一个在前端开发中常见的挑战,尤其是在需要确保网站在多种浏览器中表现一致时。由于不同浏览器(如IE6.0、IE7.0、Firefox2、Opera9等)对CSS的解析...

    CSS代码解决浏览器兼容问题

    important`的工作原理及其在不同浏览器中的表现,结合其他CSS技巧和工具,可以使我们在创建跨浏览器兼容的网页时更加得心应手。尽管这个过程可能会有些复杂,但随着浏览器更新和标准的统一,这些问题正在逐渐减少。

    CSS浏览器兼容性学习

    在网页设计中,CSS(层叠样式表)的浏览器兼容性是开发者经常面临的挑战,特别是对于老版本的Internet Explorer(IE5, IE6, IE7)以及Firefox等其他浏览器。CSS浏览器兼容性学习旨在确保网站在不同浏览器下都能正常...

    关于CSS/DIV在各浏览器兼容代码

    ### 关于CSS/DIV在各浏览器兼容代码 在前端开发领域,确保网页在不同浏览器上的一致性表现是一项挑战性的任务。特别是在早期Web标准尚未完全统一的年代,开发者需要掌握一系列技巧来解决浏览器间的差异问题。其中,...

    DIV+CSS设计时浏览器兼容性问题.pdf

    浏览器兼容性问题一直是Web开发中的一个痛点,尤其是在使用DIV+CSS进行页面布局时。这个问题主要源于不同浏览器对CSS规范的实现存在差异,导致同一段代码在不同浏览器中表现不一致。为了解决这一问题,开发者通常...

    css 多浏览器兼容解决方案 下载

    CSS 多浏览器兼容性是Web开发中的重要环节,因为不同的浏览器对CSS的解析方式可能存在差异,这可能导致在不同浏览器中页面展示效果不一致。以下是一些关键知识点和解决方案: 1. **DOCTYPE影响CSS处理**: DOCTYPE...

    IE6支持!important吗 如何用!important解决浏览器兼容性问题

    这在处理浏览器兼容性问题时尤其有用,因为在不同的浏览器中,相同的CSS代码可能产生不同的渲染效果。 IE6对!important的支持存在一些问题,尽管它能够识别!important声明,但是当一个样式内重复设置了相同的属性时...

    浏览器兼容性解决方法

    ### 浏览器兼容性解决方法:深入解析与实践技巧 在Web开发中,确保网站在不同浏览器上表现一致是一项挑战。本篇文章将基于提供的文件信息,深入探讨浏览器兼容性的解决方法,尤其针对Firefox、IE等主流浏览器进行...

Global site tag (gtag.js) - Google Analytics