css 盒模型

题目:你谈谈你对盒模型的认识

什么是盒模型?

css盒子模型 又称框模型 (Box Model) ,它包含了元素内容(content)、内边距(padding)、边框(border)、外边距(margin)几个要素。

1.盒模型基本概念:标准盒模型+IE盒模型

1.1标准盒模型

元素框的总宽度 =元素(element)的width + padding的左边距和右边距的值 + margin的左边距和右边距的值 + border的左右宽度

元素框的总高度 =元素(element)的height + padding的上下边距的值 + margin的上下边距的值 + border的上下宽度

1.2.IE盒模型

元素框的总宽度 = 元素(element)的width + margin的左边距和右边距的值;

元素框的总高度 = 元素(element)的height + margin的上下边距的值;

2. 他们之前的区别是什么

实际元素计算的宽度和高度不同

标准盒模型 

元素框的总宽度 =元素(element)的width + padding的左边距和右边距的值 + margin的左边距和右边距的值 + border的左右宽度

元素框的总高度 =元素(element)的height + padding的上下边距的值 + margin的上下边距的值 + border的上下宽度

IE盒模型

元素框的总宽度 = 元素(element)的width + margin的左边距和右边距的值;

元素框的总高度 = 元素(element)的height + margin的上下边距的值;

3.如何设置这两种盒模型

box-sizing : border-box (IE盒模型)

box-sizing:content-box(标准盒模型)

4.js如何设置盒模型的宽和高

这一个className 为 box的dom

样式为 内部样式 

1.dom.style.width/height 

发现获取的宽度和高度都为空 因为这种方式 只能获取到内联样式里面的宽高

缺点:只能获取到内联样式里面的宽高

2.dom.currentStyle.widht/height

缺点:只支持IE浏览器 兼容性差

3.window.getComputedStyle(dom).height/widht 

优点:能获取到各种样式的宽高 兼容性不错

4.dom.getBoundingClientReact().widht/height

当有10px的padding时

无padding

缺点:不能能准确获取到宽高

优点:能获取各种样式的的高度和宽度 但是包括padding

5.根据盒模型解释边距重叠

<div class="container">
        <div class="box">

        </div>
        <div class="box2">

        </div>
    </div>

.container{
        background-color: red;
        height: 200px;;
        width: 200px;
    }
    .box{
        background-color: aqua;
        height: 100px;
        width: 100px;
        margin: 20px 20px;
    }
    .box2 {
        background-color: brown;
        height: 100px;
        width: 100px;
        margin: 20px 20px;
    }

样式图

从上面的图的效果我们可以看出两个问题点

1.蓝色的div和棕色的div 上下的mairgin 只有20px(margin重叠)

2.蓝色的div的上margin无效(margin塌陷)

如何解决这两个问题呢?

要解决这个问题我们必须要明白一个东西---bfc(Block Formatting Context

bfc的基本概念 --- 块级格式上下文

bfc的原理是什么

1.在bfc这个元素的垂直方向的边距会发生重叠

2.bfc的区域不会与浮动元素的box重叠(一般用于清除浮动)

3.bfc在页面上一个独立的容器,外面的元素不会影响到里面的元素,反过来里面的元素也不会影响到外面的元素

4.计算bfc元素高度的时候浮动元素也会参与计算

那么如何创建bfc

1.float不为null

2.display为table inline-block

3.position不为relative,static

4.overflow为hidden,visiable

知道了bfc 如何 去解决上诉的两个问题

1.解决问题1(margin重叠)

我们可以在box2 外层套一个dom 并且让这个dom 触发bfc 结果图如下

可以看出box和box2中间的margin不发生重叠

2.解决问题2

方法一 给最外层添加一个border 多大都无所谓

方法二 也给box 添加一个外层dom 并且让这个dom触发bfc

扩展:bfc除了能解决上诉的问题还能解决什么问题呢?

问题一:当子元素有高度并且为float时 父容器的高度不能被撑开

效果图

可以发现父容器并没有撑开

当父容器触发bfc时

可以看到父容器被撑开了

这也就是上诉原理中的 第四点 bfc计算高度的时候浮动元素也参与计算

问题二:清除浮动

清除浮动的常见方法

 方法一 在最底层套用一个dom并且清除 浮动 (实际中不推荐 结构出现不明白的dom)

方法二 利用伪元素 清除浮动(实际推荐用此方法 记住伪类默认是inline 清除浮动时用block)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值