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%;
}