【 CSS 】margin

98 阅读1分钟

margin日常用法:设置外边距

进一步描述:它不是让元素移动xxpx,而是这个元素的旁边必须有xxpx的空白

带着这个概念遇到重叠,随之抛出一系列问题,为什么会重叠?重叠的场景?如何消除重叠?

1、为什么会重叠

CSS规范中的一种特性。。。那当初为何定这个规范?相关资料反馈HTML文档创建的初衷只是用来展示信息的,
若没有重叠,会出现连续段落或列表设置margin后排版不自然等问题~

🍄 根据事物的两面性,解决问题的同时也会带来新的麻烦,故需整理重叠的场景有哪些,达到趋利避害

2、重叠的场景

  • 只发生在垂直方向上,且元素为块元素无浮动无绝对定位

3、如何消除重叠

1)场景一:兄弟元素

  <p style="margin: 20px 0">1</p>
  <p style="margin: 20px 0">1</p>

解决方案:

给兄弟元素包一层, 并在对应父元素上设置border、padding、创建BFC块格式化上下文(如overflow:auto;值非visibility)都可以避免上下外边距重叠,如图一所示 (此外重叠时,采用两者之间边距最大的那个值,如图二所示):

  <p style="margin: 20px 0">1</p>
  <p style="overflow: auto">
    <p style="margin: 20px 0">1</p>
  </p>

图一:

255802705-c75bc41e-9584-4d13-b7df-99a692392dda.png

图二:

255802749-6fd88563-d0b1-47de-a41f-c6ff4ca1cb34.png


2)场景二:父子元素

  <div style="margin-top:50px;">
    <div style="margin-top:50px;">1</div>
  </div>

解决方案:

父元素设置border、padding、创建BFC块格式化上下文(如overflow:auto;值非visibility)都可以避免上下外边距重叠,如下图所示:

  <div style="margin-top:50px;overflow:auto">
    <div style="margin-top:50px;">1</div>
  </div>

255804435-ba62f271-8091-4b69-a662-58bcba31a05a.png

margin-bottom同理:

  <div style="margin-bottom:50px">
    <div style="margin-bottom:50px;">1</div>
  </div>

  改为:
  <div style="margin-bottom:50px;overflow:auto">
    <div style="margin-bottom:50px">1</div>
  </div>

参考资料:

【1】CSS基础-外边距重叠