CSSのグリッドレイアウト


あなたは病気やユーザーインターフェイスを設計する方法の疲れですか?それは通常のように神経や刺激なしで、スケッチのような本当に簡単な方法でウェブサイトを手配するようになるか想像してください.すべての画面の幅に基づいて再設計する能力をスケッチ.
私はあなたが何を考えているかを知っています.さて、私は同じ意見を持っていました.畝
それからCSSグリッドレイアウトを発見しました.畝

ウェブサイトの整理の簡単な歴史。


私は、あなたの多くがFlexboxの前に時代を覚えていないと思います.最初に、我々は痛みを感じたテーブルを使いました.それから、我々はフロート、位置、インラインブロックと他の多くの奇妙なハックを使用していた.しかし、それらのすべては多くの短所を持っていました.畝
最後に、2009年には、一般的にフレックスボックスとして知られているCSSのフレキシブルボックスのレイアウトがリリースされました.Flexboxを使用してウェブサイトを手配するのは比較的簡単ですが、それは一次元レイアウトだけを助けています.そして、数年後にCSS Gridレイアウトが公開されました.

テーブルデザインに戻りますが、モダンでよりシンプルな方法で。


グリッドは、我々はすべてのbuilding websitesされている限り、さまざまなハッキングを使用して対処してきたレイアウトの問題を解決するために作成された最初のCSSモジュールの一つです.これは、2次元グリッドシステムのデザインのレイアウトが、はるかにシンプルで、より直感的です.CSSのグリッドで応答Webデザイン?心配しないでください-それはこれまでより単純です.このWebレイアウトモデルは、ユーザーインターフェイスをデザインする方法を変更しました.
<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
  <div class="item">10</div>
  <div class="item">11</div>
  <div class="item">12</div>
</div>
.container {
  display: grid;
  grid-gap: 10px;
  grid-auto-rows: 100px;
  grid-template-columns: repeat(4, 1fr);
}

魔法のように見える?そうでない.何が起こったのか説明しましょう.
クラスコンテナーは'グリッド'を表示値として設定しました.現在、このブロックの中のすべての第1のレベル子供は、容器にセットされる特性に依存します.畝
グリッドギャップは、コンテナチャイルズの間のスペース以外の何もありません.これは自動的に別の画面(RWD)で更新されます.あなたは、それが前にこれをしていた方法を覚えていますか?二度と.
この例で使用される最後の2つのプロパティは、トラックがどのように見えるかを指定することです.設定方法は二つあります.
グリッドテンプレート行/列
グリッドオート行/列
テンプレートの方法では、垂直/水平トラックとそのサイズの正確な数を指定する必要があります.例えば、
グリッドテンプレート行:100 px 200 px 100 px
グリッドテンプレート列畝
最初の3行は指定された高さを持ち、残りは自動的に設定されます.すべての行が2列- 100 px幅をそれぞれがあります.
スタイルシートの場合、' template 'という単語は' auto 'に置き換えられます.
おそらく'トラック'のようないくつかの用語を使用していることに気づいたでしょう.あなたはCSSのグリッドの周りに一度以上の様々な新しいフレーズに遭遇するので、私は基本的な概念にご紹介しましょう.

CSSグリッド:基本用語


グリッドコンテナ-表示する要素:グリッド;適用されるすべてのグリッド項目の直接親.
グリッドアイテム-グリッドコンテナの子.
グリッドライン-グリッドの構造を構成する分割線;垂直または水平にすることができます.
グリッドトラック-グリッド線間のスペース;水平または垂直にすることができます強調表示されたグリッドトラックは、行2および3の間にある.


グリッドセル-グリッド上の最小単位;グリッド線間のスペース表セルのように;強調グリッドセルは、行線2および3と列線2および3の間にある.

グリッドエリア-グリッドの任意の領域、4グリッド線で囲まれて;多くのグリッドセルを含めることができます.強調されたグリッド領域は、行線2および4と列線2および5の間にある.

CSSグリッド関数


を、私はあなたが何を考えている知っている.すべてが優れているようですが、トラックを定義する多くの時間と空間を取った.あなたが10のコラムを持つならば、何が起こるかについて見ましょう.
グリッドテンプレート列:100 px 200 px 100 px 200 px 100 px 100 px 200 px 200 px 200 px 200 px
本当に悪いですね.涼しいものは格子機能です.さて、こう考えましょう.
グリッドテンプレート列:リピート(5、100 px 200 px);
リピート機能を使用することで、コードを書く代わりにコードを生成できます.Utilは2つのパラメータを必要とします.最初のものは、私たちが望むトラック数、2番目のものです.
minmax,min,maxの2つの機能もあります.

自由空間単位


あなたは既にCSSグリッドを使用している場合は、おそらく、あなたがサイト幅の100 %を取った、いくつかの列を宣言したときに、おそらく、あなたの状況に会ったグリッドギャップを定義し、水平スクロールが表示されたことがわかりました.
私は気持ちを知っている.そして,この問題を解決するために,「fr」単位で固定幅を置き換える解を見出した.例えば、
置き換えましょう
グリッドテンプレート列:繰り返し
with
グリッドテンプレート列:リピート(4、1 fr);
閉じるこの動画はお気に入りから削除されています.開発者はこれらの奇妙なユニットを使用していたが、彼らの多くはそれが本当に何かを説明することができませんでした.それから、私はそれが魔法の単位であるとわかりました.どのくらいの幅を既存のコンテンツでは、固定サイズのトラックで、グリッドギャップで撮影されているを見る魔法ユニット.その後、残りのスペースは比例して分割されます-どのように多くのトラックを使用して' fr '単位.そういうわけで、フロントエンド開発者はそれを「自由な宇宙単位」と呼びました.

グリッドとグリッド領域を使用して最初の応答レイアウト。


下のコードを見てください.
<div class="container">
  <div class="item item5">P5</div>
  <div class="item footer">FOOTER</div>
  <div class="item item1">P1</div>
  <div class="item item2">P2</div>
  <div class="item item3">P3</div>
  <div class="item header">HEADER</div>
  <div class="item item4">P4</div>
</div>
それはひどい見るか.はい、私は同意します、しかし、それはCSS格子の適度さに関してより広い展望をします.今回は結果をチェックします.畝

私はあなたが何を考えているか知っています.どのように多くの行をレイアウトには、色なしで、唯一のサイズとブロックの位置を書いていたと思います.100以上?200あなたをショックさせてください-およそ10だけ.
.container {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  grid-auto-rows: 100px;
  grid-gap: 10px;
 
  grid-template-areas:
    "header header header header header header"
    ". i1 i2 i2 i3 ."
    ". i1 i2 i2 i3 ."
    ". i4 i5 i5 i3 ."
    "footer footer footer footer footer footer";
}
「どうだい?」私がそれを発見したとき、これらの考えは私に同行しました.私はすでに最初のプロパティを説明したので、グリッドテンプレート領域に焦点を当てましょう.これは、グリッドレイアウトのマッピングです.このプロパティを使用すると、グリッドコンテナー上でレイアウト全体を作成できます.
したがって、この例では、最初の行全体がヘッダによって占有されることを指定します.次の行では、最初と最後の列は空になります(ドット記号は空になります).それはとても簡単ですね.畝
ああ、私は名前について忘れました.それはどんな魔法でもない.
.header { grid-area: header; }
.item1 { grid-area: i1; }
したがって、スクリーン幅に応じてページ全体のレイアウトを再定義することもできます.
@media (max-width: 1024px) {
  .container {
    grid-template-columns: repeat(4, 1fr);
    grid-template-areas:
      "header i1 i1 i1"
      "header i2 i3 i4"
      "header i5 i5 i4"
      "header footer footer footer";
  }
}

結論


CSSのグリッドは、位置の項目に近代的な方法です.これは、テーブルに似て動作します-私たちは、列の数を定義することができます行と“マージ”個々のセル.しかし、CSSグリッドは、私がこの記事でカバーしていない多くの他の、より高度な機能を持っており、それは非常に位置決め要素に有用です.