我们在学习前端的过程中,有时候会出现一些奇怪的现象,Collapsing Margins便是其中之一,有时候我们想要某个元素离的第一个子元素能够下移一些,于是给它设置了margin-top,但奇怪的是这个margin-top属性却传递给了父元素,导致父元素的位置下移:
-
<!DOCTYPEHTML>
-
<htmllang="en-US">
-
<head>
-
<metacharset="UTF-8">
-
<title></title>
-
<styletype="text/css">
-
body{
-
margin:0;
-
}
-
.parent{
-
height:200px;
-
background:#0099ff;
-
}
-
.child{
-
width:230px;
-
margin-top:50px;
-
}
-
</style>
-
</head>
-
<body>
-
<divclass="parent">
-
<divclass="child">Child</div>
-
</div>
-
</body>
- </html>
亲自试一试
这是个BUG吗?为什么各种浏览器都会有这样的“BUG”呢?其实,W3C规范认为margin折叠会使页面布局更加合理,比如两个段落(<p>)之间,段前间距跟段后间距应该只保留最大的一个,而不应该两者相加而导致段落之间间隙过大。下面,我们就来探究一下这个奇怪的Collapsing Margins。
什么是外边距折叠(Collapsing margins)?
Collapsing margins,即外边距折叠,指的是毗邻的两个或多个垂直方向的外边距 (margin) 会合并成一个外边距。这里的毗邻包括相同级别的元素外边距,也包括父子元素的外边距。
什么情况下会发生折叠?
可以归结为以下两点:
- 这两个或多个外边距没有被非空内容、padding、border 或 clear 分隔开。
- 这些 margin 都处于普通流中(非浮动元素、非定位元素)。
折叠后margin的计算
- 当参与折叠的margin均为正值时,取最大的margin值作为最终margin。
- 当参与折叠的margin均为负值时,取绝对值最大的margin值作为最终margin。
- 当参与折叠的margin同时存在正负值时,取绝对值最大的负margin值与最大的正margin值相加作为最终margin。
如何防止外边距折叠?
在某些情况下,margin的折叠并不是我们需要的效果,甚至可能影响正常的布局,这时候怎么办呢?有以下这些解决办法,按需要任选其一即可:
- 使用高度为零的空元素将折叠的margin隔开(不建议)
- 使用边框将折叠的margin隔开:border:1px transparent solid; (大小大于零)
- 使用内边距将折叠的margin隔开:padding:1px; (大小大于零)
- 为父元素设置overflow:hidden;
- display:inline-block;(IE7以下不支持)
- position:absolute;
- float:left;
后记
很久之前便想写一篇关于margin折叠的文章了,可惜由于各种原因,再加上很长一段时间以来心比较急躁,难以静下来写写东西,无奈耽搁至今。。寒假里还有许多事要做,希望自己能够乐观积极,不怕麻烦,赶紧把这些事情通通搞定,然后恶补前端性能与JavaScript,准备下学期的实习。
——于2013年1月26日 深夜1:46:48
=======================签 名 档=======================
原文地址(我的博客):http://www.clanfei.com/2013/01/1684.html
欢迎访问交流,至于我为什么要多弄一个博客,因为我热爱前端,热爱网页,我更希望有一个更加自由、真正属于我自己的小站,或许并不是那么有名气,但至少能够让我为了它而加倍努力。。
=======================签 名 档=======================
分享到:
相关推荐
在CSS布局中,外边距折叠(Margin Collapsing)是一个重要的概念,它涉及到元素间的垂直间距处理。这个现象主要发生在相邻元素的垂直外边距上,尤其是兄弟元素和父子元素之间的关系。我们来深入探讨这个主题。 首先...
CSS中的外边距折叠指的是相邻的两个或多个块级元素的外边距(margin)会合并成一个外边距。这种情况在块级元素垂直排列时尤为常见,比如相邻兄弟元素之间、父元素与第一个或最后一个子元素之间以及空的块级元素之间...
在前端开发中,“margin折叠”是一个重要的CSS布局概念,它涉及到元素之间的外边距合并,对页面布局有显著影响。当我们设置多个相邻元素的外边距(margin)时,浏览器并不会简单地将这些外边距相加,而是遵循一定的...
2.外边距折叠(collapsing margins) 3.z-index是什么?在position的值什么时候可以触发? …… 三.JS高频面试题 1.介绍JS有哪些内置对象? 2.如何最小化重绘(repaint)和回流(reflow)?3.Javascript作用域链? 4.数据请求 5...
这种行为在CSS规范中被称为"外边距折叠"(Margin Collapsing)。例如,如果你有一个元素的`margin-bottom`是20px,紧接着的另一个元素的`margin-top`是30px,那么这两个元素之间的实际间距将会是30px,而不是50px。 ...
以下的分享是本人最近几天学习了margin知识后,大有启发,感觉以前对margin的了解简直太浅薄。所以写成以下文章,一是...3.外边距折叠 (Collapsing margins) 3.1:Collapsing margins 初衷 3.2:Collapsing margins
这种现象通常被称为“外边距塌陷”(Margin Collapsing),它涉及到相邻或嵌套元素的外边距计算方式。下面我们将详细探讨这个问题以及如何解决它。 ### 一、兄弟元素的外边距合并 当两个或多个块级元素相邻,它们...
外边距折叠(Collapsing Margins)** - 相邻的垂直方向上两个或多个块级元素的外边距会发生折叠。 - 浮动元素、内联块元素和绝对定位元素的外边距不会与垂直方向上的其他元素外边距折叠。 - 创建了块级格式化上...
外边距叠加(Margin Collapsing)现象是初学者和经验丰富的开发者都会遇到的问题,它描述了在特定条件下,垂直外边距会相互“叠加”,而非简单地相加。今天,我们将深入探讨这一现象及其在CSS布局中的重要性和影响。...
为了实现标题中描述的“Collapsing ToolbarLayout、AppBarLayout和NestedScrollView组合滑动折叠或拉伸Toolbar的demo”,开发者需要按照以下步骤操作: 1. 在布局XML文件中,首先添加一个`CoordinatorLayout`作为根...
2. **外边距合并**(Collapsing Margins):在某些情况下,相邻的块级元素垂直外边距会发生合并,形成一个更大的间距。这是CSS布局中常见的现象,需要特别关注。 3. **负值**:margin可以设置负值,这在创建特殊布局...
垂直外边距合并(Margin Collapsing)是CSS布局中一个特殊的规则。当两个相邻的垂直外边距相遇时,它们会合并为较大的那个值,而不是简单地相加。这个问题在处理元素间的间距时尤其需要注意,比如在布局中,第一个子...
在实际编程中,外边距有特别的规则,比如外边距的折叠(Collapsing margins)。当两个或多个相邻的块级元素的外边距相遇时,它们可能会合并为一个更大的外边距,而不是简单地累加。这在处理元素间的垂直间距时尤其...
2. 外边距合并(Margin Collapsing): - 当两个相邻的垂直外边距相遇时,它们会合并为较大的那个外边距,这在处理元素间距时需要特别注意。 - 只有在普通文档流中的块级元素才会发生外边距合并,行内元素、浮动...
外边距在某些情况下会发生合并,称为外边距塌陷(margin collapsing),这通常发生在相邻的块级元素之间。 11.5 外边距合并: 外边距合并是指当两个垂直相邻的元素的外边距只有其中一个存在时,它们的外边距会合并...
首先,折叠工具栏(Collapsing Toolbar)的核心特性是其可扩展和收缩的行为,通常与滚动视图(ScrollView或FlatList)配合使用。当用户滚动内容时,工具栏会根据滚动方向进行相应的动画效果,如隐藏标题或者收缩图片...
android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_scrollFlags="scroll|enterAlwaysCollapsed"> <!-- 在这里添加你的内容,例如...
垂直外边距合并(Margin collapsing)是一个CSS布局中的特性,当两个或多个相邻的垂直外边距相遇时,它们会合并为其中的最大值。这在处理元素间距时可能会带来意外的结果。例如,当一个元素的第一个子元素具有`...