IE盒子模型和w3c盒子模型的区别

418 阅读2分钟

首先,我们要明白的是。盒子模型指的是width,height,padding,border,margin。

第二,IE盒子模型也是怪异盒子模型,w3c盒子模型指的是标准盒子模型。

第三,IE盒子模型的height不但包括了content的高度,还包括padding和border的宽度。w3c盒子模型的height只包括content的高度,不包括padding和border。

第四,这两种盒子模型,没有什么好与不好。需要我们看场景去选择这两种盒子模型,这样才能更好的适用场景。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>IE盒子模型和w3c盒子模型的区别</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box{
            width: 300px;
            height: 300px;
            padding: 10px;
            border:10px solid gray;
            margin: 10px;
            background-color: green;
        }
        .box1{
            width: 300px;
            height: 300px;
            padding: 10px;
            border:10px solid gray;
            margin: 10px;
            background-color: red;
            box-sizing: border-box;
        }
    </style>
</head>
<body>
    <div class="box"></div>
    <div class="box1"></div>
</body>
</html>

我们来看一下正常的盒子模型:

01.png 正常的盒子模型,他的宽度和高度都是300+10+10+10 +10 = 340,整个盒子的大小就是340,不加上盒子的外边距。

我们来看一下IE盒子模型:

02.png

这个盒子,明显要比上面的盒子的宽度和高度要小很多。他是260+10+10+10 +10 =300,不加盒子的外边距。

所以,IE盒子模型和w3c盒子模型看起来就是,IE盒子模型比较老实,你给他多少宽度和高度,他总的大写就是多少。w3c盒子模型就是,你给他多少宽度和高度,他就保留多少宽度和高度。其他的他另外计算。

我们接下来要探求,IE盒子模型和w3c盒子模型在js中计算盒子的高度和宽度有什么区别没有?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>IE盒子模型和w3c盒子模型的区别</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box{
            width: 300px;
            height: 300px;
            padding: 10px;
            border:10px solid gray;
            margin: 10px;
            background-color: green;
        }
        .box1{
            width: 300px;
            height: 300px;
            padding: 10px;
            border:10px solid gray;
            margin: 10px;
            background-color: red;
            box-sizing: border-box;
        }
    </style>
</head>
<body>
    <div class="box" id="box"></div>
    <div class="box1" id="box1"></div>
    <script>
        var box =document.getElementById("box");
        console.log(box.offsetHeight); //340
        console.log(box.offsetWidth); //340
        var box1 = document.getElementById("box1");
        console.log(box1.offsetHeight); //300
        console.log(box1.offsetWidth); //300
    </script>
</body>
</html>

从上面得出的数据可以看出,

offsetWidth = padding(左,右) + width + border(左,右)

offsetHeight = padding(上,下) + height + border(上,下)

offsetTop和offsetLeft 获取元素到定位父级的距离。如果父级没有定位则是到body的顶部/左边的位置。比如margin。

总结

关于盒子模型的知识点,我们要弄清楚,这样才能在平时的日常工作中,节省时间,让自己写起代码来更加轻松。