CSS Margin 属性

CSS margin 属性在元素周围添加空间。它在元素的边框外部创建一个空白区域。例如,

h1 {
    border: 4px solid black;
    margin: 50px;
}

浏览器输出

CSS Margin Example

在此,margin 属性在 h1 元素边框周围添加了 50px 的空间。


CSS margin 语法

margin 属性的语法如下:

margin: auto | length | percentage | inherit;

这里,

  • auto:浏览器自动计算 margin
  • length:以长度单位定义 margin,例如 pxptem
  • percentage:以百分比 (%) 定义 margin
  • inherit:从父元素继承值

margin 属性的默认值是 **0**。

注意margin 属性接受负值,从而减小指定方向的 margin 空间。


示例 1:CSS margin 属性

让我们看一个 margin 属性的例子:

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="style.css" />
        <title>CSS margin</title>
    </head>

    <body>
        <p class="margin">This paragraph has a margin of 60px.</p>
        <p>This is a normal paragraph.</p>
    </body>

</html>
p {
    border: 4px solid black;
}

p.margin {
    margin: 60px;
}

浏览器输出

CSS Margin Example

示例 2:CSS margin 属性

百分比值相对于父元素的大小。例如,

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="style.css" />
        <title>CSS margin</title>
    </head>

    <body>
        <p>This paragraph has a margin of 5%.</p>
        <div>
            <p>This paragraph has a margin of 5%.</p>
        </div>
    </body>

</html>
p {
    margin: 5%;
    border: 4px solid black;
}

div {
    width: 400px;
    height: 100px;
    border: 2px solid black;
}

浏览器输出

CSS Margin Percentage Example

在上面的例子中,即使具有相同的 5% margin,两个段落的 margin 空间也不同。这是因为 percentage 值相对于父元素的大小。

第一个段落的 margin 相对于 body 元素的大小,而第二个段落的 margin 相对于 div 元素的大小。

因此,相同的 margin 会为两个段落产生不同的空间。


CSS margin 的组成属性

margin 属性包含以下 CSS 属性,用于指定元素各个边的 margin。

  • margin-top:在顶部添加 margin
  • margin-right:在右侧添加 margin
  • margin-bottom:在底部添加 margin
  • margin-left:在左侧添加 margin

让我们看一个例子。

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="style.css" />
        <title>CSS margin</title>
    </head>

    <body>
        <p>
            This paragraph has a margin of 30px at the top, 80px at the right,
            25px at the bottom, and 60px at the left.
        </p>
    </body>

</html>
p {
    border: 4px solid black;
    margin-top: 30px;
    margin-right: 80px;
    margin-bottom: 25px;
    margin-left: 40px;
}

浏览器输出

CSS Margin Individual Sides Example

CSS margin 作为简写属性

margin 属性可用作简写属性,用于指定元素一到四个边的 margin。例如,

margin: 10px; /* applies to all sides */
margin: 20px 40px; /* applies 20px to top & bottom, and 40px to left & right */
margin: 20px 40px 60px; /* applies 20px to top, 40px to left & right, and 60px to bottom */
margin: 10px 20px 30px 40px; /* applies to top, right, bottom, and left respectively */

让我们看一个完整的例子。

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="style.css" />
        <title>CSS margin</title>
    </head>

    <body>
        <h2>margin: 30px 60px 80px 20px</h2>
        <p>
            The margin in the above heading follows order as top (30px), right
            (60px), bottom (80px), and left (20px).
        </p>
    </body>
</html>
h2 {
    /* applies top,  right,  bottom, and left respectively  */
    margin: 40px 60px 80px 30px;
    background-color: orange;
}

浏览器输出

CSS Margin Shorthand Example

了解更多关于 CSS Margin 的信息

CSS Margin 折叠

块级元素的相邻垂直 margin 会折叠成一个 margin。

在此,相邻垂直 margin 指的是两个相邻块级元素(例如 <div><p> 标签)之间的 margin,它们在垂直方向上一个接一个地排列。

假设我们有两个块级元素,A 紧随其下是 B,其中 A 的 margin 为 40pxB 的 margin 为 20px。那么 AB 之间的垂直 margin 会折叠成一个 40px 的 margin。

折叠后 margin 的大小等于它们之间 margin 的最大值。

让我们看一个例子,

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="style.css" />
        <title>CSS margin</title>
    </head>

    <body>
        <p class="first">This paragraph has a margin of 40px for all sides.</p>
        <p class="second">This paragraph has a margin of 20px for all sides.</p>
    </body>
</html>
p.first {
    margin: 40px;
}

p.second {
    margin: 20px;
}

p {
    border: 4px solid black;
}                

浏览器输出

CSS Margin Collapsing Example

在上面的例子中,两个段落之间应用了 40px20px 的 margin。两个垂直相邻的 margin 都折叠了,导致它们之间有 40px 的 margin。

注意:margin 折叠仅发生在顶部和底部 margin,不发生在左侧和右侧 margin。

Inline 元素的 Margin

Inline 元素对其顶部和底部 margin 没有影响。这是因为 inline 元素遵循文本的自然流,而应用顶部和底部 margin 会破坏这种流并导致布局不一致。

例如,

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="style.css" />
        <title>CSS margin</title>
    </head>

    <body>
        <p>
            This <span>span</span> element does not have any effect on the top
            and bottom margins.
        </p>
    </body>
</html>
span {
    /* adds 30px margin */
    margin: 30px;
    border: 2px solid black;
    background-color: greenyellow;
}

p {
    border: 4px solid black;
}

浏览器输出

CSS Margin Inline Example

在上面的例子中,只应用了左侧和右侧的 margin,忽略了顶部和底部的 margin。

我们可以通过将 display 属性更改为 inline-blockblock 来为 inline 元素添加 margin。例如,

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="style.css" />
        <title>CSS margin</title>
    </head>

    <body>
        <p>
            This <span>span</span> element have top and bottom margins.
        </p>
    </body>
</html>
span {
    margin: 30px;
    display: inline-block;
    border: 2px solid black;
    background-color: greenyellow;
}

p {
    border: 4px solid black;
}

浏览器输出

CSS Margin Inline Example

在此,margin 属性应用于 inline 元素的所有四个边。

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战