
こんにちは!静岡県浜松市でWEBデザイナーをしています小瀧です。
「アコーディオンの開閉、なんか不自然じゃない?」
こんな違和感、感じたことありませんか?
一瞬でパッと開く
カクカク動く
高さが固定されていて気持ち悪い
その原因はこれです。
height: auto はアニメーションできない
これが、長年Web制作の中で
ずっと立ちはだかっていた壁でした。
だから昔はどうしていたか。
- max-heightでごまかす
- JavaScriptで無理やり制御
- transformで擬似的に動かす
正直、どれも「無理やり」です。
でも2026年。
この問題、ついにCSSだけで解決できます。
それが今回の主役、
- calc-size()
- interpolate-size
この2つです。
この記事では、
小学生でも理解できるように、
「なぜ動かなかったのか」から
「どうやって動くようになったのか」まで
具体例たっぷりで解説します。
読み終わる頃には、
“自然に開くUI”を自分で作れるようになります。
結論:autoを“計算できる値”に変えれば動く
これがすべてです。
「autoをそのまま使うな」が答えです。
なぜheight:autoは動かなかったのか?
理由はシンプル
CSSアニメーションは、
「数字」と「数字」の間を計算して動きます。
例えばこうです。
100px → 300px → OK
でも、
なぜか?
autoは“結果”であって“数値”ではないからです。
イメージで理解する
途中が作れないから、アニメーションできないというわけです。
calc-size()とは?autoを数値に変える魔法
一言でいうと
「autoを計算可能なサイズに変換する関数」です。
基本コード
.element {
height: calc-size(auto);
transition: height 0.3s;
}
これだけで、
height:autoがアニメーション可能になります。
アコーディオン例
.content {
height: 0;
overflow: hidden;
transition: height 0.4s ease;
}
.content.open {
height: calc-size(auto);
}
これで、
- スーッと開く
- 自然に閉じる
気持ちいい動きが実現します。
JavaScript不要の時代です。
interpolate-sizeとは?アニメーションの精度を上げる
これも一言で
「サイズの変化をどう補間するかを指定するプロパティ」です。
コード
.element {
interpolate-size: allow-keywords;
}
何が変わるのか?
これを使うと、
- autoなどの値も補間対象になる
- より自然な動きになる
- ブラウザがうまく計算してくれる
“いい感じに動かす”をCSSに任せられるようになります。
実務での最強パターン
これをコピペでOK
.accordion-content {
height: 0;
overflow: hidden;
transition: height 0.4s ease;
interpolate-size: allow-keywords;
}
.accordion-content.is-open {
height: calc-size(auto);
}
これが2026年の正解テンプレです。
使えるシーン
- アコーディオン
- FAQ開閉
- メニュー展開
- 詳細表示の切り替え
よくある落とし穴
- overflow:hiddenを忘れる
- transitionを指定していない
- 対応ブラウザを確認していない
まとめ
- autoはアニメーションできない
- calc-size()で解決
- interpolate-sizeでさらに自然に
“気持ちいいUI”は、細かい動きで決まります。
これからのWebデザインは、
見た目だけでなく「動きの質」が重要になります。
今回のテクニックは、
すぐに実務で使えるレベルです。
ぜひ次の案件で試してみてください。











