Getting an element's inner height

后端 未结 5 606
说谎
说谎 2020-12-08 10:04

How do you get an element\'s inner height, without padding and borders?

No jQuery, just pure JS, and a cross-browser solution (IE7 included)

5条回答
  •  盖世英雄少女心
    2020-12-08 10:28

    clientHeight - give the height including padding but without the borders.

    getComputedStyle - a way to tap into the CSS rules of an element and retrieve a property's value (padding)

    Using parseInt is a way to strip away units and leave only the numeric value (which is in pixels)
    parseFloat can also be used for more precise sub-pixel measurements

    Note that all values will automatically be converted by the DOM API to pixels

    function getInnerHeight( elm ){
      var computed = getComputedStyle(elm),
          padding = parseInt(computed.paddingTop) + parseInt(computed.paddingBottom);
    
      return elm.clientHeight - padding
    }
    

    DEMO:

    // main method
    function getInnerHeight( elm ){
      var computed = getComputedStyle(elm),
          padding = parseInt(computed.paddingTop) + parseInt(computed.paddingBottom);
      
      return elm.clientHeight - padding
    }
    
    // demo utility function
    function printInnerHeight( selector ){
      console.clear()
      console.log(
        getInnerHeight( document.querySelector(selector) )
      )
    }
    body{ display: flex; padding:0; margin: 0; }
    div{ flex: 1; }
    
    .demo1{
      padding-top: 2vh;
      padding-bottom: 1vh;
      margin: 30px;
      border: 10px solid salmon;
      box-sizing: border-box;
      outline: 1px solid red;
    }
    
    .demo2{
      padding-top: 2vh;
      padding-bottom: 4vh;
      margin: 30px;
      border: 10px solid salmon;
      border-bottom-width: 0;
      height: 150px;
      outline: 1px solid red;
    }
    
    
    p::before{
      content: '';
      display: block;
      height: 100%;
      min-height: 50px;
      background: lightgreen;
    }

    inner height should be ~50px

    inner height should be ~150px

提交回复
热议问题