简述CSS盒模型

什么是盒模型?

盒模型的概念:盒模型是CSS布局的基石,它规定了网页元素如何显示以及元素之间的相互关系。

盒模型标准图片.jpg
盒模型的组成:content(内容)+padding(内边距)+border(边框)+margin(外边距)

现有的盒模型分两种:content-box和border-box

content-box

content-box.jpg
content-box(内容盒)的特点是width(宽度)为content(内容的宽度)。

例如如下代码中content的宽度是多少?

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .content-box{
            border: 1px solid red;
            width: 100px;
            padding :10px;
            margin: 15px;
            box-sizing: content-box;

        }
    </style>
</head>
<body>
    <div class="content-box">你好</div>
</body>
</html>
复制代码

很显然,这是一个content-box,所以内容是width的宽度,为是100px。

border-box

border-box.jpg

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .content-box{
            border: 1px solid red;
            width: 100px;
            padding :10px;
            margin: 15px;
            box-sizing: border-box;

        }
    </style>
</head>
<body>
    <div class="content-box">你好</div>
</body>
</html>
复制代码

若改为border-sizing:border-box;那width=content+padding+border=100px,所以content为78px。

从以上例子可以看出content-box和border-box之间的区别就在于content-box的宽度只包含了content,而border-box的宽度包含到border(width=content+padding+border)。

margin合并

  1. 子元素与子元素之间的合并
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .parent{
            border: 1px solid red;
        }
        .child1{
            border: 1px solid blue;
            margin-bottom: 50px;
        }
        .child2{
            border: 1px solid yellow;
            margin-top: 50px;
        }
    </style>
</head>
<body>
    <div class="parent">
        <div class="child1">第一个子元素</div>
        <div class="child2">第二个子元素</div>
    </div>
</body>
</html>
复制代码

1.jpg

2.jpg
子元素与子元素之间会将上面子元素的margin-bottom和下面子元素的margin-top合并。若不想要这种合并,只需要在子元素上加句display:inline-blockwidth=100%就行。

  1. 父元素与子元素的margin合并
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .parent{
           
            margin: 50px 0;
        }
        .child{
            border: 1px solid blue;
            margin: 50px 0;
        }

    </style>
</head>
<body>
    <div class="parent">
        <div class="child">第一个子元素</div>
        <div class="child">第二个子元素</div>
    </div>
</body>
</html>
复制代码

3.jpg

4.jpg
父元素会与第一个子元素的margin-top合并,与最后一个子元素的margin-bottom会合并。

如何阻止父元素与子元素的margin合并呢?

  1. 在父元素中添加一个padding。
  2. 在父元素中添加一个border。
  3. 在父元素中添加一个overflow:hidden;

使用之上三种方法就可以取消父子元素的margin合并。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享