05.盒模型

本文详细介绍了CSS盒模型,包括内容区、边框、内边距和外边距,以及它们如何影响元素的尺寸和布局。此外,还讨论了文档流、行内元素与块元素的区别、元素的水平和垂直布局、外边距折叠现象以及浏览器默认样式的影响。通过这些概念,读者可以更好地掌握网页布局的原理和技巧。
摘要由CSDN通过智能技术生成

盒模型

1.文档流(normal flow)

  • 网页是一个多层的结构,一层摞着一层

  • 通过CSS可以分别为每一层来设置样式

  • 作为用户来讲只能看到最顶上一层

  • 这些层中,最底下的一层称为文档流,文档流是网页的基础

  • 我们所创建的元素默认都是在文档流中进行排列

对于我们来元素主要有两个状态

  • 在文档流中

  • 不在文档流中(脱离文档流)

2.块元素在文档流中有什么特点:

  • 块元素

  • 块元素会在页面中独占一行(自上向下垂直排列)

  • 默认宽度是父元素的全部(会把父元素撑满)

  • 默认高度是被内容撑开(子元素)

3.行内元素

  • 行内元素不会独占页面的一行,只占自身的大小

  • 行内元素在页面中左向右水平排列,如果一行之中不能容纳下所有的行内元素

  • 则元素会换到第二行继续自左向右排列(书写习惯一致)

  • 行内元素的默认宽度和高度都是被内容撑开

4.盒子模型

盒模型、盒子模型、框模型(box model)

  • CSS将页面中的所有元素都设置为了一个矩形的盒子

  • 将元素设置为矩形的盒子后,对页面的布局就变成将不同的盒子摆放到不同的位置

  • 每一个盒子都由一下几个部分组成:

    • 内容区(content)
    • 内边距(padding)
    • 边框(border)
    • 外边距(margin)

4.1 内容区(content)

元素中的所有的子元素和文本内容都在内容区中排列
内容区的大小由width 和 height两个属性来设置
width 设置内容区的宽度
height 设置内容区的高度

.box1{
			width: 200px;
            height: 200px;
            background-color: #bfa;
}

4.2 边框(border)

边框属于盒子边缘,边框里边属于盒子内部,出了边框都是盒子的外部

边框的大小会影响到整个盒子的大小
要设置边框,需要至少设置三个样式:

  • 边框的宽度 border-width
  • 边框的颜色 border-color
  • 边框的样式 border-style
    .box{         
	border-width: 10px;
	border-color: red;
	border-style: solid;}
  • border-width 边框的宽度:默认3px

    • border-top-width 上边框的宽度

    • border-right-width 右边框的宽度

    • border-bottom-width 下边框的宽度

    • border-left-width 左边框的宽度

  • border-color 边框的颜色:默认使用color的颜色值

    • border-top-color 上边框的颜色

    • border-right-color 右边框的颜色

    • border-bottom-color 下边框的颜色

    • border-left-color 左边框的颜色

  • border-style 边框的样式:没有默认值,必须指定

    • border-top-style 上边框的样式

    • border-right-style 右边框的样式

    • border-bottom-style 下边框的样式

    • border-left-style 左边框的样式

      • solid 实线

      • dotted 点状虚线

      • dashed 虚线

      • double 双线

      • border-style的默认值是none 表示没有边框

  • border-width可以用来指定四个方向的边框的宽度值的情况

​ 四个值:上 右 下 左(顺时针)

​ 三个值:上 左右 下

​ 两个值:上下 左右

​ 一个值:上下左右

  • border-color,border-style也一样,通过上面决定对应方向的颜色,样式。
    border-style: solid dotted dashed double;
    border-style: solid; 
    border-width: 10px;
    border-color: orange;
    border-style: solid; 
	border-color: orange red yellow green;
    border-color: orange;
  • border简写属性,通过该属性可以同时设置边框所有的相关样式,并且没有顺序要求
除了border以外还有四个border-xxx
                    border-top
                    border-right
                    border-bottom
                    border-left
              */
              /* border: solid 10px orange; */
              /* border-top: 10px solid red;
              border-left: 10px solid red;
              border-bottom: 10px solid red; */

              border: 10px red solid;
              border-right: none;

4.3 内边距(padding)

<body>
    <div class="box1">
        <div class="inner"></div>
    </div>
</body>
.box1{
            width: 200px;
            height: 200px;
            background-color: #bfa;
            border: 10px orange solid;}

内边距(padding)

内容区和边框之间的距离是内边距

一共有四个方向的内边距:

  • padding-top

  • padding-right

  • padding-bottom

  • padding-left

              {padding: 10px 20px 30px 40px;
              padding: 10px 20px 30px ;
              padding: 10px 20px ;
              padding: 10px ;
        }

内边距的设置会影响到盒子的大小

背景颜色会延伸到内边距上

一个盒子的可见框的大小,由内容区 内边距 和 边框共同决定,

所以在计算盒子大小时,需要将这三个区域加到一起计算

        .inner{
            width: 100%;
            height: 100%;
            background-color: yellow;
            把内容区撑满

4.4 外边距(margin)

  • 外边距不会影响盒子可见框的大小
  • 但是外边距会影响盒子的位置
  • 一共有四个方向的外边距
    • margin-top:上外边距,设置一个正值,元素会向下移动
    • margin-right:默认情况下设置margin-right不会产生任何效果
    • margin-bottom:下外边距,设置一个正值,其下边元素会向下移动
    • margin-left:左外边距,设置一个正值,元素会向右移动
    • margin也可以设置负值,如果是负值则元素会向相反的方向移动
    • 元素在页面中是按照自左向右的顺序排列的,所以默认情况下如果我们设置的左和上外边距则会移动元素自身,而设置下和右外边距会移动其他元素
    • margin的简写属性:
    • margin可以同时设置四个方向的外边距,用法和padding一样
    • margin会影响到盒子的实际占用空间

何为外边距:就是盒子(图形)距离页面框的距离,bottom和right是移动其它元素(若有的话),left和top是改变自身位置。

5 元素在水平方向的布局

元素在其父元素中水平方向的位置由以下几个属性共同决定

  • margin-left

  • border-left

  • padding-left

  • width

  • padding-right

  • border-right

  • margin-right

一个元素在其父元素中,水平布局必须要满足以下的等式:

margin-left+border-left+padding-left+width+padding-right+border-right+margin-right=其父元素内容区的宽度(必须满足)

以上等式必须满足,如果相加结果使等式如果不成立,则称为过度约束,则等式会自动调整

调整的情况:如果这七个值中没有为 auto 的情况,则浏览器会自动调整margin-right值以使等式满足

这七个值中有三个值和设置为auto

width

margin-left

margin-right

  • 如果某个值为auto,则会自动调整为auto的那个值以使等式满足

  • 如果将一个宽度和一个外边距设置为auto,则宽度会调整到最大,设置auto的外边距会自动为0

  • 如果将三个值都设为auto,则外边距都是0,宽度最大

  • 如果将两个外边距设置为auto,宽度固定值,则会将外边距设置为相同的值,所以我们经常利用这个特点来使一个元素在其父元素中水平居中

    • 示例:width:xxxpx
    • ​ margin:0 auto;

6 垂直方向布局

        .outer{
            background-color: #bfa;
            height: 600px;
            /* 
                默认情况下父元素的高度被内容撑开
             */
        }

子元素是在父元素的内容区中排列的,

如果子元素的大小超过了父元素,则子元素会从父元素中溢出

使用 overflow 属性来设置父元素如何处理溢出的子元素

可选值:

  • visible,默认值 子元素会从父元素中溢出,在父元素外部的位置显示

  • hidden 溢出内容将会被裁剪不会显示

  • scroll 生成两个滚动条,通过滚动条来查看完整的内容

  • auto 根据需要生成滚动条

  • overflow-x:单独处理水平方向

  • overflow-y:单独处理垂直方向

7 边距折叠

    <style>
        .box1 , .box2{
            width: 200px;
            height: 200px;
            font-size: 100px;
        }

        .box1{
            background-color: #bfa;

            /* 设置一个下外边距 */
            margin-bottom: 100px;
        }

        .box2{
            background-color: orange;

            /* 设置一个上外边距 */
            margin-top: 100px;
        }

        .box3{
            width: 200px;
            height: 200px;
            background-color: #bfa;
            /* padding-top: 100px; */
            /* border-top: 1px #bfa solid; */
        }

        .box4{
            width: 100px;
            height: 100px;
            background-color: orange;
            margin-top: 100px;
        }
    </style>
<body>

    <div class="box3">
        <div class="box4"></div>
    </div>

    <!-- <div class="box1"></div>
    <div class="box2"></div> -->
    
</body>

垂直外边距的重叠(折叠)

  • 相邻的垂直方向外边距会发生重叠现象

7.1 兄弟元素

  • 兄弟元素间的相邻垂直外边距会取两者之间的较大值(两者都是正值)

特殊情况:

  • 如果相邻的外边距一正一负,则取两者的和

  • 如果相邻的外边距都是负值,则取两者中绝对值较大的

  • 兄弟元素之间的外边距的重叠,对于开发是有利的,所以我们不需要进行处理

7.2 父子元素

  • 父子元素间相邻外边距,子元素的会传递给父元素(上外边距)

  • 父子外边距的折叠会影响到页面的布局,必须要进行处理

8 行内元素的盒模型

行内元素的盒模型

  • 行内元素不支持设置宽度和高度

  • 行内元素可以设置padding,但是垂直方向padding不会影响页面的布局

  • 行内元素可以设置border,垂直方向的border不会影响页面的布局

  • 行内元素可以设置margin,垂直方向的margin不会影响布局

超链接属于行内元素,不能调宽高

但是可以将行内元素变成块元素

通过display元素

display 用来设置元素显示的类型

可选值:

  • inline 将元素设置为行内元素

  • block 将元素设置为块元素

  • inline-block 将元素设置为行内块元素

    行内块,既可以设置宽度和高度又不会独占一行

  • table 将元素设置为一个表格

  • none 元素不在页面中显示

visibility 用来设置元素的显示状态

可选值:

  • visible 默认值,元素在页面中正常显示

  • hidden 元素在页面中隐藏 不显示,但是依然占据页面的位置

行内块元素相当于一个字,会有空格

9 默认样式

<body>
    
<div class="box1"></div>

<p>我是一个段落</p>
<p>我是一个段落</p>
<p>我是一个段落</p>

<ul>
    <li>列表项1</li>
    <li>列表项2</li>
    <li>列表项3</li>
</ul>

</body>
        .box1{
            width: 100px;
            height: 100px;
            border: 1px solid black;
        }

默认样式:

  • 通常情况,浏览器都会为元素设置一些默认样式

  • 默认样式的存在会影响到页面的布局,

  • 通常情况下编写网页时必须要去除浏览器的默认样式(PC端的页面)

浏览器自动生成的外边距是body的

body{
            margin: 0;
        }/*可去除*/
p{
            margin: 0;
        }/*去除段落的外边距
ul{
            margin: 0;/*会导致看不见序号点*/
            padding: 0;
            /* 去除项目符号 * /
            list-style:none; 
        } */

每次这样处理很麻烦,有什么办法呢?

每次处理的时候,删除的都是margin和pedding

最简单的做法是:

*{
            margin: 0;
            padding: 0;
        }

可通过官方文件夹,通过reset.css

<link rel="stylesheet" href="./css/reset.css"> 

直接去除全部默认样式hahaha

官方地址:https://meyerweb.com/eric/tools/css/reset/

还可以通过normalize.css

对默认样式进行统一,但是有的没有进行去除

官方地址:https://necolas.github.io/normalize.css/8.0.1/normalize.css

将其导入项目文件夹进行引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值