什么是盒模型?全攻略(下)

124 阅读4分钟

1.0 盒模型的组成

css会把所有html元素看成一个盒子

盒子由4部分组成:

  1. 外边距:margin
  2. 边框:border
  3. 内边距:padding
  4. 内容:content

盒子的大小: 内容 + padding + border

margin 不会影响盒子的大小,但是会影响盒子的位置

image.png

2.0 content

  1. min-width : 最小宽度 ,如果小于这个宽度,则出现滚动条
  2. min-height: 最小高度 ,如果小于这个高度,则出现滚动条
  3. max-height: 最大高度 ,如果大于这个高度,内容会溢出
  4. max-width: 最大宽度  ,如果大于这个高度,内容会溢出

注意:以上4个属性一般不与width 和 height 连用

image.png

3.0 padding

padding: 内边距 => 会影响盒子大小

  1. 上右下左都加上10px的内边距 padding: 10px;
  2. 上下是10px , 左右是20px padding: 10px 20px;
  3. 上是10px 左右15px 下20px padding: 10px 15px 20px;
  4. 上右下左 padding: 10px 15px 20px 25px;
  5. 单独设置上面的内边距:padding-top: 10px;
  6. 单独设置右边的内边距:padding-right: 10px;
  7. 单独设置下面的内边距:padding-bottom: 10px;
  8. 单独设置左边的内边距:padding-left: 10px;

注意: 行内元素设置左右内边距没有问题,但是上下边距会有一定的影响

块元素和行内块元素没有这种影响

 如果想要解决这种问题,可以将行内元素转为行内块元素

2deb18249486d11235f4592e87209cf.png


4.0 border

border: 边框 => 会影响盒子大小

5b2fbea0c5a7d3a1a18e92938328b05.png

5.0 margin

  1. 会影响自己原本的位置 margin-top:50px;
  2. 会影响右边元素的位置 margin-right:50px;
  3. 会影响下面元素的位置 margin-bottom: 50px;
  4. 会影响自己原本的位置 margin-left: 50px;
5.1 对于行内元素来讲,设置上下margin不会生效,但是左右margin是可以的
<style>
  span {
      /* 没用 */
      margin-top:50px;
       /* 没用 */
      margin-bottom: 50px;
      margin-left: 50px;
      margin-right: 50px;
      background-color: orange;
    }
</style>
<span>this is span</span>
5.2 对于块级元素来讲,设置左右margin为auto就可以在父元素中水平居中
div {
            margin:0 auto;
            width: 200px;
            height: 200px;
            background-color: orange;
        }

行内元素和行内块元素不生效

span {
     display: inline-block;
     margin:0 auto;
     background-color: orange;
}

section {
       /* margin也可以加负数 */
       margin-left: -100px;
       width: 200px;
       height: 200px;
       background-color: pink;
}
<body>
    <div>this is div</div>
    <span>this is span</span>
    <section>123121231231321231233</section>
</body>

6.0 margin合并

上下关系的兄弟元素,上面元素的margin-bottom,和下面元素的margin-top会出现合并的现象。

这种现象会导致,整个margin会取最大值,不会将它们俩的值相加。

image.png

7.0 margin塌陷

什么是margin塌陷?

第一个子元素的上margin会作用在父元素上

如何解决?

给父盒子加上overflow:hidden属性即可

image.png

8.0 认识浮动

浮动:最开始的设计初衷就是解决文字环绕图片的问题

浮动元素会脱离文档流并向左/向右浮动,直到碰到父元素或者另一个浮动元素。


9.0 浮动的特点

  1. 脱离文档流(标准流) => 脱标
  2. 不再占有原来的位置,会影响后面的盒子的位置
  3. 原本独占一行的块元素,浮动之后,一行可以显示多个
  4. 浮动之后不会存在margin塌陷和margin合并问题

image.png

2.1 对于行内元素
  1. 也可以浮动,且浮动后可以设置宽高
  2. 元素之间的空白问题能够得到解决

image.png

  1. 浮动只会影响到后面元素的位置,不会影响前面标准流的盒子

image.png

2.2 浮动的影响
  1. 对兄弟元素的影响

后面的兄弟元素,会占据浮动元素之前的位置;对前面的兄弟元素没有影响

  1. 对父元素的影响

不能撑起父元素的高度,会导致父元素高度塌陷;父元素的宽度仍然对子元素生效

image.png

10.0 消除浮动的影响

面试题:清楚浮动

注意: 本意是问你 如何清除掉浮动产生的影响

  1. 手动给父元素指定高度 => 部分场景受限
  2.  给父元素也加上浮动 => 带来其他问题
  3. 给父元素设置 overflow:hidden
  4. 在所有浮动的元素的最后面,加上一个块元素,给该元素设置 clear:both
  5. 利用伪元素在父元素最后加上一个盒子,并且 clear:both

image.png