当前位置: 代码迷 >> Web前端 >> margin bug (二) IE6双边距bug
  详细解决方案

margin bug (二) IE6双边距bug

热度:174   发布时间:2012-09-15 19:09:28.0
margin bug (2) IE6双边距bug

发生情况:当给父元素的第一个浮动元素设置margin-left或者margin-right时,元素相应float ?left或right,这是margin会加倍

?

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>marginTest2</title>
		<style>
			.left{
				background-color:gray;
				float: left;
			}
			.margin{
				margin-left: 20px;
			}
			.backcolor{
				float:left;
				background-color: red;
			}
		</style>
	</head>
	<body>
		<div class="backcolor">
			<div class="left margin" >ssssss</div>
		</div>
	</body>
</html>
?

正常表现:


IE6下表现:



?解决方法:给浮动元素加上display:inline; ?或者将margin-left改成padding-left

?

http://www.hicss.net/do-not-tell-me-you-understand-margin/ 写道
原理分析:
块级对象默认的display属性值是block,当设置了浮动的同时,还设置了它的外边距就会出现这种情况。也许你会问:“为什么之后的对象和第一个对象之间就不存在双倍边距的Bug”?因为浮动都有其相对应的对象,只有相对于其父对象的浮动对象才会出现这样的问题。第一个对象是相对父对象的,而之后对象是相对第一个对象的,所以之后对象在设置后不会出现问题。为什么display:inline可以解决这个双边距bug,首先是inline元素或inline-block元素是不存在双边距问题的。然后,float:left等浮动属性可以让inline元素haslayout,会让inline元素表现得跟inline-block元素的特性一样,支持高宽,垂直margin和padding等,所以div class的所有样式可以用在这个display inline的元素上。
? ?