牛骨文教育服务平台(让学习变的简单)
博文笔记

「论坛技术求助区-精华帖」DIV+CSS网页中IE和火狐兼容问题的合集

创建时间:2018-01-26 投稿人: 浏览次数:468

后盾网建校于2010年,一直专注于PHP全栈开发技术培训,并且专门为大家设置了【php与web技术求助专区】,如果你在学习中,遇到相关方面的技术难题,可以在<后盾网论坛>发帖子哦,后盾网的技术讲师会亲自为你解答的!

在这里,不但有后盾老师的解答,还有不少热心的盾友技术分享贴,技术精华哦。看,下面这就是一位@waglittle热心的网友给大家的技术分享!

「论坛技术求助区-精华帖」DIV+CSS网页中IE和火狐兼容问题的合集

如题:做了不少网站,遇到很多兼容性问题,也解决了不少,但是每次都不注意整理,导致遇到同样的问题,还要找半天的解决办法。这样做太浪费时间了,现欲借助后盾网这个平台,进行整理!以便方便大家和自己,少走一些弯路。

希望大家踊跃跟帖,让可恶的兼容性问题,在后盾消失掉!

1、用!important解决IE和Mozilla的布局差别

!important是CSS1就定义的语法,作用是提高指定样式规则的应用优先权,最重要的一点是:IE一直都不支持这个语法,而其他的浏览器都支持。因此我们就可以利用这一点来分别给IE和其他浏览器不同的样式定义,例如,我们定义这样一个样式:

.colortest{ border:20px solid #60A179!important; border:20px solid #00F; padding:30px; width:300px;}

在Mozilla中浏览时候,能够理解!important的优先级,因此显示#60A179的颜色;在IE中浏览时候,不能够理解!important的优先级,因此显示#00F的颜色。

2、解决超链接访问过后hover样式不显示的问题

改变CSS属性的排列顺序: 先后顺序标准应为:a:link—a:visited—a:hover—a:active

3、Li中内容超过长度后以省略号显示的方法

<meta content="text/html; charset=gb2312" http-equiv="Content-Type" /><style type="text/css">

<!--

li {

width:200px;

white-space:nowrap;

text-overflow:ellipsis;

-o-text-overflow:ellipsis;

overflow: hidden;}

--></style>

<ul>

<li><a href="#">web标准常见问题大全web标准常见问题大全</a></li>

<li><a href="#">web标准常见问题大全web标准常见问题大全</a></li>

</ul>

4、margin和padding定义尺寸的缩写

margin:3px——表示所有边都是3px;

margin:3px 5px—— 表示top和bottom的值是3px ,right和left的值是5px

margin:3px 5px 7px——表示top的值是3,right和left的值是5,bottom的值是7

margin:3px 5px 7px 5px——四个值依次表示top,right,bottom,left;上右下左。

5、解决IE不能正确显示透明PNG——header内加入代码

  1. <script language="javascript">

  2. function correctPNG()

  3. {

  4. for(var i=0; i<document.images.length; i++)

  5. {

  6. var img = document.images[i]

  7. var imgName = img.src.toUpperCase()

  8. if (imgName.substring(imgName.length-3, imgName.length) == "PNG")

  9. {

  10. var imgID = (img.id) ? "id=&#39;" + img.id + "&#39; " : ""

  11. var imgClass = (img.className) ? "class=&#39;" + img.className + "&#39; " : ""

  12. var imgTitle = (img.title) ? "title=&#39;" + img.title + "&#39; " : "title=&#39;" + img.alt + "&#39; "

  13. var imgStyle = "display:inline-block;" + img.style.cssText

  14. if (img.align == "left") imgStyle = "float:left;" + imgStyle

  15. if (img.align == "right") imgStyle = "float:right;" + imgStyle

  16. if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle

  17. var strNewHTML = "<span " + imgID + imgClass + imgTitle

  18. + " style="" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"

  19. + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"

  20. + "(src=&#39;" + img.src + "&#39;, sizingMethod=&#39;scale&#39;);"></span>"

  21. img.outerHTML = strNewHTML

  22. i = i-1

  23. }

  24. }

  25. }

  26. window.attachEvent("onload", correctPNG);

  27. </script>

复制代码

6、ul在Firefox和IE下表现不同

使用(padding:0; margin:0; list-style:inside;)或者(padding:0; margin:0; list-style:none;)实现兼容

7、BOX模型在firefox和IE中的解释相差2px的解决方法

div{margin:30px!important;margin:28px;}

注意这两个margin的顺序一定不能写反。根据上面提到的IE并不支持!important,所以在IE下其实解释成这样:

div{maring:30px;margin:28px}

重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;

8、margin的默认效果

div里的内容,ie默认为居中,而ff默认为左对齐。使ff内容居中的方法是增加代码margin:auto;

/*Add on 2012-05-19*/

9、ie6和ie7或FF下z-index无法正常调用(隐藏菜单栏中用的比较多)

可能不少人知道,这IE6下,层级的高低不仅要看自己,还要看自己的老爸这个后台是否够硬。用术语具体描述为:

父标签position属性为relative或absolute时,子标签的absolute属性是相对于父标签而言的。而在IE6下,层级的表现有时 候不是看子标签的z-index多高,而要看它们的父标签的z-index谁高谁低。

有一定经验的人可能都知道上面的事实。但是,相信这里面很多人不知道IE6下,决定层级高低的不是当前的父标签,而是整个DOM tree(节点树)的第一个relative属性的父标签。有时平时我们多处理一个父标签,z-index层级多而复杂的情况不多见,所以难免会有认识上 的小小偏差。

例:

条件很简单,只要绝对定位的第一个元素的第一个爸爸,或者说是最老的那个爸爸级别的人的relative属性小于黑色半透明层的z-index层 级。例如下面的HTML代码:

  1. <div id="blank"></div>

  2. <div style="position:relative;">

  3. <div style="position:relative; z-index:1000;">

  4. <div style="position:absolute; z-index:9999;">

  5. <img src="http://image.zhangxinxu.com/image/study/s/s256/mm3.jpg" />

  6. </div>

  7. </div>

  8. </div>

复制代码

可以看到,mm3图片的父标签div 是绝对定位,层级9999,比1大多了,绝对定位的父标签层级1000(10000也一样),也比黑色半透明层的z-index:1大多了,但是,我们可 怜的IE6童鞋——

「论坛技术求助区-精华帖」DIV+CSS网页中IE和火狐兼容问题的合集

再看看以Firefox为代表的其他童鞋:

「论坛技术求助区-精华帖」DIV+CSS网页中IE和火狐兼容问题的合集

E7与IE6有着同样的bug,原因很简单,虽然图片所在div当前的老爸层级很高(1000),但是由于老爸的老爸不顶用,可怜了9999如此 强势的孩子没有出头之日啊!

「论坛技术求助区-精华帖」DIV+CSS网页中IE和火狐兼容问题的合集

知道原因解决就很轻松了,给第一任老爸添加z-index后的HTML代码如下:

  1. <div id="blank"></div>

  2. <div style="position:relative; z-index:1;">

  3. <div style="position:relative; z-index:1000;">

  4. <div style="position:absolute; z-index:9999;">

  5. <img src="http://image.zhangxinxu.com/image/study/s/s256/mm3.jpg" />

  6. </div>

  7. </div>

  8. </div>

复制代码

结果IE6童鞋喜笑颜开,春光灿烂:

「论坛技术求助区-精华帖」DIV+CSS网页中IE和火狐兼容问题的合集

/*Add on 2012-05-21*/

10.列表,错位问题,没什么好说的!看图就能明白,可还是让我想了半天,非常坑爹!

FF下错位,IE下正常:

「论坛技术求助区-精华帖」DIV+CSS网页中IE和火狐兼容问题的合集

在群里问了个朋友,图是这样的:

「论坛技术求助区-精华帖」DIV+CSS网页中IE和火狐兼容问题的合集

记过自己看了下样式,行高设置高了,所以错位了.

解决前:#newslist li {line-height:30px;}

解决后:#newslist li {line-height:24px;}

/*Add on 2012-07-23*/

11.IE6下margin属性,宽度、高度为火狐下的双倍!

当你工作一天,网页终于做好了。可是突然发现,火狐下正常,IE6下很多东西的宽度都是你所设置的数值的双倍。请不要着急。

例子:

<code>.logo{ width:187px; height:59px;float:left;margin-top:40px; margin-left:55px;}</code>

出现这种情况是因为,在margin属性里同时设置了数值,以及float的属性。

解决办法为:在其后面添加display:inline;就可以解决这个问题,更改后如下:

<code>.logo{ width:187px; height:59px;float:left;margin-top:40px; margin-left:55px;display:inline;}</code>

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。