2021.02.02

HTML・CSS

flex-growプロパティを利用した横並びのリスト

flex-growプロパティを利用して、左右にボーダーのある横並びのリストを作ります。リスト内のテキストの文字数が異なる場合でも、簡単にレスポンシブ対応できます。
デモページはこちら

まず、flex-growプロパティを利用せずに実現できるか試してみます。flexアイテムのwidthプロパティに文字数の比率で%を指定します。この場合、flexアイテムが意図した横幅になりません。

.list01 {
	display: flex;
	margin: 0 0 1em;
}
.list01 li {
	padding: 0 10px;
	text-align: center;
}
.list01 li:nth-child(1) {
	width: calc(100% / 15 * 3);
}
.list01 li:nth-child(2) {
	width: calc(100% / 15 * 4);
}
.list01 li:nth-child(3) {
	width: calc(100% / 15 * 6);
}
.list01 li:nth-child(4) {
	width: calc(100% / 15 * 2);
}

次に、flexアイテムの横幅の合計が100%になるように、flexアイテムにpadding: 0 7.6%;を指定します。この場合、画面がせまくなった時にflexアイテムのpaddingが意図した通りに縮みません。

.list02 {
	display: flex;
	margin: 0 0 1em;
}
.list02 li {
	padding: 0 7.6%;
	text-align: center;
}

次に、flexコンテナにjustify-content: space-around;を指定します。この場合、flexアイテムの横幅は伸びないため、liタグに設定したborderが意図した位置になりません。

.list03 {
	display: flex;
	justify-content: space-around;
	margin: 0 0 1em;
}
.list03 li {
	padding: 0 10px;
	text-align: center;
}

最後に、flexアイテムにflex-grow: 1;を指定します。flex-growプロパティの初期値は0ですが1にします。flex-growプロパティはflexコンテナの横幅に対してflexアイテムの横幅の合計が短くて余白がある場合、 指定に応じた比率でflexアイテムを自動的に引き伸ばして余白を埋めます。そのためflexアイテムに横幅を指定しなくても問題ありません。全てのflexアイテムのflex-growプロパティを1に設定することで、文字数に応じた横幅いっぱいの間隔に配置できます。

.list04 {
	display: flex;
	margin: 0 0 1em;
}
.list04 li {
	flex-grow: 1;
	padding: 0 10px;
	text-align: center;
}

関連記事

2021.02.19

HTML・CSS

CSSプロパティ::-webkit-scrollbarでブラウザのスクロールバーをカスタマイズ

webkit系ブラウザのSafariとChromeは、CSSプロパティの::-webkit-scrollbarでスクロールバーの見た目をカスタマイズできます。デ…

2021.07.06

HTML・CSS

background-imageプロパティを利用した高さ可変の三角形

borderプロパティで三角形を作成した場合、高さを可変にすることができません。そこで、background-imageプロパティのlinear-gradien…

2020.12.28

HTML・CSS

CSSロードアニメーションの実装【円の一部分の色を回転】

デモページはこちら 円の一部分の色が回転する動作のCSSロードアニメーションを実装します。ローダーの見た目は全てCSSで実装するため、svgは使用しません。 h…

2025.08.12

HTML・CSS

background-clipを利用したグラデーションのテキスト

background-clip: textを利用してグラデーションのテキストを表示します。デモページはこちら 以下のhtml構造で確認します。グラデーションのテ…

2020.08.19

HTML・CSS

iOS Safariのツールバーと表示エリアの挙動

iOS Safariで表示される画面下部のツールバーは、下にスクロールすると非表示になります。正確には上部のアドレスバーが小さくなり、下部のツールバーが消えます…

上に戻る