当我们想让一段文字出现在一个布局块的右边的时候,我们会让布局块向左浮动,然后把段落设置左布局块宽度大小的左空白。比如左布局块是.a{float:left;height: 110px;width: 286px;},我们就设置p{margin-left: 286px;border: 1px solid #000;},其中背景颜色和边框都是测试用的,不是必要的样式设置。在Firefox下可能没问题,但在IE下,你会发现布局块右边的段落离左边框有3px的空白,这就是一个bug。如图1

  为了解决这个bug,我们首先用* html p{height: 1%;}来针对IE下的段落进行样式覆盖,因为IE的html元素有个匿名的父元素,所以用* html加你要选择的选择器就可以专门针对IE来设置一些样式了。IE有布局的概念,默认只有table等元素才会拥有布局,p等标签是没有拥有布局的,但是如果给p标签设置了heigh,那么p标签就拥有布局了,这样以来,布局块右边的段落文字离自己的左边框就没有3px的空白了。因为现在p拥有了布局,它就会被限制为一个矩形,这时候它会自动出现在左布局块的右边,这时候我们要覆盖以前为段落设置的286像素的左空白,我们最终要设置* html p{height: 1%;margin-left:0;}但是很快你就会发现布局块右边的段落的左边框离布局块有3px的空白,这个空白是左边的布局块的空白,这又是一个bug,如图2

  为了解决这个bug,我们需要给左浮动布局块设置负值的右空白,增加样式* html .a{margin-right: -3px;},这样如果左浮动布局块不是图片的话已经完美解决了。如果左边的浮动有图片的话,IE的不同版本的处理不一样,windows下的ie5.x对会给图片的左右两边都增加3px的空白,而ie6不对图片增加额外的空白,所以经过上面的样式设置后,ie6下的段落会向左错位3px,如图3。这就一连串bug了,往往开发程序就是这样,修复了旧bug,引入了新bug。

  为了解决上面的bug,我们还要用到一个技巧来为ie5和ie6单独的设置图片的左浮动样式,这里要用到一个ie5转义字符的bug。完整的样式是这样的:* html img.a{margin: 0 -3px;ma\rgin:0;},首先我们用* html img.a来选取所有IE浏览器下的带有a类的img元素,然后我们先用margin:0 -3px;设置上下空白为0,左右空白均为-3像素,这个主要是针对ie5(windows)的,因为ie5对浮动图片左右都添加不必要的3px空白。然后紧接着用ma\rgin:0;来覆盖上面的设置,因为IE5下不会忽略转移字符,所以它不认识这个样式设置,直接就忽略了,而IE6认识,就覆盖了上面一句的样式设置,左右空白为0了。

  最后一步,为了让FF和IE下显示一直,我们吧最初在p元素上设置的margin-left:286px;去掉,因为不去掉的话,所有的段落还是都向左右286像素的左空白,而IE下因为重写了样式而没有这些空白。最终我们解决了所有的问题。如图。

完整的代码如下

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

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>ie 3px像素问题解决</title>

<style>

.a {

float: left;

height: 110px;

width: 286px;

background-color: Blue;

}

p  {

border: 1px solid #000;

}

* html p {

height: 1%;

margin-left:0;

}

* html .a {

margin-right: -3px;

}

* html img.a {

margin: 0 -3px;

ma\rgin:0;

}

</style>

</head>

<body>

<p> 当我们想让一段文字出现在一个布局块的右边的时候,我们会让布局块向左浮动,然后把段落设置左布局块宽度大小的左空白。比如左布局块是.a{float:left;height:

110px;width: 286px;},我们就设置p{margin-left: 286px;border: 1px

solid #000;},其中背景颜色和边框都是测试用的,不是必要的样式设置。在Firefox下可能没问题,但在IE下,你会发现布局块右边的段落离左边框有px的空白,这就是一个bug。如图</p>

<p> 为了解决这个bug,我们首先用* html p{height: 1%;}来针对IE下的段落进行样式覆盖,因为IE的html元素有个匿名的父元素,所以用* html加你要选择的选择器就可以专门针对IE来设置一些样式了。IE有布局的概念,默认只有table等元素才会拥有布局,p等标签是没有拥有布局的,但是如果给p标签设置了heigh,那么p标签就拥有布局了,这样以来,布局块右边的段落文字离自己的左边框就没有px的空白了。因为现在p拥有了布局,它就会被限制为一个矩形,这时候它会自动出现在左布局块的右边,这时候我们要覆盖以前为段落设置的像素的左空白,我们最终要设置*

html p{height: 1%;margin-left:0;}但是很快你就会发现布局块右边的段落的左边框离布局块有px的空白,这个空白是左边的布局块的空白,这又是一个bug,如图2</p>

<p> 为了解决这个bug,我们需要给左浮动布局块设置负值的右空白,增加样式* html .a{margin-right: -3px;},这样如果左浮动布局块不是图片的话已经完美解决了。如果左边的浮动有图片的话,IE的不同版本的处理不一样,windows下的ie5.x对会给图片的左右两边都增加px的空白,而ie6不对图片增加额外的空白,所以经过上面的样式设置后,ie6下的段落会向左错位px,如图。这就一连串bug了,往往开发程序就是这样,修复了旧bug,引入了新bug。</p>

<p> 为了解决上面的bug,我们还要用到一个技巧来为ie5和ie6单独的设置图片的左浮动样式,这里要用到一个ie5转义字符的bug。完整的样式是这样的:* html

img.a{margin: 0 -3px;ma"rgin:0;},首先我们用* html img.a来选取所有IE浏览器下的带有a类的img元素,然后我们先用margin:0

-3px;设置上下空白为,左右空白均为-3像素,这个主要是针对ie5(windows)的,因为ie5对浮动图片左右都添加不必要的px空白。然后紧接着用ma"rgin:0;来覆盖上面的设置,因为IE5下不会忽略转移字符,所以它不认识这个样式设置,直接就忽略了,而IE6认识,就覆盖了上面一句的样式设置,左右空白为了。</p>

<p> 最后一步,为了让FF和IE下显示一直,我们吧最初在p元素上设置的margin-left:286px;去掉,因为不去掉的话,所有的段落还是都向左右像素的左空白,而IE下因为重写了样式而没有这些空白。最终我们解决了所有的问题。如图。</p>

<div class="a">

</div>

<p> 演示文本环绕左浮动块,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

<p> 演示文本环绕左浮动块,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

<p> 演示文本环绕左浮动块,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

<p> 演示文本环绕左浮动块,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

<p> 演示文本环绕左浮动块,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

<p> 演示文本环绕左浮动块,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

<div style="clear: both">

</div>

<img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" class="a" />

<p> 演示文本环绕左浮动图片,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

<p> 演示文本环绕左浮动图片,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

<p> 演示文本环绕左浮动图片,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

<p> 演示文本环绕左浮动图片,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

<p> 演示文本环绕左浮动图片,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

<p> 演示文本环绕左浮动图片,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

<p> 演示文本环绕左浮动图片,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

<p> 演示文本环绕左浮动图片,并且解决ie 3px bug,兼容ie 5/6,ff。</p>

</body>

</html>

慎用margin系列3---IE6下3px bug的更多相关文章

  1. IE6下的bug

    一.IE6双倍边距bug 当页面上的元素使用float浮动时,不管是向左还是向右浮动:只要该元素带有margin像素都会使该值乘以2,例如“margin-left:10px” 在IE6中,该值就会被解 ...

  2. 慎用margin系列2---ie6双倍边距问题

    IE6下有一个著名的margin双倍bug 一.什么是双边距Bug? 先来看图: 我们要让绿色盒模型在蓝色盒模型之内向左浮动,并且距蓝色盒模型左侧100像素.这个例子很常见,比如在网页布局中,侧边栏靠 ...

  3. 【IE6的疯狂之十一】CSS的优先级及!important在IE6下的BUG

    一 css的优先级 今天有人跟我说css hack中用!important来区分ie6,因为ie6不支持!important,是的在很早以前我也是用过这种方法写hack,但是后来就基本不用了.本来我对 ...

  4. iframe弹出框js ie6下存在bug

    ie6的iframe在第一次加载的显示不出来,显示空白,但是很奇怪,刷新就可以正常显示了,一开始以为这只是IE6下iframe加载的bug,但是最后结果发现这是ie6下javascript延迟加载出现 ...

  5. 慎用margin系列1---CSS的margin塌陷(collapse) 问题与对策

      对于以下简单代码: 如果您认为应该是这样的话: 那就错了.结果是这样的: 因为CSS中存在一个margin collapse,即边界塌陷或者说边界重叠.对于上下两个并列的div块而言,上面div的 ...

  6. 【IE6的疯狂之十三】IE6下使用滤镜后链接不能点击的BUG

    大家可能都知道IE6下使用DXImageTransform.Microsoft.AlphaImageLoader滤镜(用于PNG32 Alpha透明)后链接不能点击的BUG,大家也都知道只要在a标签上 ...

  7. 解决IE6下select显示在弹出框上问题

    利用定位position:absolute;z-index:1;和iframe[z-index:-1]来解决此问题,最好根据需要加上: border='0' frameborder='0' scrol ...

  8. ie6下常见的bug 调整页面兼容性

    ie6下常见的bug 我们布局页面,首先符合标准,如何写一个页面的标准性? 但是ie6等浏览器本身就比较特殊,bug比较多,兵法云,知己知彼百战百胜.我们需要了解ie6的一些常见bug,这样,更好的调 ...

  9. ie6下margin双倍距的问题

    今天中午休息时, 公司客服突然报出来一个bug, 一个用ie6的用户打开我们活动网站时, 发现内容都错乱了, 我赶紧上线一看, 发现是正常的. 找了台ie6的xp机器再看了下, 重现出了这个用户的问题 ...

随机推荐

  1. Dubbo 系列(07-3)集群容错 - 负载均衡

    目录 Dubbo 系列(07-3)集群容错 - 负载均衡 Spring Cloud Alibaba 系列目录 - Dubbo 篇 1. 背景介绍 1.1 负载均衡算法 1.2 继承体系 2. 源码分析 ...

  2. javascript中数组的应用总结

    最近在总结javascript的相关应用,今天对js中的数组部分进行归纳总结,以便在以后的工作中有所参考. 1.在js中数组的定义方式有两种: var a = [1,2,3,4]; var b = n ...

  3. 原生AJAX的封装

    /**调用AJAX ajaxPlug.openajax({ url: "./TestXHR.aspx", //请求地址 type: "POST", //请求方式 ...

  4. vue 纯前端导出 excel 表格

    在开发后台管理系统的时候,很多地方都要用到导出excel 表格,比如将table中的数据导出到本地,那么实现这种需求往往有两种方案: 一.后端开发一个下载链接,前端将这个链接放到 a 标签的 href ...

  5. mysql修改root密码和设置权限 转摘:http://www.cnblogs.com/wangs/p/3346767.html

    整理了以下四种在MySQL中修改root密码的方法,可能对大家有所帮助! 方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR ' ...

  6. JavaScript 中的 this 并不难

    js学习笔记 --- this 详解 js中的this,如果没有深入的学习了解,那么this将会是让开发人员很头疼的问题.下面,我就针对this,来做一个学习笔记. 1.调用位置 在理解this的绑定 ...

  7. SQL数据库—<2>数据库基本操作(CRUD)

    学习基本操作语句之前先简单了解数据库的基本数据类型: 数据类型:    二进制数据:以十六进制形式存储        固定长度:binary        可变长度:varbinary    字符数据 ...

  8. 如何优雅地在React中处理事件响应&&React绑定onClick为什么要用箭头函数?

    React绑定onClick为什么要用箭头函数? https://segmentfault.com/q/1010000010918131 如何优雅地在React中处理事件响应 https://segm ...

  9. eclipse远程调试Tomcat方法(转)

    转自:http://blog.csdn.net/afgasdg/article/details/9236877 1.Linux中配置tomcat在catalina.sh中添加如下CATALINA_OP ...

  10. Vue的路有拦截与axios的封装

    一丶首先我们先创建api与utils两个文件夹 二丶api文件夹里面新建文件api.js import request from "../utils/http" import qs ...