CSS margin 属性

CSS margin 语法

在 CSS 中,margin 属性用于定义元素的外边距。从下图所示的 CSS 盒子模型中可以看出,margin 处于 border 之外。

CSS 盒子模型2

语法:

margin: 数值;

说明:

margin 的取值是一个数值,它可以是长度值(如 px、em、rem),也可以是百分比值(相对于父元素的宽度)或关键字 auto。

margin 可以为 1 个、2 个、3 个或 4 个值,用来分别设置上、右、下、左四个方向的外边距。

  • 1 个值:应用于所有四条边(上、右、下、左)。
  • 2 个值:第一个值应用于上下外边距,第二个值应用于左右外边距。
  • 3 个值:第一个值应用于上外边距,第二个值应用于左右外边距,第三个值应用于下外边距。
  • 4 个值:依次应用于上、右、下、左外边距(顺时针方向)。

对于 margin 属性,小伙伴们要清楚以下几点。

  • margin 属性是 margin-top、margin-right、margin-bottom、margin-left 这 4 个子属性的简写。
  • margin 属性可以接受负值,这可能导致元素与相邻元素重叠。
  • margin 百分比值是相对于父元素的宽度进行计算的,即使是垂直方向的外边距。
  • 对 inline 元素(如 span、strong 等)设置 width 和 height 是无效的,但对它们设置 padding 和 margin 是有效的。

CSS margin 摘要

属于 CSS 外边距
使用频率
是否继承
默认值 0
兼容性 查看
官方文档 查看
MDN 查看

CSS margin 示例

接下来,我们通过几个简单的例子来讲解一下 CSS margin 属性是如何使用的。

示例 1:“只有父元素没有兄弟元素时” 的外边距

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        #father {
            display: inline-block;     /* 将块元素转换为inline-block元素,使父元素宽度自适应内容 */
            border: 1px solid red;
        }
        #son {
            display: inline-block;     /*将块元素转换为inline-block元素,使子元素水平排列 */
            padding: 50px;
            margin-top: 50px;
            margin-right: 100px;
            margin-bottom: 150px;
            margin-left: 200px;
            border: 1px solid blue;
            background-color: lightskyblue;
        }
    </style>
</head>
<body>
    <div id="father">
        <div id="son">绿叶网</div>
    </div>
</body>
</html>

页面效果如下图所示。

“只有父元素没有兄弟元素时”的外边距

分析:

当只有父元素时,该元素设置的 margin 就是相对于父元素之间的距离。

示例 2:“有兄弟元素时” 的外边距

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        #father {
            display: inline-block;      /* 将块元素转换为inline-block元素,使父元素宽度自适应内容 */
            border: 1px solid red;
        }
        #son {
            display: inline-block;      /* 将块元素转换为inline-block元素,使子元素水平排列 */
            padding: 50px;
            margin-top: 50px;
            margin-right: 100px;
            margin-bottom: 150px;
            margin-left: 200px;
            border: 1px solid blue;
            background-color: lightskyblue;
        }
        .brother {
            height: 50px;
            background-color: lightskyblue;
        }
    </style>
</head>
<body>
    <div id="father">
        <div class="brother"></div>
        <div id="son">绿叶网</div>
        <div class="brother"></div>
    </div>
</body>
</html>

页面效果如下图所示。

“有兄弟元素时”的外边距

分析:

当既有父元素,也有兄弟元素时,该元素会先看看四个方向有没有兄弟元素存在。如果该方向有兄弟元素,则这个方向的 margin 就是相对于兄弟元素而言。如果该方向没有兄弟元素,则这个方向的 margin 就是相对于父元素而言。

提示: padding 和 margin 的区别在于:padding 体现的是元素的内部结构,而 margin 体现的是元素之间的相互关系。

示例 3:使用 margin: 0 auto; 实现水平居中

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: lightskyblue;
            margin: 0 auto; /* 上下外边距 0,左右外边距 auto (实现水平居中) */
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

页面效果如下图所示。

margin实现水平居中

分析:

在这个例子中,我们将 div 的宽度高度都设置为 100px,然后使用 margin: 0 auto;。auto 值会使浏览器在水平方向上自动分配剩余空间,从而将元素居中。

示例 4:margin 外边距重叠

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        div {
            width: 200px;
            height: 100px;
        }
        .box1 {
            margin-bottom: 20px;   /* 底部外边距 20px */
            background-color: hotpink;
        }
        .box2 {
            margin-top: 40px;      /* 顶部外边距 40px */
            background-color: lightskyblue;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
</body>
</html>

页面效果如下图所示。

margin外边距重叠

分析:

在这个例子中,box1 的底部外边距为 20px,而 box2 的顶部外边距为 40px。理论上它们之间的距离应该是 20px + 40px = 60px,但由于相邻元素的垂直外边距会重叠,因此实际的外边距为 40px(取较大值)。

margin 的派生子属性

margin 是一个复合属性,它有 4 个派生子属性(如下表所示),用于单独设置某个方向的 margin。

margin 派生子属性
子属性 说明
margin-top 上外边距
margin-right 右外边距
margin-bottom 下外边距
margin-left 左外边距

上一篇: padding-left

下一篇: margin-top

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号