外边距溢出解决方法 高度塌陷如何解决

外边距溢出

描述
  1. 父元素没有上边框(border-top)或者没有上内边距(padding-top)
  2. 给子元素设置上外边距,会作用到父元素上
    <style type="text/css">
		#parent{
			width: 300px;
			height: 300px;
			background-color: gray;
		}
		#child{
			width: 150px;
            height: 150px;
			background-color: green;
			margin-top: 100px;
		}
	</style>
</head>
<body>
    <div id="parent">
		<div id="child"></div>
	</div>
</body>
解决方法
  1. 给父元素加上边框。弊端:增加了父元素实际占据高度

  2. 给父元素添加上内边距。弊端:增加了父元素实际占据高度

  3. 给父元素设置 overflow:hidden/auto 。弊端:元素如果想溢出显示,就冲突了

  4. 把子元素变成行内块元素 display:inline-block 。弊端:改变了子元素的显示模式

  5. 在该子元素的前面,添加一个空的元素,比如 <table>\</table> 弊端:添加无意义标签,结构化差

  6. 利用父元素的伪类 before 添加一个空 table 元素(推荐使用)

    #parent::before {
    content:"";
    display:table;
    }
    

高度坍塌

描述

父元素高度自适应,子元素 float 后,造成父元素高度为0,称为高度坍塌

解决方法

  1. w3c推荐做法,在浮动元素末尾添加一个空标签,在空标签里添加 sytle = "clear:both"

    • 优点:通俗易懂,书写方便
    • 缺点:添加无意义标签,结构化差
  2. 给父元素添加 overflow:hidden|auto|scroll

    • 优点:代码整洁,无需添加无意义标签
    • 缺点:内容增多时容易造成不会自动换行导致内容被隐藏,无法显示溢出的元素
  3. 为父元素增加伪元素 :after 方式(推荐使用)

    .clearfix:after{
    content:"";
    display:block;
    height:0;
    clear:both;
    visibility:hidden;
    }
    .clearfix{*zoom:1;} /*ie67专有清除浮动属性浏览器兼容*/
    
    • 优点:符合闭合浮动的思想 结构语义化正确
    • 缺点:由于IE6-7不支持 :after , 使用zoom:1 触发hasLayout
  4. 使用双伪元素清除浮动(推荐使用)

    .clearfix:before,clearfix:after{
    content:"";
    display:table;
    }
    .clearfix:after{
    clear:both;
    }
    
    • 优点:代码更简洁
    • 缺点:由于IE6-7不支持 :after , 使用zoom:1 触发hasLayout
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉沦与遐想。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值