CSS 盒模型

CSS 盒子模型是一个基本概念,它定义了元素的尺寸和间距是如何计算的。

盒子模型将每个 HTML 元素视为一个矩形盒子,由内容、内边距、边框和外边距组成。

盒子模型按以下方式定义 HTML 元素的布局:

CSS Box Model Layout

盒子模型的组成部分是:

  • content:在元素中显示的实际文本或图像
  • padding:元素内容与其边框之间的透明空间
  • border:围绕元素内内边距和内容的线条
  • margin:添加到边框外部的透明区域

盒子模型的主要目的是解释元素的尺寸和间距是如何计算的,以及它们之间如何相互关联。


元素在盒子模型下的宽度和高度

盒子模型对于理解元素的 widthheight 是如何计算的很重要。

默认情况下,元素的 widthheight 仅应用于元素的 content。因此,元素的实际尺寸是通过将 paddingborder 与元素的指定 widthheight 相加来计算的。

Actual width: border-left + padding-left + width + padding-right + border-right

Actual height: border-top + padding-top + height + padding-bottom + border-bottom

让我们看一个例子,

<!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 Box Model</title>
    </head>

    <body>
        <div>
            The CSS box model is a way of describing the layout of an HTML
            element.
        </div>
    </body>

</html>
div {
    width: 400px;
    height: 80px;
    border: 10px solid black;
    padding: 15px;
    background-color: greenyellow;
    /* clips the background color to content only */
    background-clip: content-box;
}

浏览器输出

CSS Box Model Example

在上面的示例中,我们指定了:

div {
    width: 400px;
    height: 80px;
    border: 10px solid black;
    padding: 15px;
}

divwidthheight 仅应用于元素的 content。元素的实际 widthheight 是:

width = 10px + 15px + 400px + 15px + 10px = 450px
height = 10px + 15px + 80px + 15px + 10px = 130px

因此,实际 width 变为 450pxheight 变为 130px

注意margin 不会加到实际盒子尺寸的计算中,尽管它会影响盒子在页面上占据的总空间。border 标记了盒子区域的边界,它不会扩展到 margin 中。


内联元素的盒子模型

盒子模型对内联元素的应用方式不同。这是因为内联元素没有默认的 widthheight,并且根据其内容的尺寸占据空间。

让我们看一个例子,

<!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 Box Model</title>
    </head>

    <body>
        <p>
            The box model works differently for inline elements. For example,
            this <span>span</span> element does not work as expected.
        </p>
    </body>

</html>
p {
    width: 350px;
    border: 1px solid black;
}

span {
    width: 100px;
    height: 40px;
    border: 5px solid black;
    padding: 10px;
    margin: 10px;
    background-color: greenyellow;
}

浏览器输出

CSS Box Model Inline Example

在上面的例子中:

  • heightwidth 被忽略。
  • topbottom 的外边距也被忽略,只有 leftright 的外边距有效。
  • padding 对元素的所有四个方向都有效。

因此,我们无法计算内联元素的实际尺寸。

为了在内联元素中应用盒子模型,应将 display 属性更改为 inline-blockblock

让我们看一个 inline-block 的示例:

<!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 Box Model</title>
    </head>

    <body>
        <p>
            The box model works differently for inline elements. For example,
            this <span>span</span> element does not work as expected.
        </p>
    </body>

</html>
p {
    width: 350px;
    border: 1px solid black;
}

span {
    display: inline-block;
    width: 100px;
    height: 40px;
    border: 5px solid black;
    padding: 10px;
    margin: 10px;
    background-color: greenyellow;
}

浏览器输出

CSS Box Model Inline Example

在上面的示例中,盒子模型按预期工作。span 元素的实际 widthheight 计算如下:

width = 5px + 10px + 100px + 10px + 5px = 130px
height = 5px + 10px + 40px + 10px + 5px = 70px

因此,实际 widthheight 分别变为 130px70px

注意: box-sizing 属性可以改变盒子模型的默认行为,使开发者能够直观地设置 widthheight

您可以了解更多关于 box-sizing 属性的信息。

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

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

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