当前位置: 首页 > Web前端 > HTML

CSSboxes的marginscollapse

时间:2023-03-28 15:30:42 HTML

提示:为了更直观的学习,本文省略了部分css样式代码。相信大家在日常工作中经常会遇到以下情况:在制作静态页面时,为了页面的整体协调和美观,我们希望子框image-div的上边缘与上边缘保持一定的距离父框header-div间距的边缘。当前页面效果:目标页面效果:为了实现上面的效果,我们首先可以想到给子框设置一个topmargin:让我们看看结果如何?结果不是我们预期的,子框image-div与父框header-div的上边缘没有形成一定的距离。这两个箱子居然一起往下移动,多了一块红框区域。而这种现象正是CSS中经常遇到的“margincollapse”问题之一。折叠边距流中块级元素的顶部和底部边距有时会合并(折叠)为单个边距(最大合并边距),这种现象称为边距折叠。边距崩溃的原因是外边距。有以下四种情况来计算情况:如果都是正数,取最大值;如果相同,则取其一;如果有正数和负数,取最大的正数加上最小的如果负数的和都是负数,取最小值。Collapsebetweenadjacent(sibling)boxes在CSS中,两个相邻兄弟框的外边距区域是公共的,这会导致相邻兄弟框之间的边距折叠。下图是一个相关的例子,设置div1框的bottommargin,下面设置div2框的topmargin:div1

div2
在浏览器开发者工具中,先看div1的外边距区域(红框):div2的外边距区域(绿框区域):对应情况:如果两个框之间的外边距都是正数,则取最大值。下面是示例2,我们将示例1中的外边距改为负数:div1
div2
两个框的重叠距离为"-20px",两个负数中最小的(绝对值为最大|-20px|)。解决方案如果要避免这种塌陷,可以采用以下两种方法解决:只为其中一个框设置边距,为两个框各设置一个父框。父框属性设置为overflow:hidden,父框为Closedarea,从而触发BFC父子框之间的塌陷,但是父框的设置并不完美,出现以下情况时margin会塌陷:在块元素的margin-top和它的第一个子元素的margin-top之间没有边框、填充、内联内容或间隙来分隔它们。块元素的margin-bottom与其最后一个子元素的margin-bottom之间没有边框、填充、内联内容、高度、最小高度、最大高度分隔。同时,如果父子框共享一段topmargin区域,比如父框没有topmargin时,子框设置topmargin。此时子框随着父框向下移动(相当于给父框设置外边距),框塌陷。<样式>*{边距:0px;填充:0px;}.div1{宽度:300px;高度:200px;背景色:矢车菊蓝;margin:0px;}.div2{background-color:wheat;margin:30px;}div2父元素不设置边距,第一个子元素设置margin:30px,然后找到父元素和子元素一起下移30px:解决办法这种塌陷的核心解决方法是将父子框分开。我们可以为父框设置border或者padding,或者给父框标签添加overflow:hidden属性。通过触发BFC规则,即块级格式化上下文,将parent渲染成一个独立的区域,从而解决父子box之间的问题。崩溃问题。BFC规则触发方式:floatisnotnoneoverflowisnotvisible(常用overflow:hidden)position是固定的,absolutedisplay是flex,inline-block,table-cell当然选择折叠方案的时候要根据具体情况情况,不要在所有情况下都使用相同的解决方案,否则会引起其他问题。那么,我们学习了上面的知识之后,就可以清楚的知道,一开始介绍的问题就是父子框之间的塌陷。我们可以触发BFC规则(只有一种方案)来解决: