探索 box-sizing:border-box与box-sizing:content-box区别

451 阅读2分钟

一、 属性介绍

CSS最重要的一个概念是盒子模型。它控制着页面这些元素的高度和宽度。

盒子模型一般包括四个部分,分别是content(内容),padding(内边距)、margin(外边距)以及border(边框)。

width、height属性通常用于设置元素的宽度、高度,而box-sizing属性可以决定元素的宽高是否随着边框和内边距的内容而改变。

二、话不多说,代码上看效果

<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
</head>

<style>
    div {
        color: #fff;
        font-size: 15px;
        text-align: center;
    }

    .parent {
        width: 500px;
        height: 500px;
        border: 5px solid red;
        padding: 20px;
    }

    .child1 {
        width: 300px;
        height: 100px;
        box-sizing: border-box;
        background-color: rgb(55, 228, 156);
        border: 5px solid grey;
        padding: 10px;
        margin: 10px;
    }

    .child2 {
        width: 300px;
        height: 100px;
        box-sizing: content-box;
        background-color: rgb(230, 170, 42);
        border: 5px solid grey;
        padding: 10px;
        margin: 10px;
        
    }
</style>

<body>
    <div class="parent">
        parent element
        <div class="child1">child1: box-sizing:border-box</div>
        <div class="child2">child2: box-sizing:content-box</div>
    </div>
</body>

</html>

效果如图:

image.png

image.png

image.png

如图可看出,child1元素的最终宽度仍然是300,而child2最终的宽度变成了330

child1总宽度:300px(初始设置宽度值)

child1内容宽度:300px(初始设置宽度值)-5px * 2(边框)-10px * 2(内边距)=270px

child2总宽度:300px(初始设置宽度值)+5px * 2(边框)+10px * 2(内边距)=330px

child2内容宽度:300px(初始设置宽度值)

三、分析比较

box-sizing:border-box

当在盒子有宽度的前提下,元素的总宽度包含内边距(padding)和边框(border),无论四个区域如何变化,元素整体的宽度是不变的,依旧是一开始在css中设置的宽度。

盒子的总宽度=width

内容区域的宽度=width-padding-border

box-sizing:content-box

当前属性的默认值,当在设置盒子的宽度和高度的情况下,改变盒子的内边距(padding)和边框(border),元素整体的宽度都会随着内边距和边框的值而随之改变

盒子的总宽度=width+padding+border

内容区域的宽度=width