css之margin属性详解

2025-10-26
网站建设限时活动促销

作为前端狗的我们,每天都要和网页打交道。当 ui 将设计稿发给你时,css 的知识便显得尤为重要。而 css 这一标记性的语言,却时常让我很头疼:毫无逻辑性,并充满了各种坑爹的潜规则 ,以至于每次做项目时,大部分时间精力都浪费在了调整布局与样式上,详情可点击知乎上的为什么 css 这么难学?

正文

margin 算是性格刚烈的属性了,下面,我将从各个方面讲解 margin 的可怕之处。

元素尺寸的影响

  1. 可视尺寸 - clientWidth (border - padding - size)

  2. 占据尺寸 - outerWidth (border - margin)

立即学习“前端免费学习笔记(深入)”;

margin 又是怎样影响这两个尺寸的呢?

首先,两个尺寸都需满足一定的条件。

可视尺寸的影响条件

  1. 适用于 没有设定 width/height 的块级元素 (宽高设死了,怎么会影响呢?)
    其中不包括 float absolute fixed 元素 ,inline水平 ,table-cell 元素

  2. 只适用于水平方向尺寸(margin-left/margin-right)

占据尺寸的影响条件

  1. 适用于 block/inline-block 水平元素

  2. 适用于 任何方向

  3. 与 width/height 值无关

  4. inline 元素只影响水平方向 (后面会提到)

影响示例

  1. margin 影响元素的可视水平尺寸
    margin的可视尺寸示例

  2. margin 影响占据尺寸 ,这个可以说是 margin 的本命技能了,就不举例了。

百分比单位

通常而言,margin 的单位中,百分比单位最容易让人头晕。

  1. 普通元素的百分比 margin 都是相对于 容器的宽度 计算的

      

  2. 绝对定位的百分比 margin 是相对于 第一个具有定位属性的祖先元素的宽度 计算的(relative/absolute/fixed)

      

重叠详解

重叠可谓是 margin 中的最重要的潜规则了。

发生情景

  1. 相邻的兄弟元素

  2. 父级和第一个/最后一个子元素

  3. 空的块级元素(自己和自己)

重叠条件

  1. 块级元素 (不包括 float 和 absolute 元素)

  2. 不考虑 writing-mode,只发生在垂直方向 (margin-top/margin-bottom)

  3. 父子 重叠条件

  • margin-top 重叠

  • margin-bottom 重叠

  1. 父元素 非格式化上下文元素 没有设置 overflow:hidden

  2. 父元素没有 border-bottom 设置

  3. 父元素没有 padding-bottom 设置

  4. 父元素和第一个子元素之间没有inline元素分割

  5. 父元素没有 height ,min-height,max-height 限制

  6. 父元素 非格式化上下文元素 没有设置 overflow:hidden

  7. 父元素没有 border-top 设置

  8. 父元素没有 padding-top 设置

  9. 父元素和第一个子元素之间没有inline元素分割

  • 空的块级元素 margin 重叠条件

    1. 元素没有 border 设置2. 元素没有 padding 设置3. 里面没有 inline 元素4. 没有 height,或者 min-height
  • 计算规则

    1. 正正取大值

      两个元素垂直距离为 : #top元素的 margin-top值
    2. 正负值相加

      两个元素垂直距离为: #top元素的margin-top值 加上 #bottom元素的margin-bottom值
    3. 负负最负值

      两个元素垂直距离为 : #top元素的 margin-top值
    4. 父级和第一个/最后一个子元素 发生重叠
      给子元素设置垂直方向的 margin ,等同于 给父元素设置相同的垂直方向的 margin 属性,
      也就是说 父子元素发生 margin 重叠时, 它们俩共用一个 margin 属性

    重叠意义

    • 连续段落或列表之类,如果没有margin重叠,排版会不自然。

    • 页面中任何地方,嵌套或直接放入任何空的 p,都不会影响原来的布局。

    • 遗落空的任意多个 p 元素,不会影响原来的阅读排版。

    margin auto

    当你使用 margin auto 时,就应该联想到一个词 :填充

    示例如下:

    margin:auto 0 !== 垂直居中

    标签: margin属性

    本文地址:https://www.lifejia.cn/news/206571.html

    免责声明:本站内容仅用于学习参考,信息和图片素材来源于互联网,如内容侵权与违规,请联系我们进行删除,我们将在三个工作日内处理。联系邮箱:cloudinto#qq.com(把#换成@)