视觉艺术编程知识点

《图解CSS》盒子模型

2020-11-04  本文已影响0人  张中华

盒子模型

在HTML文档中,每个元素都会在页面上生成一个盒子。因此,HTML页面实际上就是由一堆盒子组成的。默认情况下,每个盒子的边框不可见,背景也是透明的。
每个盒子由4部分构成: 外边距、边框、内边距、内容。

盒子模型基本示意图

虽然浏览器各不相同,但是盒子模型都是由这四部分组成。

标准盒子模型

根据 W3C 的规范,元素内容占据的空间是由 width 属性设置的,而内容周围的 padding 和 border 值是另外计算的;即在标准模式下的盒模型,盒子实际内容(content)的width/height=我们设置的width/height;盒子总宽度/高度=width/height+padding+border+margin。


标准盒模型
IE盒子模型

在该模式下,浏览器的 width 属性不是内容的宽度,而是内容、内边距和边框的宽度的总和;即在怪异模式下的盒模型,盒子的(content)宽度+内边距padding+边框border宽度=我们设置的width(height也是如此),盒子总宽度/高度=width/height + margin = 内容区宽度/高度 + padding + border + margin。


IE盒子模型
总结:标准盒子模型和IE盒子模型的差别就在于宽度和高度包含的范围不同。
CSS3指定盒子模型种类(box-sizing)

box-sizing: 定义了 user agent 应该如何计算一个元素的总宽度和总高度。

即box-sizing属性可以指定盒子模型种类,content-box指定盒子模型为W3C(标准盒模型),border-box为IE盒子模型(怪异盒模型)。

盒子种类

在 CSS 中我们广泛地使用两种“盒子” —— 块级盒子 (block box)内联盒子 (inline box)。这两种盒子会在页面流(page flow)和元素之间的关系方面表现出不同的行为。

块级盒子 (block box)
内联盒子 (inline box)

我们通过对盒子display 属性的设置,比如 inline 或者 block ,来控制盒子的外部显示类型。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            height: 50px;
            width: 100px;
            border: 1px solid black;
            margin: 1px;
            padding: 1px;
        }

        span {
            height: 100px;  /* 不起作用 */
            width: 100px;   /* 不起作用 */
            margin-top: 20px; /* 不起作用 */
            margin-bottom: 20px; /* 不起作用 */
            margin-left: 10px; /* 起作用 */
            margin-right: 10px;/* 起作用 */
        }
    </style>
</head>
<body>
    <div>块级盒子1</div>
    <div>块级盒子2</div>

    <span>内联盒子1</span>
    <span>内联盒子2</span> <br>
    <span>内联盒子3</span>
    <span>内联盒子4</span>
</body>
</html>
盒子种类

盒子的属性

盒子边框(border)

边框(border)有4个相关属性:

属性的缩写,内边距/外边距这两个属性原理相同,以顺时针开始设置:

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 30px;
            height: 30px;
            display: inline-block;
            background-color: yellow;
        }
        div:nth-child(1) {
            /* 设置边框的宽度,样式,颜色 */
            border: 1px solid black; /*Syntax: <line-width> || <line-style> || <color>*/
        }

        div:nth-child(2) {
            /* 只指定某一边的边框 */
            border-left: 1px solid black; /*border: 四边宽度 样式 颜色*/
        }

        div:nth-child(3) {
            border-width: 1px 2px;
            border-style: dashed dotted double inset; /*Syntax: <line-style>{1,4}*/
        }

        div:nth-child(4) {
            /*当设置三边时,左边为红色,与第二个颜色相同*/
            border: 1px solid;
            border-color: blue red green; /*Syntax: <line-style>{1,4}*/
        }

        div:nth-child(5) {
            /* 设置圆角*/
            border: 1px solid red;
            border-radius: 1px 5px 10px 15px; /* 从左上角开始,顺时针*/
        }

    </style>
</head>
<body>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
</body>
</html>
边框
内边框(padding)

内边距是盒子内容区与盒子边框之间的距离。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            display: inline-block;
            border: 1px solid black;
        }

        div:nth-child(2) {
            padding: 30px 20px;
        }

        div:nth-child(3) {
            padding-left: 30px;
        }
    </style>
</head>
<body>
    <div>没有内边距</div>
    <div>上下内边距30px,左右内边距20px</div>
    <div>左内边距30px</div>
</body>
</html>
内边距
外边距(margin)

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            border: 1px solid black;
        }

        div:nth-child(2) {
            margin: 30px 20px;
        }

        div:nth-child(3) {
            margin-left: 30px;
        }
    </style>
</head>
<body>
    <div>没有外边距</div>
    <div>上下外边距30px,左右外边距20px</div>
    <div>左外边距30px</div>
</body>
</html>
外边距

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
听说 👉 点赞 👈 的人运气不会太差,每一天都会元气满满哦 嘿嘿!!! ❤️ ❤️ ❤️
大家的支持就是我坚持下去的动力。点赞后不要忘了👉 关注 👈我哦!

上一篇 下一篇

猜你喜欢

热点阅读