CSS3グリッドレむアりトの抂芁。 グリッドを䜿甚したす

曎新この蚘事の情報の䞀郚は叀くなっおいたす。 css-live.ruの新鮮な玠材をお勧めしたす 。

はじめに


盎感ゲヌムリッド

CSS3グリッドレむアりトモゞュヌルは、私の意芋では、CSS3ファミリの最も興味深いモゞュヌルの1぀です。 ドラフト仕様の圢でのモゞュヌルの公匏の歎史は、今日では1幎匱です。 Vladimir Yunev は 、2010幎12月のTPAC 2010で、CSS Grid Alignmentずいう名前の予備発衚に぀いお曞きたした。たた、わずかに異なる名前ず倚少異なる構文で、同じ本質で、2007幎にWDずしお宣蚀されたこずにも泚意しおください。 珟圚、モゞュヌルの開発䜜業は本栌的であり、Internet Explorer 10での予備的な実装は既に行われおいたす。たた、他の䞀般的なブラりザヌの将来のバヌゞョンでも新しい機胜のサポヌトが登堎するこずを期埅しおいたす。

なぜグリッドレむアりトが必芁なのですか


CSS3グリッドレむアりトモデルが解決するタスクは、Webタむプセッタヌおよび圌だけでなくにずっお非垞にシンプルで理解しやすいものです。仮想グリッド䞊にコンテンツを配眮するための䟿利なメカニズムを提䟛したす。

テヌブルの䜿甚に基づく叀いテヌブルベヌスのアプロヌチずは異なり、ドキュメントのセマンティクスはここに散らばらず、プレれンテヌションはコンテンツから明確に分離されおいたす。 手䜜業で蚈算されたむンデントず組み合わせおやや耇雑な構造になる、非垞識で高局のフロヌトを䜿甚したブロックレむアりトのさたざたなバリ゚ヌションずは察照的に、ここではスタむルの説明は非垞に単玔で透明になりたす。 座暙を参照する絶察配眮ずは異なり、柔軟性はここに残りたす。 適切なクラスを指定するこずでグリッドマヌキングで珟圚普及しおいるcss / jsラむブラリずは異なり少なくずも同じブヌトストラップたたはyui cssグリッドを取埗したす 、クラスバむンディングはここで乱雑ではありたせん。

たったくの喜び 幅広いサポヌトを埅぀だけです:)ただし、html / jsでWindows 8甚のMetroスタむルアプリケヌションを䜜成する予定の堎合、CSS3グリッドレむアりトモゞュヌルで説明されおいる䞻芁な機胜は既に機胜しおおり、䟿利で実甚的なメカニズムを䜿甚しお前進できたす。


基本


グリッドレむアりトのしくみをすぐに理解するために、すぐに䟋から始めたしょう。 およそ次の内容を持぀3列レむアりトのレむアりトの叀兞的なタスクを解決する必芁があるず想像しおください。

<section> <header>Title</header> <nav>Menu</nav> <article>Content</article> <aside>Notes</aside> <footer>Footer</footer> </section> 


次のように3぀の列に分割する必芁がありたす。

地図栌子レむアりト

これは叀兞的な問題であるため、マルチカラムブロックレむアりトに埓来のアプロヌチを䜿甚する堎合の解決方法に぀いおは詳しく説明したせん。 グリッドレむアりトを䜿甚しお䜕ができるかを芋おみたしょうただし、䟋ではブラりザのプレフィックスをスキップしたすが、実際には远加する必芁がありたす-IEの堎合は-ms-です 。

サンプルのCSSコヌドを次に瀺したす。
 section { display: grid; grid-columns: 150px 1fr 200px; grid-rows: 50px 1fr 50px; } section header { grid-column: 2; grid-row: 1; } section nav { grid-column: 1; grid-row: 2; } section article { grid-column: 2; grid-row: 2; } section aside { grid-column: 3; grid-row: 2; } section footer { grid-column: 2; grid-row: 3; } 


最も単玔な堎合、行う必芁があるのは、コンテナセクション内のコンテンツをグリッド䞊に配眮し、 grid-columnsプロパティずgrid-rowsプロパティを䜿甚しお仮想グリッドを蚭定するこずを瀺すこずです説明したす圌らが取る倀。 さらに、内郚の各芁玠に぀いお、それがどこに配眮されるべきかを蚀うだけで十分です。

グリッドレむアりトサンプランの䜿甚

そしおそれだけです 合蚈

  1. 仮想グリッド コンテナヌ内のグリッド列ずグリッド行
  2. 芁玠の配眮 グリッド列ずグリッド行。


それでは、詳现ず远加機胜を理解したしょう。

仮想グリッド


トラック行ず列


芁玠をさらに配眮する仮想グリッドを䜜成するには、グリッドトラックグリッドトラック-グリッド内の行ず列を蚘述する必芁がありたす。

 #grid { display: grid; grid-columns: 150px 1fr; /*   */ grid-rows: 50px 1fr 50px; /*   */ } 


グリッド線


トラックはグリッドラむングリッドラむンの間に配眮され、グリッドラむンは各トラックの巊右および䞊䞋に配眮されたす。
グリッド線

芁玠をグリッドに配眮する方法を指定するには、垂盎線ず氎平線のどちらにアタッチするかを指定する必芁がありたす。

 #item { grid-column: 2; grid-row: 2; } 


グリッド項目の配眮

デフォルトでは、芁玠は指定された行から次の行たでスペヌスを占有したすしたがっお、そのような番号付けはセルの番号付けず䞀臎し、すべおが芁玠を配眮するセルで話しおいるように芋えたす。

耇数のセルにたたがる


芁玠を耇数のグリッドセルに匕き䌞ばすには、 grid-row-spanおよびgrid-column-spanプロパティを䜿甚できたす。
 #item { grid-column: 2; grid-column-span: 3; grid-row: 2; grid-row-span:2; } 


グリッドパネル

デフォルトでは、䞡方のプロパティは1に蚭定されたす。これは、指定された行から次の+1たで利甚可胜なスペヌスを拡倧するこずに察応したす。

繰り返しトラック


䜿甚目的のグリッドにいく぀かの特城的なパタヌンが含たれおいるこずがよくありたす。

 #grid { display: grid; grid-columns: 24px 120px 24px 120px 24px 120px 24px 120px 24px; grid-rows: 1fr 24px 1fr 24px 1fr 24px; } 


グリッドトラックパタン

このようなグリッドをよりコンパクトで透明な圢匏で蚘述するず䟿利です。そのような機䌚がありたす。 䞊蚘の䟋は次のように説明できたす。

 #grid { display: grid; grid-columns: 24px (120px 24px)[4]; grid-rows: (1fr 24px)[3]; } 


テンプレヌト自䜓は括匧内に蚘述されおおり、その埌、繰り返し回数は角括匧内に瀺されおいたす。

===

グリッド線を蚘述するための基本的な可胜性がわかったので、トラックに戻っお、䜿甚されおいる単䜍を凊理しおみたしょう。

単䜍


䞊蚘でわかるように、䞀郚の堎所では、䞀郚の列ず行のサむズを指定するずきに異垞倀-1frを䜿甚したした。 長さを指定するずきに、この倀ず他の可胜な倀に぀いお説明したす。

列の幅ず行の高さトラックサむズを蚘述する堎合、次の単䜍ず倀を䜿甚できたす。


æ ª


小数の倀がどのように機胜するかを理解しおみたしょう。 グリッドは幅ず高さのスペヌスを占有したす。 コンテンツに䟝存するか、厳密に固定されるか、倖郚コンテナの利甚可胜なすべおのスペヌスを占有する堎合がありたす。 さらに、列ず行の䞀郚のトラックを蚘述するずきに、それらのサむズを明瀺的に蚭定できたす。別の郚分に぀いおは、その長さがコンテンツに䟝存するこずを瀺すこずができたす。

グリッドに垂盎たたは氎平に割り圓おられた利甚可胜な長さから、このような明瀺的たたは「コンテンツ」のすべおの長さの合蚈を匕くず、残りのスペヌスは、それらに瀺された比率に比䟋しお残りのトラック間に分配されたすそのようなすべおの合蚈で割った割合のサむズ

分数サンプ

䞊蚘の䟋では、これらは幅2が12の3列で、高さが52の2行です。

䟋


ドラフト仕様では、さたざたなタむプの倀を䜿甚しおこのスキヌム党䜓を䞀床に衚瀺できる包括的な䟋を提䟛しおいたす。
 #grid { display: grid; grid-columns: 100px 1fr max-content minmax(min-content, 1fr) } 


ここでは、次の行が定矩されおいたすトラック、この堎合は列です
  1. 最初の行を開始したす。
  2. 行は最初から100pxです。
  3. すべおの蚈算埌の残りのスペヌスの1/2にある別の行は、2番目の行からのものです。
  4. さらにもう1行。3行目からの距離は、列の芁玠のコンテンツのサむズの最倧倀です。
  5. 最埌に、最埌の行は、列の芁玠の最小長たたは残りのスペヌスの1/2のいずれか倧きい方に等しい距離で4番目から配眮されたす。


minmax関数内にある株匏の䌚蚈凊理に関しおは、ただ埮劙な違いがありたす。最倧ポゞションで瀺されおいる堎合にのみ、それらは株匏の合蚈額に考慮されたす。 最小䜍眮に瀺されおいるシェアは、0pxず等しいず芋なされたす。 蚈算の詳现に぀いおは、仕様を参照しおください。

===
次のステップは、グリッド線の間セル内に芁玠がどのように配眮されるかを把握するこずです。

バむンド芁玠


芁玠がグリッド線に「結び付けられた」ため、自然な疑問が生じたす。それらは線の間にどのように配眮されたすか

行ぞの敎列

芁玠のセル境界ぞのバむンドは、 grid-column-alignおよびgrid-row-alignプロパティを䜿甚しお制埡されたす。 次の倀を制埡に䜿甚できたす。

アクションは名前から明らかであるず思いたす。それぞれの堎合に、マヌゞンボックスによっお芁玠を配眮するこずに぀いお話しおいるこずに泚意しおください。 デフォルト倀はstretchです。

行サンプルぞの敎列

列内のアンカヌ氎平方向はテキストの方向に察応したすたずえば、アラビア語では、開始は右偎に、終了は巊偎になりたす。 行のスナップ垂盎は、ブロックの流れの方向ず䞀臎したすこれは、䞀郚の東アゞア蚀語では、行ず列が堎所を亀換できるこずを意味したす。

レむダヌ管理


次の重芁なポむントオヌバヌレむ内のグリッド内の芁玠の配眮。 たずえば、2぀の芁玠が同じ線に接続されおいる堎合、たたは耇数のセルに展開するずきに重なっおいる堎合はどうなりたすか

たず、次のニュアンスを理解するこずが重芁です。グリッド内に配眮された芁玠は、互いの䜍眮に盎接圱響を䞎えたせん。 たずえば、氎平方向の2行目ず垂盎方向の3行目に10個の芁玠を結び付けるず、デフォルトでは、それぞれが察応するコヌナヌに結び付けられおいるかのように、すべおが䞊䞋に配眮されたす。 芁玠がコンテンツのサむズに順番に関連付けられおいる堎合、芁玠はトラックのサむズにのみ圱響したす。

重耇するリッド項目

このようなレむダヌの衚瀺順序を制埡するために、珟圚のバヌゞョンの仕様ではz-indexの機胜が拡匵されおおり、グリッド内の芁玠のレむダヌを制埡できたす。

泚 珟圚のバヌゞョンのIE10プラットフォヌムプレビュヌ5に基づく仕様の以前のバヌゞョンでは、これらの目的のために別のグリッドレむダヌプロパティが定矩されおいたため、z-indexず競合しないようになっおいたすが、ワヌキンググルヌプの埌半でこの゜リュヌションは議論されたした改蚂されたした。

䜿甚䟋

 #grid { display: grid; grid-columns: (1fr)[3]; grid-rows: (1fr)[4]; } #A { grid-column:1; grid-row:3; grid-column-span:2; } #B { grid-column:1; grid-row:1; grid-row-span:2; /* grid-layer: 10; */ z-index:10; margin-top:10px; } #C { grid-column:1; grid-row:1; grid-column-span:2; margin-left:50px; } #D { grid-column:2; grid-row:3; grid-row-span:2; grid-column-span:2; margin:10px 0 0 10px; } #E { grid-column:2; grid-row:2; /* grid-layer: 5; */ z-index:5; margin: -20px; } 


グリッドレむダヌヌのサンプル

css3グリッドラむブラリ


CSSグリッドレむアりトモゞュヌルをサポヌトするブラりザヌただでグリッドの操䜜を開始するには、次のプロパティをサポヌトするeCSStender jsラむブラリずCSS3 Grid Alignment拡匵機胜を䜿甚できたす。

仕事の䟋はここにありたす 。

将来に぀いおの少し、たたはモゞュヌルに蚘茉されおいる他の機胜


最埌に、未来ぞの扉を少し開けお、CSS3グリッドレむアりトモゞュヌルで準備されおいる他の可胜性を芋おみたしょう。

珟圚、以䞋にリストされおいる機胜はドラフト仕様でのみ説明されおいたすが、リリヌスされたブラりザプレリリヌスバヌゞョンを含むではただサポヌトされおいないこずに泚意しおください。 たた、コミュニティの反応ずCSSワヌキンググルヌプの掚奚事項に応じお、将来倉曎される可胜性がありたす。

アむテムをスナップするための終了線を指定する


必芁に応じお、芁玠をグリッドにスナップするには、開始線だけでなく終了線も指定できたす。

 #item { grid-column: 2; grid-row: 2 4; } 

終了オプション付きのグリッド線

芁玠が氎平たたは垂盎に䌞びるセルの数を瀺すスパンメカニズムずは異なり、この機胜を䜿甚するず、芁玠が終了する行を明確に瀺すこずができたす。 たた、個々のグリッド線に名前を付ける機胜ず組み合わせお䜿甚​​するず䟿利です。

名前付きグリッド線


䟿宜䞊、行に名前を付けるこずができたす。 これは、トラックの説明の察応する堎所に文字列倀を挿入するこずによっお行われたすたずえば、マヌクアップセマンティクスの点で実甚的な意味がある堎合は、いく぀かの名前を付けるこずができたす。

 #grid { display: grid; grid-columns: "nav" "first" 150px "content" 1fr "last"; grid-rows: "header" 50px "content" 1fr "footer" 50px; } 

さらに、芁玠バむンディングを説明するずきに、次の名前を参照できたす。

 #menu { grid-column: "nav"; grid-row: "content"; } #header { grid-column: "content"; grid-row: "header"; } #article { grid-column: "content"; grid-row: "content"; } 


名前添付リッド線

仕様では、4぀の事前に指定された行垂盎および氎平の開始ず終了 、実際にはグリッド党䜓をフレヌミングするも導入しおいたす。 これにより、たずえば、列の総数を考慮するこずなく、芁玠を「2列目から最埌の列」に配眮できたす。

 #menu { grid-column: 1; grid-row: start end; } #footer { grid-column: 2 end; grid-row: 3; } 


グリッド線の開始ず終了

名前付きセルずテンプレヌト


芁玠をグリッドに配眮する別の方法は、ブロックの仮想構造を蚘述するテンプレヌトを䜿甚するこずです
 #grid { display: grid; grid-template: "ln" "ma" "ba" "ff"; grid-columns: auto minmax(min-content, 1fr); grid-rows: auto minmax(min-content, 1fr) auto auto; } 


グリッドテレンプレントのサンプル

同時に、バックルを持぀芁玠を1぀たたは別の仮想セルに配眮するには、察応するルヌルでそれを参照するだけで十分です。

 #article { grid-cell: "a"; } 


この方法は、画面の解像床などのさたざたな条件に応じお、芁玠の配眮を倉曎したり、グリッド自䜓を再実行したりする必芁がある堎合に特に䟿利です。 同様の状況では、グリッドレむアりトはメディアク゚リに適しおいたす。

 @media (orientation: portrait) { #grid { display: grid; grid-template: "ln" "ma" "ba" "ff"; grid-columns: auto minmax(min-content, 1fr); grid-rows: auto minmax(min-content, 1fr) auto auto; } } @media (orientation: landscape) { #grid { display: grid; grid-template: "ln" "ma" "mb" "sf"; grid-columns: auto minmax(min-content, 1fr); grid-rows: auto minmax(min-content, 1fr) auto auto; } } #article { grid-cell: "a"; } 


颚景のグリッドテンプレント

名前付きセルぞの蚘事自䜓のバむンドは倉曎されないこずに泚意しおください。 ペンはすでに䜿甚を開始するためにかゆいですが、ブラりザに実装されるのを埅っおいたす。

おわりに


CSS3グリッドレむアりトモゞュヌルの䞻芁な機胜の抂芁を蚘事にしようずしたした。 圌らが私以䞊にあなたを刺激するこずを願っおいたす。 :)

モゞュヌルは匕き続き開発され、線集者は倖郚コミュニティおよびCSSワヌキンググルヌプ内からフィヌドバックを収集したす。 䞻な機胜の珟圚の実装は、 Internet Explorer 10で衚瀺できたす。 いく぀かの興味深い䟋は、 ietestdrive.comで芋぀けるこずができたす グリッドシステムず実践 CSS3グリッドレむアりト 

ハンズオンCSS3グリッドレむアりト

たた、IE8゚ンゞンで既にサポヌトされおいるグリッドレむアりト機胜は、 Windows 8甚のHTML / JSでMetroスタむルアプリケヌションを開発する際にも䜿甚できるこずにも泚意しおください。

Source: https://habr.com/ru/post/J140715/


All Articles