美文网首页
CSS(一)——— 盒模型与元素高度

CSS(一)——— 盒模型与元素高度

作者: geverway | 来源:发表于2017-09-13 13:08 被阅读30次

    盒模型就是用来在浏览器中展示一个元素的基础模型,其实就是一个矩形。只不过它是一个 4 层模型,包含了 content、padding、border、margin。

    我们来写一个极其简单的 div 来说明一下盒模型

    //html
    <div class="content-box border-style padding-style margin-style">
        hello world
    </div>
    
    
    //css
    .content-box{height: 100px;width: 200px;background: lightblue;}
    .border-style{border: 20px solid lightcoral;}
    .padding-style{padding: 10px}
    .margin-style{margin: 30px auto;}
    

    使用 chrome 开发者工具,可以看到一个由盒模型展示的 div

    正常显示:


    dev tool 查看:

    有一个 4 层的模型,从外到里依次是 marginborderpaddingcontent。这里的 content 指的就是第二张图蓝色部分的内容块的大小。

    在 css 中,我们将 background 设置为 light-blue 。对比两张图,我们会发现

    • backgroud 设置的背景色,包含了 content 和 padding
    • 也就是说第一张图的蓝色部分,对应于,第二张盒模型图最内圈的蓝色部分加绿色部分

    此外,实际被计算为元素只读属性 clientHeight 的只包括 paddingcontent 部分

    document.getElementsByClassName('content-box')[0].clientHeight   //120
    

    而实际被计算为元素只读属性 offsetHeight 的包括了 paddingcontentborder部分

    document.getElementsByClassName('content-box')[0].clientHeight   //160
    

    如果你需要获得当前元素的高度信息,建议使用clientHeight\offsetHeight。这两个属性是在 css 渲染计算之后得到的值,也就是他们是当前元素的真实高度。

    如果用 style.height 来显示元素高度呢 ?

    document.getElements.ByClassName('content-box')[0].style.height  //""
    

    What ?!!!

    结果是 "",有点让人费解。

    原来是只有在设置内联属性 height 时,style.height 才有值,并且这个 height 值只是 content 部分的高度

    <div  class="content-box border-style padding-style margin-style" style="height:50px">
    // "50px"
    

    不用使用内联属性,偏要用使用 style.height 来获得实际呢?
    如果偏要这样,也是有办法的

    getComputedStyle(document.getElementsByClassName('content-box')[0]).height
    // "100px"
    

    这里的 getComputeStyle 就是元素 css 经渲染计算之后的结果,所以也可获得真实的 height 属性

    参考

    [1] Why browser is returning empty string on style.height ? How to get actual height of an element?

    相关文章

      网友评论

          本文标题:CSS(一)——— 盒模型与元素高度

          本文链接:https://www.haomeiwen.com/subject/sqiksxtx.html