覚えておきたい! CSS で height: 0; から height: auto; へのアニメーション 3 つの方法

2024-04-02

CSS で height: 0; から height: auto; への遷移をアニメーション化する

この解説では、以下の 3 つの方法を紹介します。

方法 1: will-change プロパティと transition プロパティ

  1. アニメーションさせたい要素に will-change: height を設定します。
  2. transition プロパティで height を指定し、アニメーションの duration や timing-function を設定します。
.element {
  will-change: height;
  transition: height 0.5s ease-in-out;
}

.element.active {
  height: auto;
}

方法 2: @keyframes と animation プロパティ

  1. @keyframesheight の変化をアニメーションとして定義します。
  2. アニメーションさせたい要素に animation プロパティで定義したアニメーションを指定します。
@keyframes height-change {
  from {
    height: 0;
  }
  to {
    height: auto;
  }
}

.element {
  animation: height-change 0.5s ease-in-out;
}

.element.active {
  animation-play-state: running;
}

方法 3: calc() 関数

  1. height プロパティに calc() 関数を使って、要素の paddingmargin を利用してアニメーションを表現します。
.element {
  height: calc(100vh - 50px);
  transition: height 0.5s ease-in-out;
}

.element.active {
  height: auto;
}

各方法の比較

方法メリットデメリット
will-changeシンプルで記述量が少ない古いブラウザでは動作しない
@keyframesアニメーションのカスタマイズ性が高い記述量が多くなる
calc()シンプルで軽量高度なアニメーションには不向き

注意点

  • height: auto; は要素のコンテンツに合わせて高さを自動調整するため、コンテンツが読み込まれる前にアニメーションが開始すると、意図しない動きになる可能性があります。
  • アニメーションの duration や timing-function は、要素の高さやアニメーションの目的に合わせて調整してください。



<button onclick="toggle()">Toggle</button>

<div class="element"></div>

<script>
function toggle() {
  const element = document.querySelector('.element');
  element.classList.toggle('active');
}
</script>
.element {
  will-change: height;
  transition: height 0.5s ease-in-out;
  height: 0;
  overflow: hidden;
}

.element.active {
  height: auto;
}
<button onclick="toggle()">Toggle</button>

<div class="element"></div>

<script>
function toggle() {
  const element = document.querySelector('.element');
  element.classList.toggle('active');
}
</script>
@keyframes height-change {
  from {
    height: 0;
  }
  to {
    height: auto;
  }
}

.element {
  animation: height-change 0.5s ease-in-out;
  height: 0;
  overflow: hidden;
}

.element.active {
  animation-play-state: running;
}
<button onclick="toggle()">Toggle</button>

<div class="element"></div>

<script>
function toggle() {
  const element = document.querySelector('.element');
  element.classList.toggle('active');
}
</script>
.element {
  height: calc(100vh - 50px);
  transition: height 0.5s ease-in-out;
}

.element.active {
  height: auto;
}

これらのコードを参考に、目的に合った方法で height: 0; から height: auto; へのアニメーションを実装してみてください。




CSS Grid レイアウトを利用することで、JavaScript を使用せずに要素の高さを自動的に調整できます。

<div class="grid-container">
  <div class="element"></div>
</div>
.grid-container {
  display: grid;
  height: 100vh;
}

.element {
  grid-area: 1 / 1;
  height: 0;
  overflow: hidden;
}

.element.active {
  height: auto;
}

flexbox レイアウトを利用することで、height: auto; を設定した要素の高さを、親要素の残りのスペースに合わせて自動的に調整できます。

<div class="flex-container">
  <div class="element"></div>
</div>
.flex-container {
  display: flex;
  height: 100vh;
}

.element {
  flex: 1;
  height: 0;
  overflow: hidden;
}

.element.active {
  height: auto;
}

JavaScript を使用することで、より高度なアニメーションを作成できます。

<button onclick="toggle()">Toggle</button>

<div class="element"></div>

<script>
function toggle() {
  const element = document.querySelector('.element');
  element.classList.toggle('active');

  if (element.classList.contains('active')) {
    // アニメーション処理
  } else {
    // アニメーション処理
  }
}
</script>

これらの方法は、それぞれメリットとデメリットがあります。詳細は以下の記事を参照してください。

height: 0; から height: auto; へのアニメーションは、さまざまな方法で実装できます。目的に合った方法を選択して、アニメーション効果を表現してください。


css css-transitions


印刷時にテーブルヘッダーを繰り返す方法

このチュートリアルでは、CSSとCSSテーブルを使用して、印刷モードでテーブルヘッダーを繰り返す方法を説明します。方法以下の2つの方法があります。thead 要素の display プロパティを table-header-group に設定する...


CSSのbackground-colorプロパティを使ってhr要素の色を変える

HTMLでは、<hr>タグを使って水平線を引くことができます。このタグには、color属性を使って色を指定することができます。上記のように記述すると、赤い水平線が引かれます。CSSHTML5では、color属性は非推奨になりました。代わりに、CSSを使って色を指定するのが一般的です。...


CSSでスクロールバーをカスタマイズしてWebサイトをより魅力的にする

HTMLファイルCSSファイルHTMLでDiv要素を作成するまず、スクロールバーを表示したいコンテンツを囲むDiv要素を作成する必要があります。CSSでスクロールバーをカスタマイズする次に、CSSファイルを使用してスクロールバーの外観をカスタマイズします。以下のプロパティを使用して、スクロールバーの色、幅、高さ、サムスライダーなどを変更できます。...


ARIA属性とJavaScriptを使用して要素の役割を強化する

HTML には、さまざまな役割を持つ要素が定義されています。例えば、見出し (<h1>、<h2> など)、段落 (<p>)、リスト (<ul>、<ol>)、ボタン (<button>)、ナビゲーションメニュー (<nav>) などがあります。これらの要素は、ページの構造と内容を伝えるのに役立ちます。...


【徹底解説】CSSでonclick効果を実現する方法!JavaScriptとの連携も紹介

方法HTML要素に onclick 属性を追加し、JavaScript関数を呼び出す。JavaScriptmyFunction 関数を作成し、クリック時に実行したい処理を記述する。CSS必要に応じて、要素の初期状態をスタイルシートで設定する。...