給子元素盒子一個垂直外邊距margin-top,父元素盒子也會往下走margin-top的值的解決辦法

問題出現:

給子元素盒子一個垂直外邊距margin-top,父元素盒子也會往下走margin-top的值

	<body>
		<div class="box">
			<div class="content" id="content"></div>
		</div>
	</body>
		div,body{
			padding: 0;
			margin: 0;
		}
		body{
			background-color: darkgrey;
		}
		.box{
			width: 400px;
			height: 400px;
			margin: 50px auto;
			background-color: palegreen;
		}
		.content {
			width: 50%;
			height: 50%; 
			margin-top: 70px;
			background-color: tomato;
		}		
	<script type="text/javascript">
		window.onload = function(){
			var he = document.getElementById('box');
			alert(he.offsetTop);  //70,這裏應該是50纔對
		}
	</script>

上面的js代碼和圖片顯示:

1.子元素與父元素的margin並沒有體現出來

2.子元素與父元素的margin-top的值,應用給了父元素的margin-top


解決辦法:

1、修改父元素的高度,增加padding-top樣式模擬(padding-top:1px;常用)

		.box{
			width: 400px;
			height: 400px;
			margin: 50px auto;
			background-color: palegreen;
			padding-top: 1px; //添加
		}	
		window.onload = function(){
			var he = document.getElementById('box');
			alert(he.offsetTop); //50
		}
2、爲父元素添加border(border:1px solid transparent可用)

		.box{
			width: 400px;
			height: 400px;
			margin: 50px auto;
			background-color: palegreen;
			border: 1px solid transparent; //添加
		}

3、爲父元素添加overflow:hidden;樣式即可(完美)

		.box{
			width: 400px;
			height: 400px;
			margin: 50px auto;
			background-color: palegreen;
			overflow: hidden; //添加
		}

3、爲父元素或者子元素聲明浮動(float:left;可用)

		.box{
			width: 400px;
			height: 400px;
			margin: 50px auto;
			background-color: palegreen;
			float: left; //添加
		}


5、爲父元素或者子元素聲明絕對定位

		.box{
			width: 400px;
			height: 400px;
			margin: 50px auto;
			background-color: palegreen;
			position: absolute; //添加
		}

原因:

      1.當一個元素包含在另一個元素中時(假設沒有填充或邊框將邊界分隔開),它們的頂和/或底邊界會發生疊加

      2.只有普通文檔流中塊框的垂直邊界纔會發生邊界疊加。行內框、浮動框或絕對定位框之間的邊界不會疊加。

         詳情見:http://blog.csdn.net/weisuochengxuyuan/article/details/17379517


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章