グリッドレイアウトとは何ですか?
Grid
そのレイアウトグリッドレイアウトは新しいCSS
レイアウトモデルであり、1ページがいくつかの主要な領域に分割され、これらの領域のサイズ、位置、レベル、およびその他の関係を定義します。CSS
プログラムのレイアウトの中で最も強力であると主張しているのは、現在、唯一のCSS
2次元レイアウトです。Grid
レイアウトを使用すると、次のレイアウトと同様のデモアドレスを簡単に実現できます。
グリッドレイアウトとフレックスレイアウト
レイアウトについては、レイアウトについて考えflex
、レイアウトと同じくらいの数を提案しましflex
たがGrid
、レイアウトを知る必要はないようです。ただし、flex
レイアウトとGrid
レイアウトには大きな違いがあります。つまりflex
、レイアウトは1次元でありGrid
、レイアウトは2次元レイアウトです。flex
レイアウトは、一度に1つの次元、1つの行または1つの列の要素のレイアウトのみを処理できます。Grid
レイアウトでは、コンテナを「行」と「列」に分割してグリッドを作成します。これらの行と列に関連する位置にグリッド要素を配置して、レイアウトの目的を達成できます。
Grid
flex
ストロングのレイアウトよりレイアウト!
フレックスレイアウトの例:
グリッドレイアウトの例:
グリッドのいくつかの基本的な概念
グリッドを使用して小さな例を実装し、グリッドのいくつかの基本的な概念を示し、アドレスを示します
<div class="wrapper">
<div class="one item">One</div>
<div class="two item">Two</div>
<div class="three item">Three</div>
<div class="four item">Four</div>
<div class="five item">Five</div>
<div class="six item">Six</div>
</div>
复制代码
.wrapper {
margin: 60px;
display: grid;
grid-template-columns: repeat(3, 200px);
grid-gap: 20px;
grid-template-rows: 100px 200px;
}
.one {
background: #19CAAD;
}
.two {
background: #8CC7B5;
}
.three {
background: #D1BA74;
}
.four {
background: #BEE7E9;
}
.five {
background: #E6CEAC;
}
.six {
background: #ECAD9E;
}
.item {
text-align: center;
font-size: 200%;
color: #fff;
}
复制代码
コンテナとプロジェクト:要素を宣言するdisplay:grid
かdisplay:inline-grid
、メッシュコンテナを作成します。これを行うと、この要素の直接の子はすべてグリッドアイテムになります。.wrapper
コンテナが直接の子要素グリッドアイテムになるグリッドとしての上記の要素など。
追跡グリッド:grid-template-columns
およびgrid-template-rows
属性を使用して、行と列のグリッドを定義します。コンテナ内の水平領域は行と呼ばれ、垂直領域は列と呼ばれます。上記の図はOne
、Two
、Three
の組成One
行は、Four
あります
グリッド単位:グリッド単位は、グリッド要素の最小単位です。概念的には、実際にはテーブルのセルに非常によく似ています。上記の図One
、Two
、、Three
...Four
グリッド単位の一つであります
グリッド線:「グリッド線」と呼ばれる、グリッドを分割する線。グリッドを定義するときは、グリッド線ではなくグリッドトラックを定義することに注意してください。グリッドは、各グリッド要素を見つけることができるように番号付きのグリッド線を作成します。m列にはm + 1の垂直グリッド線があり、n行にはn +1と水平グリッド線があります。たとえば、上記の例では、4本の垂直グリッド線があります。一般的に、番号は左から右、上から下、1、2、3の順に並べ替えられます。もちろん、番号を右から左、下から上に、-1、-2、-3 ...の順序で並べ替えることもできます。
コンテナプロパティの概要
Grid
レイアウトに関連する多くの属性と値は多くのメモリを必要とします。demo
一緒に組み合わせて、サイドノックでコード側を理解し、自由な時間を使ってそれを覚えておくことをお勧めします。小さなdemo
デモンストレーションになるときに各属性を紹介します。メモリを強化するために、効果の独自の外観を変更できることをお勧めします。
Grid
レイアウト属性は2つのカテゴリに分類できます。1つはコンテナ属性で、もう1つはアイテム属性です。まず、コンテナのプロパティを見てみましょう
表示属性
要素のステートメントを介して、display:grid
またはdisplay:inline-grid
メッシュコンテナを作成します。コンテナ要素内のライン要素をdisplay:grid
条件として、船舶がブロック要素であることを宣言しdisplay: inline-grid
ます
.wrapper {
display: grid;
}
复制代码
.wrapper-1 {
display: inline-grid;
}
复制代码
grid-template-columnsプロパティとgrid-template-rowsプロパティ
grid-template-columnsおよびgrid-template-rowsプロパティのデモンストレーションアドレス
grid-template-columns
列幅プロパティ、grid-template-rows
高プロパティラインの設定、これら2つの属性Grid
はレイアウトで特に重要であり、それらの値は多様ですが、grid-template-columns
プロパティを説明するために、それらの配置はより類似しています。
固定の列幅と行の高さ
.wrapper {
display: grid;
grid-template-columns: 200px 100px 200px;
grid-gap: 5px;
grid-template-rows: 50px 50px;
}
复制代码
上記は、固定の列幅が200px 100px 200pxで、行の高さが50px50pxであることを意味します
repeat()関数:繰り返される値を単純化できます。この関数は2つのパラメーターを受け入れます。最初のパラメーターは繰り返しの数であり、2番目のパラメーターは繰り返される値です。たとえば、上記の行の高さはすべて同じです。これを実現できます。実際の効果はまったく同じです。
.wrapper-1 {
display: grid;
grid-template-columns: 200px 100px 200px;
grid-gap: 5px;
/* 2行,而且行高都为 50px */
grid-template-rows: repeat(2, 50px);
}
复制代码
自動入力キーワード:自動入力を示し、行(または列)にできるだけ多くのセルを収容できるようにします。grid-template-columns: repeat(auto-fill, 200px)
列幅が200ピクセルであることを示しますが、列数は固定されていません。ブラウザがそれに対応できる限り、要素を配置できます。コードと効果を次の図に示します。
.wrapper-2 {
display: grid;
grid-template-columns: repeat(auto-fill, 200px);
grid-gap: 5px;
grid-auto-rows: 50px;
}
复制代码
frキーワード:Grid
レイアウトには、柔軟なグリッドトラックの作成に役立つ追加の長さの単位も導入されています。fr
単位は、グリッドコンテナ内の使用可能なスペースの等しい部分を表します。grid-template-columns: 200px 1fr 2fr
最初の列の幅が200pxに設定され、残りの幅が2つの部分に分割されていることを示します。幅は、それぞれ残りの幅の1/3と2/3です。コードと効果を次の図に示します。
.wrapper-3 {
display: grid;
grid-template-columns: 200px 1fr 2fr;
grid-gap: 5px;
grid-auto-rows: 50px;
}
复制代码
minmax()関数:グリッド要素に最小サイズと最大サイズを指定したい場合があります。このminmax()
関数は長さの範囲を生成します。これは、この範囲内で長さをグリッドプロジェクトに適用できることを意味します。最小と最大の2つのパラメーターを受け入れます。grid-template-columns: 1fr 1fr minmax(300px, 2fr)
3番目の列の幅が少なくとも300pxであることを意味しますが、最大値は1番目と2番目の列の幅の2倍を超えることはできません。コードと効果は次のとおりです。
.wrapper-4 {
display: grid;
grid-template-columns: 1fr 1fr minmax(300px, 2fr);
grid-gap: 5px;
grid-auto-rows: 50px;
}
复制代码
自動キーワード:長さはブラウザによって決定されます。auto
キーワードにより、3列または2列のレイアウトを簡単に実現できます。grid-template-columns: 100px auto 100px
1列目と3列目が100pxで、長さがブラウザによって決定されることを示します。コードと効果は次のとおりです。
.wrapper-5 {
display: grid;
grid-template-columns: 100px auto 100px;
grid-gap: 5px;
grid-auto-rows: 50px;
}
复制代码
grid-row-gapプロパティ、grid-column-gapプロパティ、およびgrid-gapプロパティ
grid-row-gap属性、grid-column-gap属性、およびgrid-gap属性のデモンストレーションアドレス
grid-row-gap
属性とgrid-column-gap
属性は、それぞれ行間隔と列間隔を設定します。grid-gap
属性は両方の短縮形です。
grid-row-gap: 10px
行間隔が10pxでgrid-column-gap: 20px
、列間隔が20pxであることを示します。grid-gap: 10px 20px
達成される効果は同じです
.wrapper {
display: grid;
grid-template-columns: 200px 100px 100px;
grid-gap: 10px 20px;
grid-auto-rows: 50px;
}
复制代码
.wrapper-1 {
display: grid;
grid-template-columns: 200px 100px 100px;
grid-auto-rows: 50px;
grid-row-gap: 10px;
grid-column-gap: 20px;
}
复制代码
上記の2つの書き込み方法は同じ効果があります。
グリッド-テンプレート-エリア
grid-areaおよびgrid-template-areasデモアドレス
grid-template-areas
属性はエリアを定義するために使用され、エリアは1つ以上のセルで構成されます
一般メッシュ要素grid-area
が一緒に使用されるこのプロパティは、一緒に紹介するためにここにあります。grid-area
属性は、アイテムが配置される領域を指定します
.wrapper {
display: grid;
grid-gap: 10px;
grid-template-columns: 120px 120px 120px;
grid-template-areas:
". header header"
"sidebar content content";
background-color: #fff;
color: #444;
}
复制代码
上記のコードは6つに分割されて.
おり、空のセルを表す記号に注意する価値があります。つまり、セルは使用されていません。
.sidebar {
grid-area: sidebar;
}
.content {
grid-area: content;
}
.header {
grid-area: header;
}
复制代码
上記のコードは、クラス.sidebar
.content
.header
要素がgrid-template-areas
定義されたsidebar
content
header
領域の上にあることを示しています
grid-auto-flowプロパティ
grid-auto-flow
属性は、自動レイアウトアルゴリズムの動作を制御し、グリッドに自動的に配置される要素がどのように配置されるかを正確に指定します。デフォルトの順序は、図の英数字で、すなわち配列、二行目が始まるその後に、すなわち最初の行を埋めるために、「最初の行」に配置されone
、two
、three
.... grid-auto-flow
プロパティによる順序によって、デフォルト値はになりrow
ます。
.wrapper {
display: grid;
grid-template-columns: 100px 200px 100px;
grid-auto-flow: row;
grid-gap: 5px;
grid-auto-rows: 50px;
}
复制代码
注意深い生徒は問題を見つけたかもしれません。つまり、5番目の項目と6番目の項目の間にギャップがあります(下の図を参照)。これは、6番目のブロックの長さが空白の長さよりも長いためです。そしてそれは底に絞られました。1つの線によって引き起こされました。実際のアプリケーションでは、この空白を適切な長さで埋めるために、次の長さが必要になる場合があります。この時間はgrid-auto-flow: row dense
、可能な限りフォームを埋めるように設定できます。コードと効果は次のとおりです。
.wrapper-2 {
display: grid;
grid-template-columns: 100px 200px 100px;
grid-auto-flow: row dense;
grid-gap: 5px;
grid-auto-rows: 50px;
}
复制代码
これはgrid-auto-flow: column
、最初の列の後に行が続くことを示すように設定できます。コードと効果を次の図に示します。
.wrapper-1 {
display: grid;
grid-auto-columns: 100px;
grid-auto-flow: column;
grid-gap: 5px;
grid-template-rows: 50px 50px;
}
复制代码
justify-items属性、align-items属性、place-items属性
Justify-items属性、align-items属性のデモンストレーションアドレス
justify-items
プロパティはセルコンテンツの水平位置(左、中央、右)をalign-items
設定し、プロパティはセルの垂直位置(上、中央、下)を設定します。
以下では、説明する例としてjustify-items属性を取り上げます。align-items属性は同じですが、方向は垂直です。それらはすべて次の属性を持っています。
.container {
justify-items: start | end | center | stretch;
align-items: start | end | center | stretch;
}
复制代码
コードの実装と効果は次のとおりです。
.wrapper, .wrapper-1, .wrapper-2, .wrapper-3 {
display: grid;
grid-template-columns: 100px 200px 100px;
grid-gap: 5px;
grid-auto-rows: 50px;
justify-items: start;
}
.wrapper-1 {
justify-items: end;
}
.wrapper-2 {
justify-items: center;
}
.wrapper-3 {
justify-items: stretch;
}
复制代码
- 開始:セルの開始エッジを揃えます
- end:セルの端の端を揃えます
- 中央:セルの内側を中央に配置します
- ストレッチ:セルの幅全体を占めるようにストレッチします(デフォルト値)
justify-content属性、align-content属性、およびplace-content属性
Justify-content属性、align-content属性のデモアドレス
justify-content
属性は、コンテナ内のコンテンツ領域全体(左、中央、右)の水平位置であり、align-content
属性は、コンテンツ領域全体(上、中央、下)の垂直位置です。それらはすべて次の属性値を持っています。
.container {
justify-content: start | end | center | stretch | space-around | space-between | space-evenly;
align-content: start | end | center | stretch | space-around | space-between | space-evenly;
}
复制代码
justify-content
説明する例としての次のプロパティでは、align-content
属性同様に、方向のみが垂直方向です。
- start-コンテナの開始境界を揃えます
- コンテナの端の境界をend-align
- center-コンテナの中心
.wrapper, .wrapper-1, .wrapper-2, .wrapper-3, .wrapper-4, .wrapper-5, .wrapper-6 {
display: grid;
grid-template-columns: 100px 200px 100px;
grid-gap: 5px;
grid-auto-rows: 50px;
justify-content: start;
}
.wrapper-1 {
justify-content: end;
}
.wrapper-2 {
justify-content: center;
}
复制代码
- space-around-各アイテムの両側のスペースは同じです。したがって、アイテム間のスペースは、アイテムとコンテナの境界間のスペースの2倍になります。
- space-between-アイテムとアイテムの間のスペースは等しく、アイテムとコンテナの境界の間にスペースはありません
- スペース-均等-アイテムとアイテムの間のスペースは等しく、アイテムとコンテナの境界の間のスペースは同じ長さです
- ストレッチ-アイテムサイズが指定されていない場合、ストレッチはグリッドコンテナ全体を占めます
.wrapper-3 {
justify-content: space-around;
}
.wrapper-4 {
justify-content: space-between;
}
.wrapper-5 {
justify-content: space-evenly;
}
.wrapper-6 {
justify-content: stretch;
}
复制代码
grid-auto-columnsプロパティとgrid-auto-rowsプロパティ
grid-auto-columnsプロパティとgrid-auto-rowsプロパティのデモアドレス
grid-auto-columns
プロパティとgrid-auto-rows
以前のプロパティについて話し、暗黙的および表示グリッドの概念を見てください
暗黙的およびグリッドを表示:明示的に含まれているグリッドgrid-template-columns
とgrid-template-rows
行と列の属性が定義されています。グリッド定義の外に何かを配置した場合、またはコンテンツの量のためにより多くのグリッドトラックが必要な場合、グリッドは暗黙のグリッドに行と列を作成します
追加のグリッド(つまり、上記の暗黙的なグリッド)の場合、その列の幅と行の高さは、grid-auto-columns
プロパティとgrid-auto-rows
プロパティの設定になります。そして彼らの言い回しgrid-template-columns
とgrid-template-rows
同じ。これらの2つの属性を指定しない場合、ブラウザはセルのコンテンツのサイズに完全に基づいて新しいグリッドの列幅と行高さを決定します
.wrapper {
display: grid;
grid-template-columns: 200px 100px;
grid-template-rows: 100px 100px;
grid-gap: 10px 20px;
grid-auto-rows: 50px;
}
复制代码
grid-template-columns
属性とgrid-template-rows
属性は2つの行と2つの列のみを指定しますが、実際には9つの要素があり、暗黙のグリッドがあります。することでgrid-auto-rows
、グリッド線の暗黙的には50px高さを指定することが
プロジェクト属性の紹介
grid-column-startプロパティ、grid-column-endプロパティ、grid-row-startプロパティ、grid-row-endプロパティ
グリッドアイテムが配置されている4つの境界線と、配置するグリッド線をそれぞれ指定して、アイテムの位置を指定できます。
- grid-column-startプロパティ:左側の境界線が配置されている垂直グリッド線
- grid-column-endプロパティ:右の境界線が配置されている垂直グリッド線
- grid-row-startプロパティ:上部の境界線が配置されている水平グリッド線
- grid-row-endプロパティ:下の境界線が配置されている水平グリッド線
.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 20px;
grid-auto-rows: minmax(100px, auto);
}
.one {
grid-column-start: 1;
grid-column-end: 2;
background: #19CAAD;
}
.two {
grid-column-start: 2;
grid-column-end: 4;
grid-row-start: 1;
grid-row-end: 2;
z-index: 1;
background: #8CC7B5;
}
.three {
grid-column-start: 3;
grid-column-end: 4;
grid-row-start: 1;
grid-row-end: 4;
background: #D1BA74;
}
.four {
grid-column-start: 1;
grid-column-end: 2;
grid-row-start: 2;
grid-row-end: 5;
background: #BEE7E9;
}
.five {
grid-column-start: 2;
grid-column-end: 2;
grid-row-start: 2;
grid-row-end: 5;
background: #E6CEAC;
}
.six {
grid-column: 3;
grid-row: 4;
background: #ECAD9E;
}
复制代码
上記のコードでは、クラス.two
グリッドプロジェクトが配置されています。垂直グリッド線は2から4で、水平グリッド線は1から2です。それらの中で、それは.three
競合します(垂直グリッド線は3から4であり、水平グリッド線は1から4です)。あなたはz-index
彼らの階層を決定するために設定することができます
グリッドエリアプロパティ
grid-area
属性は、上記の紹介でgrid-template-areas
言及されている場合、特定の拡張がなくなった地域のプロジェクトを指定します。特定の参照を使用すると、アドレスが示される場合があります。
grid-areaおよびgrid-template-areasプロパティのデモアドレス
justify-self属性、align-self属性、place-self属性
justify-self属性/ align-self属性/ place-self属性のデモアドレス
justify-self
水平位置(左、右)のセルコンテンツのjustify-items
プロパティ。プロパティの使用はまったく同じですが、単一のプロジェクトにのみ作用します。
align-self
このプロパティは、セルコンテンツの垂直位置(上、中、下)を設定します。これは、align-itemsプロパティの使用法とまったく同じであり、単一のアイテムにのみ影響します。
どちらも非常に似ており、ここではjustify-self
属性表示align-self
属性のみを取ります同様に、垂直方向にのみ作用します
.item {
justify-self: start | end | center | stretch;
align-self: start | end | center | stretch;
}
复制代码
.item {
justify-self: start;
}
.item-1 {
justify-self: end;
}
.item-2 {
justify-self: center;
}
.item-3 {
justify-self: stretch;
}
复制代码
- 開始:セルの開始エッジを揃えます
- end:セルの端の端を揃えます
-
中央:セルの内側を中央に配置します
-
ストレッチ:セルの幅全体を占めるようにストレッチします(デフォルト値)
グリッドの実際の戦闘-レスポンシブレイアウトの実現
上記の紹介の後、グリッドが非常に強力であることが誰もが理解できると思います。中央揃え、2列のレイアウト、3列のレイアウトなど、いくつかの一般的なCSSレイアウトは簡単に実装できます。グリッドレイアウトがレスポンシブレイアウトを実装する方法を見てみましょう
frは等しい除算応答を実現します
fr
コンテナの使用可能なスペースを必要な数の等分割スペースに分割できる等分割ユニット。この機能を使用すると、均等に分割された応答を簡単に実装できます。grid-template-columns: 1fr 1fr 1fr
コンテナが3つの等しい部分に分割されていることを示します
.wrapper {
margin: 50px;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 10px 20px;
grid-auto-rows: 50px;
}
复制代码
繰り返し+自動調整-列幅を固定し、列数を変更します
レイアウトは簡単に実現できるGrid
ように、アリコートレイアウトだけがレイアウトではありませんflex
。その後、より高度なレスポンシブを検討してください。
上記の例は常に3列ですが、グリッドで列の幅を固定し、コンテナーの幅に応じて列の数を変更できるようにすることがよくあります。今回は、上記のrepeat()
機能とauto-fit
キーワードを使用できます。grid-template-columns: repeat(auto-fit, 200px)
固定列幅が200pxで、数値が適応可能であることを示します。収容できる限り、上向きに配置されます。コードと効果は次のように実装されます。
.wrapper {
margin: 50px;
display: grid;
grid-template-columns: repeat(auto-fit, 200px);
grid-gap: 10px 20px;
grid-auto-rows: 50px;
}
复制代码
繰り返し+自動適合+ミニマックスは右側の空白を削除します
上で見た効果では、通常、右側に空白があります。これは、私たちが見たくないものです。列の幅も特定の範囲内で適応できると便利です。minmax()
この関数は、これを行うのに役立ちます。このgrid-template-columns: repeat(auto-fit, 200px)
変更grid-template-columns: repeat(auto-fit, minmax(200px, 1fr))
は、予備のアリコートが一緒にある場合、列幅が少なくとも200pxであることを示しています。コードと効果は次のとおりです。
.wrapper {
margin: 50px;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-gap: 10px 20px;
grid-auto-rows: 50px;
}
复制代码
繰り返し+自動適合+ minmax-span-denseは空室の問題を解決します
すべてが順調に進んでいるように見えますが、ある日UIではspan
、スパンを実行してグリッドプロジェクトのキーワードを設定し、grid-column-start: span 3
3つのグリッドプロジェクトのスパンを示すことで、各グリッド要素の長さが同じにならない場合があります。具体的なコードと効果は次のとおりです。
.item-3 {
grid-column-start: span 3;
}
复制代码
いいえ、なぜ右側に空白があるのですか?オリジナルの長さが長すぎて手放せないものがありますが、今回はdense
キープレイに。grid-auto-flow: row dense
空白を残さずに可能な限り埋める手段、コードと効果は次のとおりです。
.wrapper, .wrapper-1 {
margin: 50px;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-gap: 10px 20px;
grid-auto-rows: 50px;
}
.wrapper-1 {
grid-auto-flow: row dense;
}
复制代码
グリッドレイアウトの互換性
最後に、Grid
互換性の問題のレイアウトについて説明します。caniuseでは、次のような結果が得られます。全体的な互換性も良好ですが、IE10以下ではサポートされていません。個人的な提案は会社の内部システムで使用するのに問題ではありませんが、目次は今のところ適切ではないかもしれません