CSS 外边距

在 CSS 中,外边距(margin)指的是边框到 “父元素” 或 “兄弟元素” 之间的那一部分。外边距是在元素边框的外部的。

CSS 盒子模型

CSS 外边距的局部样式

从 CSS 盒子模型可以看出,外边距分为 4 个方向:margin-topmargin-rightmargin-bottommargin-left。每个方向可以单独设置,控制元素与周围元素或父元素的距离。

语法:

margin-top: 数值;
margin-right: 数值;
margin-bottom: 数值;
margin-left: 数值;

说明:

外边距的取值是一个数值,该数值可以是以下几种情况。

  • 固定单位,如 10px、2rem。
  • 百分比,如 10%(相对于父元素的宽度)。
  • 关键字,如 auto(常用于水平居中)。
  • 负值,如 -50px(使元素向反方向移动)。

示例 1:CSS 定义外边距

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

页面效果如下图所示。

CSS 外边距示例 1

分析:

小伙伴们可能会感到困惑:“为什么加上 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;
        }
    </style>
</head>
<body>
    <div id="father">
        <div id="son">绿叶网</div>
    </div>
</body>
</html>

页面效果如下图所示。

CSS 外边距示例 2

分析:

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

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

<!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>

页面效果如下图所示。

CSS 外边距示例 3

分析:

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

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

CSS 外边距的简写形式

跟外边距 padding 一样,外边距 margin 也有简写形式。在实际开发中,我们往往使用简写形式,因为这样开发效率更高。其中 margin 写法也有 4 种,如下所示。

语法:

margin: 数值;
margin: 数值1 数值2;
margin: 数值1 数值2 数值3;
margin: 数值1 数值2 数值3 数值4;

说明:

margin: 50px;

上面代码表示,4 个方向的外边距都是 50px。

margin: 50px 100px;

上面代码表示,margin-top 和 margin-bottom 为 50px,margin-right 和 margin-left 为 100px。

margin: 50px 100px 150px;

上面代码表示,margin-top 为 50px,margin-right 和 margin-left 为 100px,margin-bottom 为 150px。

margin: 50px 100px 150px 200px;

上面代码表示,margin-top 为 50px,margin-right 为 100px,margin-bottom 为 150px,margin-left 为 200px。

对于 margin 取值的顺序,小伙伴们按顺时针记忆就可以了,如下图所示。

CSS margin 的取值顺序

注意:

  • 对 inline 元素(如 span、strong 等)设置 width 和 height 是无效的,但对它们设置 padding 和 margin 是有效的。
  • 当两个或多个元素的垂直外边距(margin-top 和 margin-bottom)相遇时,它们会合并成一个外边距,这个外边距的高度等于相邻外边距中较大的一个。 外边距合并只发生在垂直方向,水平方向上不会发生外边距合并。

示例 4:CSS 外边距的简写

<!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: 50px 100px;
            border: 1px solid blue;
            background-color: lightskyblue;
        }
    </style>
</head>
<body>
    <div id="father">
        <div id="son">绿叶网</div>
    </div>
</body>
</html>

页面效果如下图所示。

CSS 外边距的简写

上一篇: CSS 内边距

下一篇: CSS 文档流

给站长反馈

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

邮箱:lvyenet@vip.qq.com

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