javascript htmlタグの要素の高さと幅を取得する

javascript htmlタグの要素の高さと幅を取得する

javascriptで、htmlタグの要素の高さと幅を取得するサンプルコードを記述してます。

環境

  • OS windows10 pro 64bit
  • Apache 2.4.43
  • ブラウザ chrome 102.0.5005.63

高さと幅取得

clientHeightとclientWidthを使用すると、高さと幅を取得することができます。

要素.clientHeight // 高さ

要素.clientWidth // 幅

実際に取得してみます。

<div id="sample" style="height: 200px;width: 150px;">mebee</div>
<button id="btn" onclick="hoge()">button</button>

<script>

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

</script>

実行結果

また「clientHeight」や「clientWidth」は、「border」などの先の幅は含まれませんが「padding」は含まれます。

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

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

<script>

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

</script>

実行結果

「border」を含んで取得する場合は「offsetHeight」と「offsetWidth」を使用します。

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

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

<script>

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

</script>

実行結果

サンプルコード

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

※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.clientHeight;
    let width = card.clientWidth;

    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">
        <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.clientHeight; //paddingを含んだ高さ
  txt2.textContent = "要素の幅" + card.clientWidth; //paddingを含んだ高さ

}