≪ Today I learned. RSS購読
公開日
タグ
CSS
著者
ダーシノ

width:100%の代わりにwidth:stretchを使う

width:100%marginを組み合わせたときに、親要素の幅を超えてしまうことがある。その場合、margin分を減算してwidthに設定する必要がある。

.button {
  margin-inline: 1rem;
  width: calc(100% - 2rem);
}

そんなときに width:stretchを使うと、marginの計算なしで親要素の幅に合わせられる。 ただし、執筆時点ではChrome 138/Edge 138のみサポートしている。Firefoxは-moz-available、Safariは-webkit-fill-availableのベンダープレフィックス付きのキーワードが必要。

.button {
  margin-inline: 1rem;
  width: stretch;
  width: -moz-available; /* Firefox */
  width: -webkit-fill-available; /* Safari */
}

デモ

追記: 2025-06-25

状況によるため一概には言えないが、 コンポーネント自体にmarginを持たせるとコンポーネントの外側に影響を与えるため再利用性が低くなる。 そのため、個人的には親要素にpaddingを設定したい。

.container {
  padding-inline: 1rem;
}

.button {
  width: 100%;
}