`

CSS兼容性学习

阅读更多

资源列表

编写跨浏览器兼容的 CSS 代码的金科玉律

http://www.cnbeta.com/articles/113378.htm

 

1. 在书写html代码时,最好在头部加上文档声明

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 

2. 关于FF高度自适应的问题,在标签结束之前加入

 

<div style="clear:both"></div>

 

既可解决问题。完成代码如下:

 

<div style="width:500px;padding:0;margin:0;border:1px dotted red;height:100%; overflow:auto;">
    <div style="display:inline;width:120px;border:20px solid #000000;float:left;margin:20px;padding:25px;">
       块级元素之间的竖直margin,为两个块级元素margin的最大值,
    </div>
    <div style="width:248px;border:1px solid #000000;float:left;margin:0;height:100%; overflow:auto;">
    </div>
    <div style="clear:both"></div>
</div>
 

3. 对于imporant这个属性,对IE5,6无效,但是对IE7以后及其他FF等浏览器有效

 

.imp{
    color:red!important; /*IE 5,6不认识这个属性,但IE7以后和其他标准浏览器有效*/
    color:blue;
}

 

以下代码属于转载
所有浏览器通用(市面上主要用到的IE6IE7FF)
  height:100px;
  IE6专用
  _height:100px;
  IE6专用
  *height:100px;
  IE7专用
  *+height:100px;
  IE7、FF共用
  height:100px!important;
  一、CSS兼容
  以下两种方法几乎能解决现今所有兼容.
  1,!important(不是很推荐,用下面的一种感觉最安全)
  随着IE7对!important的支持,!important方法现在只针对IE6的兼容.(注意写法.记得该声明位置需要提前.)
  代码:
  <style>
  #wrapper{
  width:100px!important;/*IE7+FF*/
  width:80px;/*IE6*/
  }
  </style>
  2,IE6/IE77对FireFox<from针对firefoxie6ie7的css样式>
  *+html与*html是IE特有的标签,firefox暂不支持.而*+html又为IE7特有标签.
  代码:
  <style>
  #wrapper{width:120px;}/*FireFox*/
  *html#wrapper{width:80px;}/*ie6fixed*/
  *+html#wrapper{width:60px;}/*ie7fixed,注意顺序*/
  </style>
  注意:
  *+html对IE7的兼容必须保证HTML顶部有如下声明:
  代码:
  <!DOCTYPE HTML PUBLIC“-//W3C//DTD HTML4.01 Transitional//EN””http://www.w3.org/TR/html4/loose.dtd“>
  二、万能float闭合(非常重要!)可以用这个解决多个div对齐时的间距不对,
  关于clearfloat的原理可参见[How To Clear Floats Without Structural Markup]
  将以下代码加入Global CSS中,给需要闭合的div加上class=”clearfix”即可,屡试不爽.
  代码:
  <style>
  /*ClearFix*/
  .clearfix:after{
  content:”.”;
  display:block;
  height:0;
  clear:both;
  visibility:hidden;
  }
  .clearfix{
  display:inline-block;
  }
  /*HidefromIEMac*/
  .clearfix{display:block;}
  /*EndhidefromIEMac*/
  /*endofclearfix*/
  </style>
  三、其他兼容技巧(相当有用)
  1,FF下给div设置padding后会导致width和height增加,但IE不会.(可用!important解决)
  2,居中问题.
  1).垂直居中.将line-height设置为当前div相同的高度,再通过vetical-align:middle.(注意内容不要换行.)
  2).水平居中.margin:0auto;(当然不是万能)
  3,若需给a标签内内容加上样式,需要设置display:block;(常见于导航标签)
  4,FF和IE对BOX理解的差异导致相差2px的还有设为float的div在ie下margin加倍等问题.
  5,ul标签在FF下面默认有list-style和padding.最好事先声明,以避免不必要的麻烦.(常见于导航标签和内容列表)
  6,作为外部wrapper的div不要定死高度,最好还加上overflow:hidden.以达到高度自适应.
  7,关于手形光标.cursor:pointer.而hand只适用于IE.贴上代码:
  8、IE6的双倍边距BUG
  <styletype=”text/css”>
  body{margin:0}
  div{float:left;margin-left:10px;;height:200px;border:1pxsolidred}
  </style>
  浮动后本来外边距10px,但IE解释为20px,解决办法是加上display:inline
  9、为什么FF下文本无法撑开容器的高度?
  标准浏览器中固定高度值的容器是不会象IE6里那样被撑开的,那我又想固定高度,又想能被撑开需要怎样设置呢?办法就是去掉height设置min-height:200px;这里为了照顾不认识min-height的IE6可以这样定义:
  div{height:auto!important;height:200px;min-height:200px;}
  兼容代码:兼容最推荐的模式。
  /*FF*/
  .submitbutton{
  float:left;
  width:40px;
  height:57px;
  margin-top:24px;
  margin-right:12px;
  }
  /*IE6*/
  *html.submitbutton{
  margin-top:21px;
  }
  /*IE7*/
  *+html.submitbutton{
  margin-top:21px;
  }
  什么是浏览器兼容:当我们使用不同的浏览器(Firefox IE7 IE6)访问同一个网站,或者页面的时候,会出现一些不兼容的问题,有的显示出来正常,有的显示出来不正常,我们在编写CSS的时候会很恼火,刚修复了这个浏览器的问题,结果另外一个浏览器却出了新问题。而兼容就是一种办法,能让你在一个CSS里面独立的写支持不同浏览器的样式。这下就和谐了。呵呵!
  程序代码
  第一个兼容,IEFF所有浏览器公用(其实也不算是兼容)
  height:100px;
  第二个兼容IE6专用
  _height:100px;
  第三个兼容IE6 IE7公用
  *height:100px;
  height:100px;
  *height:120px;
  _height:150px;
  在FF下,第2、3个属性FF不认识,所以它读的是height:100px;
  在IE7下,第三个属性IE7不认识,所以它读第1、2个属性,又因为第二个属性覆盖了第一个属性,所以IE7最终读出的是第2个属性*height:120px;
  在IE6下,三个属性IE6都认识,所以三个属性都可以读取,又因为第三个属性覆盖掉前2个属性,所以IE6最终读取的是第三个属性。
  1针对firefox ie6 ie7的css样式
  现在大部分都是用!important来兼容,对于ie6和firefox测试可以正常显示,但是ie7对!important可以正确解释,会导致页面没按要求显示!找到一个针对IE7不错的兼容方式就是使用“*+html”,现在用IE7浏览一下,应该没有问题了现在写一个CSS可以这样:
  #1{color:#333;}/*Moz*/
  *html#1{color:#666;}/*IE6*/
  *+html#1{color:#999;}/*IE*/
  那么在firefox下字体颜色显示为#333,IE6下字体颜色显示为#666,IE7下字体颜色显示为#999。
  2css布局中的居中问题
  主要的样式定义如下:
  body{TEXT-ALIGN:center;}
  #center{MARGIN-RIGHT:auto;MARGIN-LEFT:auto;}
  说明:
  首先在父级元素定义TEXT-ALIGN:center;这个的意思就是在父级元素内的内容居中;对于IE这样设定就已经可以了。
  但在mozilla中不能居中。解决办法就是在子元素定义时候设定时再加上“MARGIN-RIGHT:auto;MARGIN-LEFT:auto;”
  需要说明的是,如果你想用这个方法使整个页面要居中,建议不要套在一个DIV里,你可以依次拆出多个div,只要在每个拆出的div里定义MARGIN-RIGHT:auto;MARGIN-LEFT:auto;就可以了。
  3盒模型不同解释.
  #box{
  width:600px;
  //forie6.0-width:500px;
  //forff+ie6.0
  }
  #box{
  width:600px!important
  //forff
  width:600px;
  //forff+ie6.0
  width/**/:500px;
  //forie6.0-
  }
  4浮动ie产生的双倍距离
  #box{float:left;width:100px;margin:000100px;//这种情况之下IE会产生200px的距离display:inline;//使浮动忽略}
  这里细说一下block,inline两个元素,Block元素的特点是:总是在新行上开始,高度,宽度,行高,边距都可以控制(块元素);Inline元素的特点是:和其他元素在同一行上,…不可控制(内嵌元素);
  #box{display:block;//可以为内嵌元素模拟为块元素display:inline;//实现同一行排列的的效果diplay:table;
  5IE与宽度和高度的问题
  IE不认得min-这个定义,但实际上它把正常的width和height当作有min的情况来使。这样问题就大了,如果只用宽度和高度,正常的浏览器里这两个值就不会变,如果只用min-width和min-height的话,IE下面根本等于没有设置宽度和高度。比如要设置背景图片,这个宽度是比较重要的。要解决这个问题,可以这样:
  #box{width:80px;height:35px;}html>body#box{width:auto;height:auto;min-width:80px;min-height:35px;}
  6页面的最小宽度
  min-width是个非常方便的CSS命令,它可以指定元素最小也不能小于某个宽度,这样就能保证排版一直正确。但IE不认得这个,而它实际上把 width当做最小宽度来使。为了让这一命令在IE上也能用,可以把一个<div>放到<body>标签下,然后为div指定一个类:
  然后CSS这样设计:
  #container{
  min-width:600px;
  width:e­xpression(document.body.clientWidth<600?“600px”:“auto”);
  }
  第一个min-width是正常的;但第2行的width使用了Javascript,这只有IE才认得,这也会让你的HTML文档不太正规。它实际上通过Javascript的判断来实现最小宽度。
  7清除浮动
  .兼容box{
  display:table;
  //将对象作为块元素级的表格显示
  }
  或者
  .兼容box{
  clear:both;
  }
  或者加入:after(伪对象),设置在对象后发生的内容,通常和content配合使用,IE不支持此伪对象,非Ie浏览器支持,所以并不影响到IE/WIN浏览器。这种的最麻烦的
  ……#box:after{
  content:“.”;
  display:block;
  height:0;
  clear:both;
  visibility:hidden;
  }
  8DIV浮动IE文本产生3象素的bug
  左边对象浮动,右边采用外补丁的左边距来定位,右边对象内的文本会离左边有3px的间距.
  #box{
  float:left;
  width:800px;}
  #left{
  float:left;
  width:50%;}
  #right{
  width:50%;
  }
  *html#left{
  margin-right:-3px;
  //这句是关键
  }
  HTML代码
  <DIVid=box>
  <DIVid=left></DIV>
  <DIVid=right></DIV>
  </DIV>
  9属性选择器(这个不能算是兼容,是隐藏css的一个bug)
  p[id]{}div[id]{}
  p[id]{}div[id]{}
  这个对于IE6.0和IE6.0以下的版本都隐藏,FF和OPera作用
  属性选择器和子选择器还是有区别的,子选择器的范围从形式来说缩小了,属性选择器的范围比较大,如p[id]中,所有p标签中有id的都是同样式的.
  10IE捉迷藏的问题
  当div应用复杂的时候每个栏中又有一些链接,DIV等这个时候容易发生捉迷藏的问题。
  有些内容显示不出来,当鼠标选择这个区域是发现内容确实在页面。
  解决办法:对#layout使用line-height属性或者给#layout使用固定高和宽。页面结构尽量简单。
  11高度不适应
  高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调节,特别是当内层对象使用
  margin或paddign时。例:
  <divid=”box”>
  <p>p对象中的内容</p>
  </div>
  CSS:
  #box{background-color:#eee;}
  #boxp{margin-top:20px;margin-bottom:20px;text-align:center;}
  解决方法:在P对象上下各加2个空的div对象CSS代码:.1{height:0px;overflow:hidden;}或者为DIV加上border属性。
  屏蔽IE浏览器(也就是IE下不显示)
  *:lang(zh)select{font:12px!important;}/*FF,OP可见*/
  select:empty{font:12px!important;}/*safari可见*/
  这里select是选择符,根据情况更换。第二句是MAC上safari浏览器独有的。
  仅IE7识别
  *+html{…}
  当面临需要只针对IE7做样式的时候就可以采用这个兼容。
  IE6及IE6以下识别
  *html{…}
  这个地方要特别注意很多地主都写了是IE6的兼容其实IE5.x同样可以识别这个兼容。其它浏览器不识别。
  html/**/>bodyselect{……}
  这句与上一句的作用相同。
  仅IE6不识别
  select{display/*IE6不识别*/:none;}
  这里主要是通过CSS注释分开一个属性与值,流释在冒号前。
  仅IE6与IE5不识别
  select/**/{display/*IE6,IE5不识别*/:none;}
  这里与上面一句不同的是在选择符与花括号之间多了一个CSS注释。
  仅IE5不识别
  select/*IE5不识别*/{display:none;}
  这一句是在上一句中去掉了属性区的注释。只有IE5不识别
  盒模型解决方法
  selct{width:IE5.x宽度;voice-family:”"}”";voice-family:inherit;width:正确宽度;}
  盒模型的清除方法不是通过!important来处理的。这点要明确。
  清除浮动
  select:after{content:”.”;display:block;height:0;clear:both;visibility:hidden;}
  在Firefox中,当子级都为浮动时,那么父级的高度就无法完全的包住整个子级,那么这时用这个清除浮动的兼容来对父级做一次定义,那么就可以解决这个问题。
  截字省略号
  select{-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrapoverflow:hidden;}
  这个是在越出长度后会自行的截掉多出部分的文字,并以省略号结尾,很好的一个技术。只是目前Firefox并不支持。
  只有Opera识别
  @mediaalland(min-width:0px){select{……}}
  针对Opera浏览器做单独的设定。
  以上都是写CSS中的一些兼容,建议遵循正确的标签嵌套(divulli嵌套结构关系),这样可以减少你使用兼容的频率,不要进入理解误区,并不是一个页面就需要很多的兼容来保持多浏览器兼容),很多情况下也许一个兼容都不用也可以让浏览器工作得非常好,这些都是用来解决局部的兼容性问题,如果希望把兼容性的内容也分离出来,不妨试一下下面的几种过滤器。这些过滤器有的是写在CSS中通过过滤器导入特别的样式,也有的是写在HTML中的通过条件来链接或是导入需要的补丁样式。
  IE5.x的过滤器,只有IE5.x可见
  @mediatty{
  i{content:”";/*”“*/}}@import’ie5win.css’;/*”;}
  }/**/
  IE5/MAC的过滤器,一般用不着
  /**//*/
  @import“ie5mac.css”;
  /**/
  IE的if条件兼容自己可以灵活使用参看这篇IE条件注释
  OnlyIE
  所有的IE可识别
  只有IE5.0可以识别
  OnlyIE5.0+
  IE5.0包换IE5.5都可以识别
  仅IE6可识别
  OnlyIE7/-
  IE6以及IE6以下的IE5.x都可识别
  OnlyIE7/-
  仅IE7可识别
  Css当中有许多的东西不不按照某些规律来的话,会让你很心烦,虽然你可以通过很多的兼容,很多的!important来控制它,但是你会发现长此以往你会很不甘心,看看许多优秀的网站,他们的CSS让IE6,Ie7,Firefox,甚至Safari,Opera运行起来完美无缺是不是很羡慕?而他们看似复杂的模版下面使用的兼容少得可怜。其实你要知道IE和Firefox并不不是那么的不和谐,我们找到一定的方法,是完全可以让他们和谐共处的。不要你认为发现了兼容的办法,你就掌握了一切,我们并不是兼容的奴隶。
  div ul li的嵌套顺序
  具体嵌套写法
  遵循上面得嵌套方式,<div><ul><li></li></ul></div> 然后在CSS里面告诉ul{Margin:0px;Padding:0px;list-style:none;},其中list-style:none是不让<li>标记的最前方显示圆点或者数字等目录类型的标记,因为IE和Firefox显示出来默认效果有些不一样。因此这样不需要做任何手脚,你的IE6、和IE7、Firefox显示出来的东西(外距,间距,高度,宽度)就几乎没什么区别了,也许细心的你会在某一个时刻发现一、两个象素的差别,但那已经很完美了,不需要你通过调整大片的CSS来控制它们的显示了,你愿意,你可以仅仅兼容一两个地方,而且通常这种兼容可以适应各种地方,不需要你重复在不同的地方调试不同的兼容方式–减轻你的烦。你可以ul.class1,ul.class2,ul.class3{xxx:xxxx}的方式方便的整理出你要兼容的地方,而统一兼容。尝试一下吧,再也不要乱嵌套了,虽然在Div+CSS的方式下你几乎可以想怎么嵌套就怎么嵌套,但是按照上面的规律你将轻松很多,从而事半功倍!
 

 

分享到:
评论

相关推荐

    css 浏览器兼容性速查

    "CSS浏览器兼容性速查"是开发者在工作中不可或缺的一个参考资料,它帮助我们了解各种CSS属性在不同浏览器上的表现,以便于优化代码,确保网站在主流浏览器上都能正常显示。 首先,我们要理解浏览器兼容性问题的来源...

    实际工作总结的CSS兼容解决办法

    在WEB开发过程中,CSS(层叠样式表)是构建页面布局和样式的基石,但不同浏览器对CSS的支持程度和解析方式可能存在差异,这就引出了我们常说的“CSS兼容性问题”。作为一名刚毕业就投身此领域的开发者,过去一年的...

    CSS浏览器兼容性学习

    CSS浏览器兼容性学习旨在确保网站在不同浏览器下都能正常显示和功能完整。以下是关于这个主题的一些关键知识点: 一、CSS Hack 1. `!important` Hack:在IE7之后的浏览器支持`!important`规则,可以用来区分IE6和...

    css兼容性的解决办法

    然而,由于不同的浏览器对CSS规范的实现存在差异,开发者经常面临CSS兼容性问题。本文将深入探讨这些兼容性问题及其解决策略。 首先,我们需要了解CSS兼容性问题的来源。主要有以下几点: 1. **浏览器版本差异**:...

    javascript和css兼容性小结

    这篇博文“JavaScript 和 CSS 兼容性小结”可能探讨了如何在不同的浏览器环境下确保代码的兼容性和一致性,这对于 web 开发者来说至关重要。 JavaScript,作为一种广泛使用的客户端脚本语言,它的兼容性问题主要...

    CSS样式命名以及兼容性.pdf

    本篇文档主要探讨了CSS样式的命名规则和兼容性问题,这对于确保网页的可读性、可维护性和跨浏览器一致性至关重要。 首先,文档提到了一些常用的CSS类名命名约定,这些约定有助于提高代码的可读性和团队间的协作效率...

    css兼容列表,css帮助文件

    这个压缩包文件中的"css兼容列表.png"和"css兼容列表1.png"很可能是以图表形式展示的CSS兼容性信息。这些图片可能包含表格或者图形,列出了各种CSS属性和它们在不同浏览器(如IE、Firefox、Chrome、Safari、Opera等...

    css入门教程IE和Firefox浏览器CSS兼容性技巧整理.docx

    【CSS入门教程:IE和Firefox浏览器CSS兼容性技巧】 在网页设计中,CSS(层叠样式表)扮演着至关重要的角色,它使得我们能够控制页面的布局和样式。然而,不同浏览器之间对于CSS的支持程度和解析方式存在差异,尤其...

    IE与Firefox的CSS兼容大全.rar

    "IE与Firefox的CSS兼容大全"是一个针对这两个浏览器之间CSS兼容性问题的资源集合,旨在帮助网页开发者解决在跨浏览器设计时遇到的难题。 首先,IE浏览器,尤其是早期版本,如6、7和8,对于CSS标准的支持并不完全。...

    个人CSS设计兼容性问题总结教程

    然而,由于不同浏览器之间的解析差异,CSS兼容性问题常常困扰着开发者。本文将根据提供的内容,详细讲解一些常见的CSS设计在不同浏览器,特别是IE6-8中的兼容性问题及解决方案。 首先,我们关注的是按钮的兼容性...

    CSS常见浏览器兼容问题

    在网页设计领域,CSS(Cascading ...总的来说,处理CSS兼容性问题需要对各种浏览器的特性有深入理解,并掌握一定的技巧和工具。通过学习和实践,我们可以更好地应对这些挑战,创建出在多种浏览器下都能完美展现的网页。

    css移动版兼容性问题记录

    本文旨在记录常见的移动端CSS兼容性问题及其解决方案,帮助前端开发者更好地进行移动页面的开发工作。 #### 常见的CSS兼容性问题及解决方案 ##### 水平垂直居中 **方案一:Flexbox** ```css .item { display: ...

    CSS在不同浏览器的兼容性问题

    描述中的“CSS兼容性问题汇总文档”意味着存在一份文档,详细列举了CSS在不同浏览器中遇到的常见兼容性问题以及相应的解决策略。以下是这些问题的详细说明: 1. **浏览器解析差异**:每个浏览器都有自己的内核,如...

    IE兼容CSS3

    然而,由于历史原因,尤其是较旧版本的Internet Explorer(IE)浏览器,对CSS3的支持并不完全,这给开发者带来了兼容性问题。本文将深入探讨如何通过一句JavaScript代码来解决IE对CSS3的兼容问题,并提供一个实际...

    CSS学习手册,CSS学习

    - **vendor prefixes**:了解并使用-webkit-、-moz-等前缀,确保新特性在旧版浏览器中的兼容性。 - **Can I use**:在线工具,检查CSS特性在各浏览器中的支持情况。 通过深入阅读《CSS学习手册》,你将能够逐步...

    HTML标签CSS兼容

    HTML标签和CSS兼容性是网页开发中的重要主题,尤其是在跨浏览器和跨设备的环境中。HTML是超文本标记语言,用于创建网页结构,而CSS(层叠样式表)则负责定义这些结构的外观和布局。两者结合使用,可以实现美观且功能...

    CSS在浏览器中的兼容性及使用技巧

    解决CSS兼容问题的关键在于理解和运用“hack”技巧。例如,对于IE6、IE7和Firefox,可以使用特定的语法结构来区分它们的解析方式: 1. `!important` hack:Firefox等现代浏览器支持`!important`来强制应用某个样式...

Global site tag (gtag.js) - Google Analytics