[web] css中的塌陷问题

css中有一些常见的塌陷问题,尤其是新手遇到之后会很解决,明明代码逻辑是正确的,为什么样式错乱了,曾经我也好几次为这个问题绊倒过,今天做一下记录总结。

1、父级边框塌陷

问题描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>test</title>
  <style>
    .content{border:1px solid red; width: 200px; height: auto}
    .box{width: 100px; height: 100px; background-color: orange;}
  </style>
</head>
<body>
  <div class="content">
	<div class="box"></div>
  </div>
</body>
</html>

很简单的两个方框,如图:
在这里插入图片描述
父元素虽然没有设置高度,但是因为子元素的存在,父元素盒子被撑开而拥有了高度,当我为里面的div加一个浮动属性float的时候

.box{width: 100px; height: 100px; background-color: orange;float:left}

在这里插入图片描述
可以看到父级元素的高度出现了塌陷,这样就很容易导致页面其他部分的元素出现错位

解决办法

  1. 在浮动元素末尾,也就是box下面增加<div style=”clear:both”></div>,浪费标签,不常用
  2. 设置父元素的高度,治标不治本,而且不常用
  3. 父级添加overflow属性方法hidden|auto|scroll 都可以实现,不推荐
  4. 使用after伪元素清除浮动,推荐使用
.content:after{content: "."; display: block; height: 0; clear: both; visibility: hidden;} 

2、外边距塌陷

问题描述

1. 相邻块元素垂直外边距的合并

当上下相邻的两个块元素相遇时,如果上面的元素有下外边距margin-bottom,下面的元素有上外边距margin-top,则他们之间的垂直间距不是margin-bottom与margin-top之和,而是两者中的较大者。这种现象被称为相邻块元素垂直外边距的合并。

在这里插入图片描述
2. 嵌套块元素垂直外边距的合并

对于两个嵌套关系的块元素,如果父元素没有上内边距及边框,则父元素的上外边距会与子元素的上外边距发生合并,合并后的外边距为两者中的较大者,即使父元素的上外边距为0,也会发生合并。
在这里插入图片描述
相比于1而言,我觉得这种合并对新手而言会更难发现和处理,我在这个地方吃的亏我永远的记得,浪费了我好久的时间,就是搞不清楚为什么显示的不对,当时的问题大概是这个样子:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>test</title>
  <style>
    body{border: 1px solid red;}
    .content{width: 200px; height:200px; background-color: yellow; margin-top: 10px;}
    .box{width: 100px; height: 100px; background-color: orange;}
  </style>
</head>
<body>
<div class="content">
	<div class="box"></div>
</div>
</body>
</html>

红框代表body,黄色方块是一个大一点的内容框,橙色方块是黄色方块里面的一个子元素。因为为了页面美观,一般为黄色方块设置一个上边距20px。效果如图
在这里插入图片描述
然后在写子元素的时候,子元素和内容框需要留出一个50px的边距,当时脑子都没想,直接给子元素设置一个margin-top:50px。以为会得到想要的结果,结果确实这个样子的:

 .box{width: 100px; height: 100px; background-color: orange; margin-top: 50px;}

在这里插入图片描述
父元素也跟着一起下来了,当时就懵了,百思不得其解。而且当时还不知道怎么去调,甚至百度都不知道应该搜索什么关键词,因为样式写的完全没毛病。只能怪当时学艺不精!!!

解决办法

  1. 可以为父元素定义1像素的上边框或上内边距。
  2. 可以为父元素添加overflow:hidden
  3. padding替换margin
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值