grid-auto-columnsプロパティの説明
CSSのgrid-auto-columns
プロパティは、グリッド・レイアウトの中で暗黙的な列方向のグリッド・トラックを定義します。これは、grid-template-columns
プロパティでグリッド・トラックの寸法を明示できない場合、あるいはアイテムの数が事前に把握できず流動的な動作を期待する場合に有効です。
グリッドには、列方向のグリッド・トラックと行方向のグリッド・トラックがあり、それが交差することによってグリッド・エリアが確定します。本プロパティで操作できるのは列トラックの寸法と数です。既定値ではアイテムの横幅に関与します。
行トラックの寸法はgrid-auto-rows
で指定します。また、暗黙的なグリッドが作成される方向を決める場合は、grid-auto-flow
を使用して下さい。
grid-auto-columnsに指定できる値
<length>
- CSSで使用できる長さを表す単位付きの値です。負の値は使用できません。
<percentage>
- コンテナの寸法を基準にした割合を示す値です。コンテナのインライン方向の寸法が不定の場合は、
auto
と同等の効果となります。負の値は使用できません。 <flex>
fr
の単位で示すフレックス係数を用いた値です。コンテナの領域に余白があれば、残りの空間をフレックス係数の割合に比例してアイテムに分配します。max-content
- グリッド・トラックを占有しているアイテムの中で、コンテンツの寸法が最大のものを参照します。
min-content
- グリッド・トラックを占有しているアイテムの中で、コンテンツの寸法が最小のものを参照します。
minmax(min, max)
min
以上、max
以下の寸法を定義する関数です。min
よりもmax
の方が小さい場合、max
は無視されmin
として扱われます。fit-content( [ <length> | <percentage> ] )
- トラックの寸法が
auto
の最小値を上回る場合に引数で固定、それ以外はauto
として動作します。この挙動はmin(max-content, max(auto, argument))
という式を表しています。 auto
- トラックの寸法を自動で計算します。
grid-auto-columnsの使い方とサンプルコード
grid-auto-columns
プロパティの構文は以下の通りです。
/* キーワード値 */
grid-auto-columns: auto;
grid-auto-columns: min-content;
grid-auto-columns: max-content;
/* <length>値 */
grid-auto-columns: 100px;
grid-auto-columns: 20rem;
grid-auto-columns: 30vmax;
/* <percentage>値 */
grid-auto-columns: 15%;
grid-auto-columns: 33.33%;
/* <flex>値 */
grid-auto-columns: 1fr;
grid-auto-columns: 3fr;
/* minmax() */
grid-auto-columns: minmax(100px, auto);
grid-auto-columns: minmax(1fr, max-content);
grid-auto-columns: minmax(20%, 50vmax);
/* fit-content() */
grid-auto-columns: fit-content(300px);
grid-auto-columns: fit-content(16rem);
grid-auto-columns: fit-content(20%);
/* multiple track-size */
grid-auto-columns: min-content max-content auto;
grid-auto-columns: 100px 150px 300px;
grid-auto-columns: 1fr 33.3%;
grid-auto-columns: minmax(100px, auto) minmax(1fr, max-content) minmax(20%, 50vmax);
/* グローバル値 */
grid-auto-columns: inherit;
grid-auto-columns: initial;
grid-auto-columns: revert;
grid-auto-columns: unset;
grid-auto-columnsの実例
それでは実際にgrid-auto-columns
プロパティの書き方を見ていきましょう。以下の例では、コンテナにgrid-template-areas
でone
とtwo
というエリア名を定義していますが、トラックの寸法は確定していません。そこにgrid-auto-columns
を追加し、暗黙的なグリッドの大きさを指定します。エリアの数が2つであるのに対してアイテムの数が3つあるので、自動的に配置が折り返されます。
<div class="grid_box">
<div>Item</div>
<div>Item</div>
<div>Item</div>
</div>
.grid_box {
overflow: auto;
padding: 1rem;
background: #eee;
text-align: center;
resize: horizontal;
display: grid;
grid-template-areas: "one two";
grid-auto-columns: 200px;
gap: 10px;
}
.grid_box > div {
padding: .3rem;
border: 1px solid #666;
background: #09f;
color: #fff;
}
これが何の役に立つのかと言うと、grid-template
関連のプロパティでグリッド・トラックやグリッド・エリアのサイズが指定されていた場合に、そこに収まりきらなかったアイテムの大きさを個別に制御できる点です。
以下の例は、grid-template
で行の方向へ2箇所、列の方向へ2箇所のサイズ指定を行っています。そのため、4つのアイテムまでは明示された値に従って配置が行われますが、それ以上のアイテムが存在する場合は自動的に暗黙のグリッドが作成されます。何も指定しなければ、アイテムの寸法は既定値で表示されますが、grid-auto-columns
で幅を確定させておくと、製作者側の期待通りの寸法で表示させることができます。
<div class="grid_box">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5(暗黙)</div>
<div>6(暗黙)</div>
</div>
.grid_box {
overflow: auto;
padding: 1rem;
background: #eee;
text-align: center;
resize: horizontal;
display: grid;
grid-template: 50px 100px / 50px 100px;
grid-auto-flow: column;
grid-auto-columns: 200px;
gap: 10px;
}
.grid_box > div {
padding: .3rem;
border: 1px solid #666;
background: #09f;
color: #fff;
}