《CSS世界》学习笔记——margin合并
出现margin合并的几种情况
- 相邻兄弟元素 示例
- 父级元素和第一个/最后一个子元素 示例
- 空块级元素 示例
第1种情况是大部分人所熟知也最常见的情况,甚至被很多人称为 bug。我曾经也是这么理解的人之一。
不过看了张鑫旭的《CSS世界》中的讲述后,虽然从其说明中并未提到规范、标准之类的字眼,但我依然愿意相信他的说法更加贴近实际情况。
CSS世界的CSS属性是为了更好地进行图文信息展示而设计的,博客文章或新闻信息是图文信息的典型代表,基本上离不开下面这些HTML
1
2
3
4
5
6
7
8 <h1>文章标题</h1>
<p>文章段落1…</p>
<p>文章段落2…</p>
<ul>
<li>列表1</li>
<li>列表2</li>
<li>列表3</li>
</ul>……
对于兄弟元素的margin合并其作用和em类似,都是让图文信息的排版更加舒服自然。假如说没有margin合并这种说法,那么连续段落或列表之类首尾项间距会和其他兄弟标签成1:2关系;文章标题距离顶部会很紧,而和下面的文章详情内容距离又会很开,就会造成内容上下间距不一致的情况。这些都是糟糕的排版体验。而合并机制可以保证元素上下间距一致,无论是<h2>
标题这种margin偏大的元素,还是中规中矩的<p>
元素
空块级元素解释
这里所谓空块级元素,并非是指 empty 的那种完全没有内容的空元素,而是指没有空白符以外的文本(包含字符实体如
)。
示例如下:
1 | <!-- 下面这些情况都没问题 --> |
margin合并的计算规则
说明:这里的计算规则是张鑫旭的个人总结,而非是明确的规范定义。
- 正正取大值:如果合并的两个margin都是正数,则结果是其中的大值 示例
- 正负值相加:如果合并的两个margin一个为正,另一个为负,则结果是两数相加 示例
- 负负最负值(或者负负取小值):如果合并的两个margin都是负值,则结果取其中的小值(绝对值大的那个数) 示例