CSS の order

<ul>
  <li class="a">A</li>
  <li class="b">B</li>
</ul>
ul { display: flex; }
.a { order: 2; }
.b { order: 1; }
/* HTML は a, b の順でも、表示は b, a になる */
  • flex / grid の子要素の表示順を決める。値が小さい順に並び、同じ値なら HTML の順
  • 既定値は 0。負の値も使える
  • 変わるのは見た目の順番だけ。Tab 移動やスクリーンリーダーは HTML の順のまま
  • 2015年9月から全ブラウザで使える
  • :has(input:checked) と組み合わせると、JS なしで並び順を切り替えられる
  • CSS と JS の使い分け
    • 見た目だけ変えるなら CSS。JS の実行を待たずに効き、コードも少ない
    • 意味や中身が変わるなら JS(DOM の順番、データ取得)
    • 順番そのものに意味があるなら、order ではなく JS で DOM を並べ替える

https://developer.mozilla.org/en-US/docs/Web/CSS/order