CSS盒模型

1.标准模式下的盒模型

宽度和高度都是设定的css中的width和height的值

2.IE模式下的盒模型

宽度  = 设定的css中的width值 + padding-left + padding-right + border-left  +border-right

高度 = 设定的css中的height值 + padding-top+padding-bottom + border-top + border-bottom

 3.标准模型和IE模型的区别

计算宽度和高度的不同

4.CSS如何设置这两种模型

#wrap{
    /*IE模型*/
    box-sizing: border-box;
    /*标准模型*/
    box-sizing: content-box;
}

5.JS如何设置获取盒模型对应的宽和高

目录

        1.elem.style.width/height       

       只能获取到内联样式的宽和高,不能取到style标签中的和外联的样式

2.elem.currentStyle.width/height

        拿到的是三种样式通过浏览器渲染后的、及时运行时的结果,相对准确,但是IE8支持

3.window.getComputedStyle(elem,null).width/height

        火狐和谷歌支持

4.elem.getBoundingClientRect().width/height/left/top

        也是拿到及时运行的渲染的结果,是计算一个元素的绝对位置,以viewport的左顶点为基准

兼容性代码:

//获取任意一个元素的任意一个样式属性的值
function getStyle(elem,attr){
    return window.getComputedStyle?window.getComputedStyle(elem,null)[attr]:elem.currentStyle[attr];
}

6.实例题

1.边距重叠

  1. 父元素与子元素:若margin-top或margin-bottom都为正(负)值谁的外边距绝对值大选谁,若一负一正则两者之和
  2. 兄弟元素:若margin-top或margin-bottom都为正(负)值谁的外边距绝对值大选谁,若一负一正则两者之和
  3. 空元素:空元素的margin-top和margin-bottom会取一个最大值作为边距
  4. BFC元素内部垂直方向上会发生边距重叠
<section class="sec">
    <style>
        .sec {
            background: red;
            /*给父级元素加上overflow:hidden可以显示高度为110px*/
            /*overflow: hidden;*/
        }

        .child {
            height: 100px;
            margin-top: 10px;
            background: green;
        }
    </style>
    <p style="height:20px">这是兄弟元素p,高度20px</p>
    <article class="child">
        这是子元素,切记若父元素有内容,比如高度为20px的p标签,则不会出现边距重叠问题
    </article>
</section>
<section class="bro">
    <style>
        .bro {
            margin-top: 20px;
        }

        .bro p {
            margin-bottom: 10px;
            background: red;
            height: 20px;
        }

        .bro article {
            margin-top: 5px;
            background: green;
            height: 20px;
        }
    </style>
    <p>这是兄弟元素p,下外边距为10px,边距重叠之后的结果为10px,即若都为正(负)值谁的外边距绝对值大选谁,若一负一正则两者之和</p>
    <article>
        这是兄弟元素article,上外边距为5px
    </article>
</section>
<section class="empt-wrap">
    <style>
        .empt-wrap {
            background: red;
        }

        .empt-wrap .empt {
            height: 0;
            margin-top: 10px;
            margin-bottom: 20px;
            background: green;
        }

        .empt-wrap p {
            height: 20px;
        }
    </style>
    <article class="empt"></article>
    <p>空元素的margin-top和margin-bottom会取一个最大值作为边距</p>
</section>
<section id="margin">
    <style>
        #margin {
            background: pink;
            overflow: hidden;
        }

        #margin > p {
            margin: 5px auto 25px;
            background: red;
        }
    </style>
    <p>1</p>
    <p>2BFC原理:BFC元素垂直方向上发生边距重叠</p>
    <p>3</p>
</section>

2.BFC概念

BFC就是块级格式化上下文

 原理:

  1.  BFC元素的垂直方向上会发生边距重叠
  2. BFC元素内部的元素不会影响外面的元素,外面的元素也不会影响内部的元素
  3. BFC元素在计算高度的时候,内部的浮动元素的高度也会计算
  4. BFC元素与浮动元素的盒子不会发生重叠

如何创建一个BFC:

  1. float属性不为none
  2. position属性不为static和relative
  3. display属性不为table-开头的
  4. overflow不为visible

BFC的使用场景:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>盒模型</title>
    <style>
        html * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
<section id="margin2">
    <style>
        #margin2 {
            background: pink;
            overflow: hidden;
            margin-top: 20px;
        }

        #margin2  p {
            margin: 5px auto 25px;
            background: red;
        }

        #margin2 > .bfc {
            overflow: hidden;
        }
    </style>
    <p>1</p>
    <div class="bfc">
        <p>2BFC垂直方向边距重叠解决:在第二个p元素上加一个父级容器,给父级容器创建BFC</p>
    </div>
    <p>3</p>
</section>
<section id="layout">
    <style>
        #layout{
            background: red;
            margin-top: 20px;
        }
        #layout .left{
            float:left;
            width:300px;
            height: 200px;
            background: green;
        }
        #layout .right{
            height:210px;
            overflow:auto;
            background:pink;
        }
    </style>
    <div class="left"></div>
    <div class="right">
        BFC原理:BFC元素的区域不会与浮动元素的box重叠
        现在需要将.right转为一个BFC
    </div>
</section>

<section id="float">
    <style>
        #float{
            background: red;
            margin-top: 20px;
            /*float: left;*/
            overflow: auto;
        }
        #float .float{
            float: left;
        }
    </style>
    <div class="float">
        我是浮动元素,BFC原理:BFC元素在进行高度计算的时候内部的浮动元素也会参与运算
        作用:可以清除浮动
    </div>
</section>
</body>
</html>

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值