CSS3

プロパティ

grid-auto-flow

  編集:2022.07.14 by T.A.

mdn

格子アイテムの自動配置。

名前 grid-auto-flow
[row | column] || dense
初期値 row
適用対象 格子コンテナ
継承 されない
百分率 受容しない
算出値 指定されたキーワード
正準的順序 文法に従う
アニメーション型 離散的

明示的に配置されていない格子アイテムは、後述する自動配置アルゴリズムにより、格子コンテナの中の未占有の空間に 自動的に配置される。grid-auto-flow が、自動配置されたアイテムを格子の中へフローさせる正確な方法を指定する ― すなわち、自動配置アルゴリズムがどのように働くかを制御する。

<DIV style="border:1px solid red; width:200px; height:150px;
 display:grid;
 grid-auto-flow:column danse;
">
 <DIV style="grid-column-start:2; border:1px solid black">1</DIV>
 <DIV style="border:1px solid black">2</DIV>
 <DIV style="border:1px solid black">3</DIV>
 <DIV style="border:1px solid black">4</DIV>
</DIV>

<DIV style="border:1px solid red; width:200px; height:150px;
 display:grid;
 grid-auto-columns:50px;
 grid-auto-flow:column danse;
">
 <DIV style="grid-column-start:2; border:1px solid black">1</DIV>
 <DIV style="border:1px solid black">2</DIV>
 <DIV style="border:1px solid black">3</DIV>
 <DIV style="border:1px solid black">4</DIV>
</DIV>

<DIV style="border:1px solid red; width:200px; height:150px;
 display:grid;
 grid-auto-flow:row danse;
">
 <DIV style="grid-column-start:2; border:1px solid black">1</DIV>
 <DIV style="border:1px solid black">2</DIV>
 <DIV style="border:1px solid black">3</DIV>
 <DIV style="border:1px solid black">4</DIV>
</DIV>

row
各アイテムは、自動配置アルゴリズムにより[各 row が埋まる度に、必要に応じて新たな row を追加しながら]置かれていく。row も column も供されなかった場合、row と見なされる。
<DIV style="border:1px solid red; width:200px; height:200px;
 display:grid;
 grid-auto-flow:row;
">
 <DIV style="border:1px solid black">1</DIV>
 <DIV style="border:1px solid black">2</DIV>
 <DIV style="border:1px solid black">3</DIV>
 <DIV style="border:1px solid black">4</DIV>
</DIV>

<DIV style="border:1px solid red; width:200px; height:200px;
 display:grid;
 grid-template:50px 100px/70px 100px;
 grid-auto-flow:row;
">
 <DIV style="border:1px solid black">1</DIV>
 <DIV style="border:1px solid black">2</DIV>
 <DIV style="border:1px solid black">3</DIV>
 <DIV style="border:1px solid black">4</DIV>
</DIV>

column
各アイテムは、自動配置アルゴリズムにより[各 column が埋まる度に、必要に応じて新たな column を追加しながら]置かれていく。
<DIV style="border:1px solid red; width:200px; height:200px;
 display:grid;
 grid-auto-flow:column;
">
 <DIV style="border:1px solid black">1</DIV>
 <DIV style="border:1px solid black">2</DIV>
 <DIV style="border:1px solid black">3</DIV>
 <DIV style="border:1px solid black">4</DIV>
</DIV>

<DIV style="border:1px solid red; width:200px; height:200px;
 display:grid;
 grid-template:50px 100px/70px 100px;
 grid-auto-flow:column;
">
 <DIV style="border:1px solid black">1</DIV>
 <DIV style="border:1px solid black">2</DIV>
 <DIV style="border:1px solid black">3</DIV>
 <DIV style="border:1px solid black">4</DIV>
</DIV>

dense
指定された場合、自動配置アルゴリズムでは、“稠密な”収納法アルゴリズムが利用される: それは、後続の小さいアイテムにより、大きいアイテムで埋められなかった格子の“穴埋め”を試みる。そのため、アイテムは順番どおりに現れなくなり得る。

省略された場合、“疎な”アルゴリズムが利用される: 自動配置アルゴリズムは、格子の中にアイテムを置いていくときに“前に”しか進まず、決して、後戻りして穴埋めすることはない。これは、自動配置されるすべてのアイテムが ― 後続のアイテムで埋めれるような“穴”が残されていても ― “順番どおりに”現れるようにする。

<DIV style="border:1px solid red; width:200px; height:200px;
 display:grid;
 grid-auto-flow:dense;
">
 <DIV style="grid-row-start:2; border:1px solid black; color:blue">1</DIV>
 <DIV style="border:1px solid black">2</DIV>
 <DIV style="border:1px solid black">3</DIV>
 <DIV style="border:1px solid black">4</DIV>
</DIV>

<DIV style="border:1px solid red; width:200px; height:150px;
 display:grid;
 grid-template:50px 70px/40px 60px 80px;
 grid-auto-flow:danse;
">
 <DIV style="grid-column-start:2; border:1px solid black">1</DIV>
 <DIV style="border:1px solid black">2</DIV>
 <DIV style="border:1px solid black">3</DIV>
 <DIV style="border:1px solid black">4</DIV>
</DIV>

注記: このモジュールの将来レベルにおいては、[自動位置されたアイテムを単独の“既定の”升の中にまとめてフローさせる]ような値の追加が予期されている。

自動配置では、order により改変された文書順序で格子アイテムを並べる。§ 6.3

次の例では、3 本の column のいずれも、その内容に自動サイズされている。明示的に定義される row は無い。grid-auto-flow プロパティは row なので、格子の 1 本目の row から順に、必要に応じて[自動配置される格子アイテムを収容する空間に足る分の row]を追加しながら、各 row ごとに 3 本の column が探索される。

自動的な配置を利用するフォーム:

form {
  display: grid;
  /*  3 本の column を定義する。 どれも内容からサイズされ,対応する各罫には名前が付与される。 */
  grid-template-columns:
      [labels] auto [controls] auto [oversized] auto;
  grid-auto-flow: row dense;
}
form > label {
  /*  次に可用な row を自動的に見出しながら,すべてのラベルを 名前 "labels" の column に配置する。 */
  grid-column: labels;
  grid-row: auto;
}
form > input, form > select {
  /*  次に可用な row を自動的に見出しながら,すべてのコントロールを 名前 "controls" の column に配置する。 */
  grid-column: controls;
  grid-row: auto;
}

#department-block {
  /*  このアイテムを 1 本目の row の中の名前 "oversized" の column に自動配置する。
 アイテムが配置される 3 本の row にスパンする区画は、他の明示的に配置されるアイテムや区画、
あるいは、この区画に先立って自動的に配置されたどのアイテムとも、重なり合わない。 */
  grid-column: oversized;
  grid-row: span 3;
}

/*  フォームのすべてのボタンを,明示的に定義された区画の中に配置する。 */
#buttons {
  grid-row: auto;

  /*  ボタン区画を行内軸全体にスパンさせる。 */
  grid-column: 1 / -1;
  text-align: end;
}

HTML:

<form>
  <label for="姓">氏名(姓)</label>
  <input type="text" id="姓" name="name1" />
  <label for="名">氏名(名)</label>
  <input type="text" id="名" name="name2" />
  <label for="郵">〒郵便番号</label>
  <input type="text" id="郵" name="zip" />
  <label for="県">都道府県</label>
  <select type="text" id="県" name="fuken">
    <option value="東京">東京都</option>
  </select>
  <label for="市区番">市区町村・番地</label>
  <input type="text" id="市区番" name="address1" />
  <label for="号室">建物名・号室</label>
  <input type="text" id="号室" name="address2" />

  <div id="department-block">
    <label for="科">所属科</label>
    <select id="科" name="department" multiple>
      <option value="あ">あっち系</option>
      <option value="そ">そっち系</option>
      <option value="こ">こっち系</option>
      <option value="に">にっち系</option>
    </select>
  </div>

  <div id="buttons">
    <button id="cancel">取り消し</button>
    <button id="back">戻る</button>
    <button id="next">次へ</button>
  </div>
</form>

テスト
別画面に表示させて。
HTML:

ここに表示
¶[Edge]?
HTML:

ここに表示
スクリプト:


スクリプト:



表示内容:
表示内容: