Chromium が Flexbox のギャップに直面

CSS gap プロパティは、Chromium の CSS Flexbox エンジンとマルチ列レイアウト エンジン用です。

CSS のギャップ

gap はフロー相対です。つまり、コンテンツ フローの方向に応じて動的に変化します。たとえば gap は、海外のユーザーに設定した writing-modedirection の値に応じて自動的に調整されます。これにより、コンポーネントと CSS 作成者が遭遇する間隔の課題が大幅に軽減されます。コードをさらにスケーリングする必要がある場合。

方向と書き込みモードの変更を処理する、ローカライズ サポートを示すギャップ: Codepen | ツイート

ブラウザの互換性

対応ブラウザ

  • Chrome: 57。
  • Edge: 16。
  • Firefox: 52.
  • Safari: 10.1。

ソース

用途

gap は、値として任意の CSS 長さまたは割合を受け入れます。

.gap-example {
  display: grid;
  gap: 10px;
  gap: 2ch;
  gap: 5%;
  gap: 1em;
  gap: 3vmax;
}


Gap には 1 つの長さを渡すことができます。この長さは行と列の両方に使用されます。

省略形
.grid {
  display: grid;
  gap: 10px;
}
行と列の両方を同時に設定
開きました
.grid {
  display: grid;
  row-gap: 10px;
  column-gap: 10px;
}


Gap には 2 つの長さを渡すことができます。これは行と列に使用されます。

ショートカット
.grid {
  display: grid;
  gap: 10px 5%;
}
行と列の両方を個別に一度に設定
開きました
.grid {
  display: grid;
  row-gap: 10px;
  column-gap: 5%;
}

Flexbox gap

gap が Flexbox に導入される前は、ネガティブ マージン、複雑なセレクタ、:last または :first タイプの疑似クラス セレクタ、または動的レイアウトとラップされる子セットのスペースを管理するその他の手段が戦略に含まれていました。

前回の試行

以下は、ギャップのような間隔を取るためにユーザーが使用しているパターンです。

疑似クラスセレクタ
.layout > :not(:last-child) {
  margin-bottom: 10px;
  margin-right: 10px;
}
ロボトミーを受けたフクロウ
.layout > * + * {
  margin-bottom: 10px;
  margin-right: 10px;
}
ソース

ただし、上記は gap の完全な代替ではなく、折り返しのシナリオ、書き込みモード、方向を考慮して @media または :lang() を調整することがよくあります。1 つまたは 2 つのメディアクエリを追加することはそれほど悪くないように思えますが、追加されるとレイアウト ロジックが複雑になる可能性があります。

上記の作成者は、子アイテムがすべてタップされないようにすることを意図していました。

アンチドット: ギャップ

.layout {
  display: flex;
  gap: 10px;
}

最初の 2 つの例(Flexbox gap なし)では、子要素がターゲットに設定され、他の要素からの間隔が割り当てられます。アンチドート ギャップの例では、コンテナが間隔を所有しています。各子プロセスは負担を軽減し、スペースの所有権を集中化できます。整合性の簡素化並べ替え、ビューポートの変更、要素の削除、新しい要素の追加などを行っても、間隔は一定に保たれます。新しいセレクタや新しいメディアクエリはなく、スペースのみです。

Chromium DevTools の更新

このアップデートにより Chromium DevTools が変更されています。[スタイル] ペインで grid-gapgap がどのように処理されるかに注目してください ️

テーブルで作業している 2 人の人物がいるオフィス。
Devtools には grid-gapgap の両方が表示されます。カスケードで最新の構文を使用できるように、grid-gap の下に gap が使用されています。

DevTools は grid-gapgap の両方をサポートしています。これは、gap が基本的に以前の構文のエイリアスであるためです。

新しいレイアウトの可能性

Flexbox gap を使用すると、利便性だけでなく、強力で、完璧な間隔の組み込みレイアウトを実現できます。動画と以下のコードサンプルでは、グリッドは Flexbox が実現できるレイアウトを実現できません。グリッドの行と列は、本質的に割り当てられている場合でも、同じである必要があります。

ツイート

また、このように子要素がネイティブに折り返される場合、子要素間のスペースが動的に調整されることにも注目してください。メディアクエリは、そのようなラッピングを検出してインテリジェントな調整を行うことができません。Flexbox gap は、すべての国際化でこの処理を自動的に行います。

複数列の gap

Flexbox は gap 構文をサポートしていますが、マルチ列レイアウトはより短い gap 構文もサポートしています。

article {
  column-width: 40ch;
  column-gap: 5ch;
  gap: 5ch;
}

かなりかっこいいですね。