なぜ今、width: fit-content
を知るべきか?
CSSのwidth: fit-content
は、「中身のサイズに応じて要素の幅を自動調整したい」ときに使える非常に便利なプロパティ値です。
従来はdisplay: inline-block
やJavaScriptによる幅調整が必要だったケースが、今ではたった一行でスッキリ解決できます。
しかも、バッジUI・動的メニュー・ラベル・レスポンシブ対応など、実案件で使えるシーンも豊富!
このブログ記事では、以下の流れで初学者~中級者向けに完全解説していきます。
1. width: fit-content
とは?コンテンツにぴったり幅を合わせる魔法のプロパティ
CSSにおけるwidth: fit-content
は、その名の通り「中身にぴったり幅を合わせる」という機能です。
イメージとしてはこうです:
+-----------------------+
| Hello, world! 👋 |
+-----------------------+
↑ このテキストの幅に合わせて要素が決定される
.box {
display: block;
width: fit-content;
background-color: #f0f0f0;
padding: 8px 12px;
border-radius: 6px;
}
block
要素であっても、幅が100%にならず中身にフィットするというのが最大の特徴です。
2. min-content
やmax-content
との違いとは?
/* 300pxを上限に、フィットする幅に調整 */
.box {
width: fit-content(300px);
}
このように、fit-content()
関数を使うことで最大幅制限付きフィットも可能です。
3.実践コード:UIパーツでの使い方
<span class="badge">New</span>
.badge {
display: inline-block;
width: fit-content;
padding: 4px 8px;
background-color: #007BFF;
color: white;
border-radius: 999px;
font-size: 14px;
}
テキスト量に応じて、バッジのサイズが変わります。使い勝手抜群!
例2:ナビゲーションメニュー
<ul class="nav">
<li><a href="#">ホーム</a></li>
<li><a href="#">サービス</a></li>
<li><a href="#">お問い合わせ</a></li>
</ul>
.nav li a {
display: block;
width: fit-content;
padding: 8px 12px;
text-decoration: none;
color: #333;
background: #eee;
border-radius: 4px;
}
ナビ項目の幅がテキストに合わせてぴったり。中央配置や横並びの可変メニューに最適です。
注意点:落とし穴&よくある間違い
fit-content
は親要素が制約のないときに真価を発揮します。親に display: flex;
+ flex-grow: 1;
などがあると効きません。
Internet Explorer は完全非対応!
width: fit-content;
の後ろにセミコロンを忘れると動きません(初歩的だけどよくあるミス)。
5. fit-content()
で最大幅制限をかける方法
例えば「中身に合わせたいけど、最大300pxまでにしたい」という時はこう書きます:
.box {
width: fit-content(300px); /* 300pxまで */
}
つまり、最小限の幅 + 最大限の制限が一文で書けるのです。
対応ブラウザ一覧(2025年最新版)
ブラウザ | 対応状況 |
---|
Chrome | ✅(完全対応) |
Firefox | ✅(完全対応) |
Safari | ✅(v11以降) |
Edge | ✅(Chromium以降) |
Internet Explorer | ❌(非対応) |
モダンブラウザでは安心して使用できます。
7. display: inline-block
とどう違う?
かつてのバッジUIなどは、以下のように書かれていました:
しかし、inline-block
は テキストの改行や縦揃えでバグが出やすい。
それに対して fit-content
を使えば、親が block
のままで自然にサイズ調整ができ、より柔軟でモダンな設計が可能です。
よく使われるUIパターン3選
ダイナミックなボタンラベル
JavaScriptでラベルが変わるボタンでも、常にぴったりフィットしてくれます。
カード内のアイコンとラベルのペア
アイコンの横に「ラベル」があるようなデザインで、fit-content
を使えば横幅調整が簡単。
可変データを含むラベル(価格、ポイントなど)
APIから取得するデータを動的に挿入する場合、レイアウト崩れが起こりにくいのが最大の利点!
9. まとめ:fit-content
を活かしてプロっぽいUIを!
特徴 | 内容 |
---|---|
◎ 中身に合わせて幅が変わる | デザインの柔軟性が向上 |
◎ display:blockでもOK | 無理にinline-blockにしなくて良い |
◎ CSS設計がシンプルに | 計算・メディアクエリが減る |
◎ JS不要で自動調整可能 | スマートな実装に貢献 |
△ IE未対応 | モダン開発向け。必要ならフォールバックを |