盒子模型和标签的标准流

盒子模型

页面中的每一个标签,都可以看做事一个盒子

浏览器在渲染(显示)网页时,会将网页中的元素看做是一个个的矩形区域,所以称之为盒子

盒子模型的组成

CSS中的盒子分别由:内容区域(content)、内边距区域(padding)、边框区域(border)、外边距(margin)构成

内容区域宽度和高度

/*
width和height属性值,如果不设置的话,默认是盒子的宽度和高度
取值:数字+px
*/

border(边框)的使用方法

/*
属性名:border
属性值:单个取值的连携,取值之间以空格隔开
    如:border:10px solid red:
快捷键:bd+tab
​
*/

border单方向设置

/*
场景:只给盒子的某个方向单独设置边框
属性名:border-方位名词(left/right/top/botton)
*/

边框属性(几乎用不到)

作用 属性名 属性值
边框粗细 border-width 数字+px
边框样式 border-style 实线solid、虚线dashed、点线dotted
边框颜色 border-color  

内边距(padding)

顺时针方向去记:上、下、左、右

    <style>
        div {
           width: 300px;
           height: 300px; 
           background-color: pink;
           padding: 50px;
           /*
           padding 属性可以当作复合属性使用,表示单独设置某个方向的内边距
           padding 最多取4个值
           四值:上、右、下、左(顺时针)
           pingding: 10px 20px 30px 40px;
           
           三值:上、左右、下
           padding: 10px 40px 80px;
​
           两值:上下 左右
           padding:10px 80px;
           
           */
        }
    </style>

盒子内减(内减模式)

border 和 padding都会撑大盒子的

/*
手动内减:自己计算多余大小,手动在内容中减去
​
自动内减:
给盒子设置属性 box-sizing: border-box
浏览器自动化计算多余代下,自动在内容中减去
*/

外边距

margin和padding的属性值设置方法是一样的,只不过margin不会撑大盒子

清除标签默认样式

即:清除内边距和外边距

/*
场景:浏览器会默认给部分标签设置默认的margin和padding,一般项目开始前会先清除这些标签自带的margin和padding,后续自己设置
​
比如:
body标签默认由margin: 8px
p标签默认有上下的margin
ul标签默认由上下的margin和padding-left
*/
    <style>
        * {
            margin: 0;
            padding: 0;
        }
​
    </style>

版心居中

版心居中:一般都是指水平居中,即设置外边距0 auto

版心:即网页的有效内容

外边距合并现象

这里所说的合并通常:是指两个块标签做垂直布局的时候,即两个块级标签同时设置上边距和下边距

上下的margin会合并,此时会取两者的最大值,如上面的块级标签设置了margin-bottom:60px、下面的标签设置了margin-top:40px则此时两者的边边距会取最大值60px

<!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>
        .big_box {
            /*
            现象:
            垂直布局的块级元素,上下的margin会合并
            导致最终两者的距离为margin的最大值,即取这个案例的最大值60px
            解决方法:
            垂直居中的两个块级标签,只给其中一个盒子设置margin即可
            */
            margin-bottom: 60px;
            width: 300px;
            height: 300px;
            background-color: pink;
        }
​
        .small_box {
            margin-top: 50px;
            width: 100px;
            height: 100px;
            background-color: aqua;
        }
    </style>
</head>
<body>
    
    <div class="big_box"></div>
    <div class="small_box"></div>
​
</body>
</html>

外边距折叠现象(塌陷现象)

塌陷现象:父子级嵌套标签,子级标签想往下挪,导致把父标签的位置挪下来了

给父元素设置overflow: hidden

父子级标签,都是块级的标签;此时子级加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>
        .big_box {
            width: 300px;
            height: 300px;
            background-color: pink;
        }
​
        .small_box {
            width: 100px;
            height: 100px;
            background-color: aqua;
            /*此时给子标签设置*/
            margin-top: 50px;
        }
​
    </style>
</head>
<body>
    
    <div class="big_box">
        <div class="small_box"></div>
    </div>
</body>
</html>

外边折叠解决放法

/*
1.给父元素设置overflow: hidden
2.转成行内块元素
3.设置浮动
*/

行内元素垂直的内、外边距问题

即:如果想要通过marginpadding改变行内标签的垂位置,无法生效,只会改变水平方向的margin或者padding

<body>
    <!--行内标签的margin-top和margin-bottom不生效-->
    <!-- 行内标签的padding-top和padding-bottom不生效 -->
    <span>span标签</span>
</body>

标签的标准流

即:标签的默认排列方式

/*
1.块级标签:从上往下,垂直布局,独占一行
2.行内元素或行内块元素:从左往右,水平布局,空间不够自动折行
*/

 

posted @ 2022-12-13 22:16  无敌大牛牛  阅读(78)  评论(0编辑  收藏  举报