javascript htmlタグの要素の高さと幅を枠線の幅を含んで取得する

javascript htmlタグの要素の高さと幅を枠線の幅を含んで取得する

javascriptで、htmlタグの要素の高さと幅を枠線の幅を含んで取得するサンプルコードを記述してます。「offsetHeight」と「offsetWidth」を使用して取得します。枠線の他には「padding」も指定されていれば含まれて取得されます。

環境

  • OS windows11 pro 64bit
  • Apache 2.4.43
  • ブラウザ chrome 107.0.5304.88

枠線を含んで高さと幅取得

「offsetHeight」と「offsetWidth」を使用すると、枠線を含んで高さと幅を取得することができます。

要素.offsetHeight // 高さ

要素.offsetWidth // 幅

実際に取得してみます。

<div id="sample" 
style="
height: 200px;
width: 150px;
border: 4px solid;
border-color: green;
">mebee</div>

<button id="btn" onclick="hoge()">button</button>

<script>

function hoge(){
  //高さと幅をborderを含んで取得
  var elm = document.getElementById('sample');
  console.log(elm.offsetHeight);
  console.log(elm.offsetWidth);
}

</script>

実行結果

また「offsetHeight」と「offsetWidth」は「padding」も含んで取得します。

<div id="sample" 
style="
height: 200px;
width: 150px;
border: 4px solid;
border-color: green;
padding: 10px 10px 10px 10px;">mebee</div>

<button id="btn" onclick="hoge()">button</button>

<script>

function hoge(){
  //高さと幅をborderを含んで取得
  var elm = document.getElementById('sample');
  console.log(elm.offsetHeight);
  console.log(elm.offsetWidth);
}

</script>

実行結果

「border」を含まないで、取得する場合は「clientHeight」や「clientWidth」を使用します。

<div id="sample" 
style="
height: 200px;
width: 150px;
border: 4px solid;
border-color: green;
padding: 10px 10px 10px 10px;">mebee</div>

<button id="btn" onclick="hoge()">button</button>

<script>

function hoge(){
  //高さと幅を取得
  var elm = document.getElementById('sample');
  console.log(elm.clientHeight);
  console.log(elm.clientWidth);
}

</script>

実行結果

サンプルコード

以下は、「offsetHeight」と「offsetWidth」を使って、要素の高さと幅を取得するサンプルコードとなります。

※cssには「uikit」を使用してます。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>mebeeサンプル</title>
  <!-- UIkit CSS -->
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/css/uikit.min.css" />

  <!-- UIkit JS -->
  <script src="https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/js/uikit.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/js/uikit-icons.min.js"></script>
</head>
<style>
.main {
  margin: 0 auto;
  margin-top: 200px;
  display: flex;
  flex-direction: column;
  align-items: center;
  font-size: 20px;
}
</style>
<script>

window.onload = function(){
  
  //高さと幅を取得
  let card = document.getElementById('card');
  let height = card.offsetHeight;
  let width = card.offsetWidth;
  
  let txt1 = document.getElementById("txt1");
  let txt2 = document.getElementById("txt2");

  txt1.textContent = "要素の高さ" + height; //paddingを含んだ高さ
  txt2.textContent = "要素の幅" + width; //paddingを含んだ幅

}

</script>
<body>
  <div class="main">
    
    <div class="uk-child-width-1-1@m uk-grid-small uk-grid-match" uk-grid>      
      <div id="card" style="border: 50px solid;">
          <div class="uk-card uk-card-primary uk-card-body">
              <h3 class="uk-card-title">mebee</h3>
              <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
          </div>
      </div>

      <div class="uk-alert-primary" uk-alert>      
        <p id="txt1"></p>
      </div>
      <div class="uk-alert-success" uk-alert>
        <p id="txt2"></p>
      </div>

  </div>

  </div>
</body>
</html>

実行結果を確認すると、取得されていることが確認できます。

また、javascript部はwindowオブジェクトやdocument.getElementByIdを省略して記述することも可能です。関数もアロー関数を使用できます。

onload = () => {  

  txt1.textContent = "要素の高さ" + card.offsetHeight; //paddingを含んだ高さ
  txt2.textContent = "要素の幅" + card.offsetWidth; //paddingを含んだ高さ

}