CSS-eigenschappen gerelateerd aan grid-layout
Dit artikel legt CSS-eigenschappen uit die betrekking hebben op grid-layout.
Je kunt leren hoe je grid en inline grid kunt beschrijven.
YouTube Video
HTML voor Voorbeeldweergave
css-grid.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>CSS Properties Example</title>
7 <link rel="stylesheet" href="css-base.css">
8 <link rel="stylesheet" href="css-grid.css">
9</head>
10<body>
11 <!-- Header -->
12 <header>
13 <h1>CSS Properties For Layout</h1>
14 </header>
15
16 <!-- Main content -->
17 <main>
18 <header>
19 <h2>Layout Related Properties</h2>
20 </header>
21 <article>
22 <h3>grid</h3>
23 <section style="width: 100%; height: 350px;">
24 <header><h4>display: grid; grid-template-columns: 100px 200px auto; grid-template-rows: 100px auto 50px;</h4></header>
25 <section class="sample-view">
26 <div class="grid-box">
27 <div class="grid-item">Item 1</div>
28 <div class="grid-item">Item 2</div>
29 <div class="grid-item">Item 3</div>
30 <div class="grid-item">Item 4</div>
31 <div class="grid-item">Item 5</div>
32 <div class="grid-item">Item 6</div>
33 </div>
34 </section>
35 </section>
36 <section style="width: 100%; height: 550px;">
37 <header><h4>display: grid; grid-template-columns: 120px 1fr 80px; grid-template-rows: 100px 1fr 100px;</h4></header>
38 <section class="sample-view">
39 <div class="grid-container" style="color: #666;">
40 <header class="grid-header">Header</header>
41 <aside class="grid-sidebar">Sidebar</aside>
42 <article class="grid-content">
43 <p>Content</p>
44 </article>
45 <aside class="grid-ads">Ads</aside>
46 <footer class="grid-footer">Footer</footer>
47 </div>
48 </section>
49 </section>
50 </article>
51 <article>
52 <h3>gap</h3>
53 <section style="height: 300px;">
54 <header><h4>display: grid; gap: 30px 10px;</h4></header>
55 <section class="sample-view">
56 <div class="gap-grid-container">
57 <div>Item 1</div>
58 <div>Item 2</div>
59 <div>Item 3</div>
60 <div>Item 4</div>
61 <div>Item 5</div>
62 <div>Item 6</div>
63 </div>
64 </section>
65 </section>
66 <section>
67 <header><h4>display: flex; gap: 50px;</h4></header>
68 <section class="sample-view">
69 <div class="gap-flex-container">
70 <div>Item 1</div>
71 <div>Item 2</div>
72 <div>Item 3</div>
73 </div>
74 </section>
75 </section>
76 </article>
77 <article>
78 <h3>grid-template-areas</h3>
79 <section style="height: 350px;">
80 <header><h4>grid-template-areas: "header header" "sidebar content" "footer footer";</h4></header>
81 <section class="sample-view">
82 <div class="grid-template-areas-container">
83 <div class="grid-template-areas-header">Header</div>
84 <div class="grid-template-areas-sidebar">Sidebar</div>
85 <div class="grid-template-areas-content">Content</div>
86 <div class="grid-template-areas-footer">Footer</div>
87 </div>
88 </section>
89 </section>
90 </article>
91 <article>
92 <h3>inline-grid</h3>
93 <section>
94 <header><h4>display: inline-grid</h4></header>
95 <section class="sample-view">
96 Here is an inline grid:
97 <span class="inline-grid-container">
98 <div class="inline-grid-item">1</div>
99 <div class="inline-grid-item">2</div>
100 <div class="inline-grid-item">3</div>
101 <div class="inline-grid-item">4</div>
102 </span>
103 This is contained within a paragraph.
104 </section>
105 </section>
106 </article>
107 </main>
108</body>
109</html>
Grid-layout
grid
1.grid-box {
2 display: grid;
3 grid-template-columns: 100px 200px auto;
4 grid-template-rows: 100px auto 50px;
5 gap: 10px;
6 background-color: lightblue;
7 border: none;
8 height: 200px;
9}
10
11.grid-item {
12 background-color: lightskyblue;
13 width: 100%;
14 padding: 0;
15 text-align: center;
16 border: 2px solid black;
17}
Een grid is een layout-systeem voor het uitlijnen van elementen in tweedimensionale rijen en kolommen. Met een grid kun je eenvoudig en flexibel complexe layouts maken die moeilijk waren met traditionele float
- of position
-methoden. Flexbox blinkt uit in eendimensionale layouts, maar grid is geschikt voor tweedimensionale layouts.
- De
grid-box
-klasse past een grid-layout toe doorgrid
op te geven in dedisplay
-eigenschap. Dit element wordt een gridcontainer genoemd. - De eigenschap
grid-template-columns
specificeert de breedte van gridkolommen. In dit voorbeeld is de eerste kolom 100px, de tweede kolom 200px, en de derde kolom neemt de resterende ruimte in (auto
). - De eigenschap
grid-template-rows
specificeert de hoogte van gridrijen. De eerste rij is 100px, de tweede rij is automatisch (auto
), en de derde rij is 50px hoog. - De eigenschap
gap
stelt de ruimte tussen grid-items in. 10px ruimte toevoegen tussen kolommen en rijen.
Basis terminologie
- Een gridcontainer is een element met de
display
-eigenschap ingesteld opgrid
, en de kinderen worden grid-items. - Grid-items zijn de kindelementen die direct onder een gridcontainer worden geplaatst.
Belangrijkste grid-eigenschappen
grid-template-columns
& grid-template-rows
1.container {
2 grid-template-columns: 1fr 2fr 1fr;
3}
- De eigenschappen
grid-template-columns
engrid-template-rows
definiëren de grootte van elke kolom en rij. - Eenheden zoals
px
en%
, evenalsfr
(fractie) om een verhouding van de resterende ruimte te specificeren, kunnen worden gebruikt.- In dit voorbeeld zijn er drie kolommen en de tweede kolom is twee keer zo breed als de andere.
grid-column
& grid-row
1.container {
2 display: grid;
3 grid-template-columns: repeat(4, 1fr); /* 4 columns */
4 grid-template-rows: repeat(3, 100px); /* 3 rows */
5}
6.item {
7 grid-column: 2 / 4;
8 grid-row: 1 / 3;
9}
10/* Grid line number (3 rows & 4 columns)
11 1 2 3 4 5
121 +---+---+---+---+
13 | | o | o | |
142 +---+---+---+---+
15 | | o | o | |
163 +---+---+---+---+
17 | | | | |
184 +---+---+---+---+
19*/
-
grid-column
engrid-row
zijn eigenschappen die worden gebruikt om de positie van rasteritems te specificeren. In plaats van celnummers is de nummering gebaseerd op rasterlijnen.- In dit voorbeeld is het item geplaatst van de 2e tot de 4e verticale rasterlijn en van de 1e tot de 3e horizontale rasterlijn. Met andere woorden, het beslaat de cellen in kolommen 2 en 3, en rijen 1 en 2.
-
Rasterlijnen verwijzen naar de lijnen die rijen en kolommen verdelen binnen een rastercontainer. Rasterlijnen worden automatisch genummerd vanaf 1 en worden gebruikt als grenzen voor rijen en kolommen.
- Een raster met 4 kolommen heeft bijvoorbeeld 5 verticale rasterlijnen genummerd van 1 tot 5, en elke cel bevindt zich in het gebied tussen deze lijnen.
grid-auto-rows
& grid-auto-columns
1.container {
2 display: grid;
3 grid-template-rows: 100px 200px; /* Explicitly define 2 rows */
4 grid-template-columns: 1fr 2fr; /* Explicitly define 2 columns */
5 grid-auto-rows: 150px; /* Automatically added rows will be 150px */
6 grid-auto-columns: 100px; /* Automatically added columns will be 100px */
7}
8
9.item {
10 grid-column: 3; /* Positioned in the 3rd column (auto-generated) */
11 grid-row: 3; /* Positioned in the 3rd row (auto-generated) */
12}
grid-auto-rows
engrid-auto-columns
zijn eigenschappen die de grootte bepalen van rijen en kolommen die automatisch worden gegenereerd wanneer gridlijnen of kolommen niet expliciet worden gedefinieerd.- In dit voorbeeld zijn 2 rijen en 2 kolommen expliciet gedefinieerd, maar als er meer elementen worden toegevoegd, worden nieuwe rijen of kolommen automatisch gegenereerd volgens
grid-auto-rows
engrid-auto-columns
.
- In dit voorbeeld zijn 2 rijen en 2 kolommen expliciet gedefinieerd, maar als er meer elementen worden toegevoegd, worden nieuwe rijen of kolommen automatisch gegenereerd volgens
justify-items
& align-items
1.container {
2 justify-items: center; /* Center items horizontally */
3 align-items: center; /* Center items vertically */
4}
- Lijn grid-items horizontaal uit (
justify-items
) en verticaal (align-items
).
grid-area
1/* grid-area syntax
2grid-area: <row-start> / <column-start> / <row-end> / <column-end>;
3*/
4.item {
5 grid-area: 1 / 2 / 3 / 4;
6}
grid-area
is een eigenschap waarmee je de rijen- en kolombereiken tegelijkertijd kunt specificeren om een rasteritem te positioneren. Je specificeert de positie met behulp van de rasterlijnnummers, niet de celnummers.- In dit voorbeeld is het item geplaatst van de 1e tot de 3e horizontale rasterlijn en van de 2e tot de 4e verticale rasterlijn. Met andere woorden, het beslaat het bereik van cellen in rijen 1 en 2, en kolommen 2 en 3.
gap
1.container {
2 gap: 10px 20px; /* 10px space between rows, 20px space between columns */
3}
gap
voegt ruimte toe tussen kolommen en rijen. Je kunt de ruimte tussen kolommen en rijen ook afzonderlijk specificeren metcolumn-gap
enrow-gap
.
grid-auto-flow
1.container {
2 grid-auto-flow: column; /* Add items in the column direction */
3}
grid-auto-flow
is een eigenschap die de richting bepaalt waarin items worden geplaatst, ofwel per rij of per kolom.
Voorbeeld van complexe lay-outs.
1.grid-container {
2 display: grid;
3 grid-template-columns: 120px 1fr 80px;
4 grid-template-rows: 50px 1fr 50px;
5 gap: 10px;
6 background-color: transparent;
7 border: none;
8 height: 400px;
9}
10.grid-header {
11 grid-column: 1 / 4;
12 background-color: lightblue;
13}
14.grid-sidebar {
15 grid-column: 1 / 2;
16 grid-row: 2 / 3;
17 height: 100%;
18 background-color: lightslategray;
19 color: white;
20}
21.grid-content {
22 grid-column: 2 / 3;
23 grid-row: 2 / 3;
24 background-color: lightskyblue;
25}
26.grid-content p {
27 margin: 0;
28 padding: 0;
29 height: 260px;
30}
31.grid-ads {
32 grid-column: 3 / 4;
33 grid-row: 2 / 3;
34 height: 100%;
35 background-color: lightsteelblue;
36}
37.grid-footer {
38 grid-column: 1 / 4;
39 background-color: lightgray;
40}
Op deze manier kun je met grid een volledige webpagina-indeling maken met eenvoudige code.
- In dit voorbeeld zijn er drie kolommen (zijbalk, hoofdinhoud en advertentie) en drie rijen (kop, inhoud en voettekst).
- De header en footer beslaan de volledige breedte van de pagina, met de inhoud in het midden, en de zijbalk en advertentie aan beide zijden.
Voordelen van grids.
De voordelen van grids omvatten de volgende punten:.
- Eenvoudige tweedimensionale lay-out: Het beheren van de lay-out in zowel rijen als kolommen maakt het mogelijk om zelfs complexe lay-outs te realiseren met minder code.
- Compatibel met responsief ontwerp: Het grid-systeem maakt het eenvoudig om responsieve ontwerpen te maken die zich aanpassen aan verschillende schermformaten.
gap
eigenschap.
1.gap-grid-container {
2 display: grid;
3 grid-template-columns: repeat(3, 1fr);
4 gap: 30px 10px;
5 background-color: transparent;
6 border: none;
7 height: 200px;
8}
9
10.gap-grid-container div {
11 width: 100px;
12 background-color: lightskyblue;
13}
14
15.gap-flex-container {
16 display: flex;
17 gap: 50px;
18}
19
20.gap-flex-container div {
21 width: 80px;
22 background-color: lightgreen;
23}
De gap
eigenschap wordt gebruikt in grid- en flexbox-lay-outs om de ruimte (gaps) tussen elementen in te stellen. Met behulp van deze eigenschap kun je eenvoudig ruimte tussen kindelementen plaatsen.
- In de klasse
gap-grid-container
wordt een verticale afstand van30px
en een horizontale afstand van10px
tussen elk element ingesteld. Omdat er een raster met 3 kolommen is gemaakt metgrid-template-columns
, worden de ruimtes verticaal en horizontaal tussen elk element toegepast. In de klassegap-flex-container
wordt een afstand van50px
toegepast tussen de drie items in de flexbox.
Basis Syntax
1.container {
2 display: grid; /* or flex */
3 gap: <row-gap> <column-gap>;
4}
- De
row-gap
specificeert de afstand tussen rijen. Dit is de verticale afstand in raster- of flex-indelingen. - De
column-gap
specificeert de afstand tussen kolommen. Dit is de horizontale afstand.
Als er geen twee waarden zijn opgegeven, wordt één waarde toegepast op zowel row-gap
als column-gap
.
Voordelen van de gap
-eigenschap
De voordelen van de gap
-eigenschap omvatten het volgende:.
- Eenvoudige instellingen voor afstanden: De code om afstanden tussen kindelementen in te stellen wordt eenvoudiger, waardoor het niet meer nodig is om extra marges of opvulling tussen elementen in te stellen.
- Flexibele aanpassing: Het ondersteunt eenvoudig responsief ontwerp, waardoor flexibele ontwerpaanpassingen mogelijk zijn.
grid-template-areas
-eigenschap
1.grid-template-areas-container {
2 display: grid;
3 grid-template-columns: 1fr 2fr; /* 2 columns */
4 grid-template-rows: auto auto; /* 2 rows */
5 grid-template-areas:
6 "header header"
7 "sidebar content"
8 "footer footer"; /* In the 3rd row, the footer spans across */
9 gap: 10px;
10 height: 250px;
11}
12.grid-template-areas-container div {
13 width: 100%;
14 height: 100%;
15}
16.grid-template-areas-header {
17 grid-area: header; /* Placed in the "header" area */
18 background-color: lightblue;
19}
20.grid-template-areas-sidebar {
21 grid-area: sidebar; /* Placed in the "sidebar" area */
22 background-color: lightslategray;
23}
24.grid-template-areas-content {
25 grid-area: content; /* Placed in the "content" area */
26 background-color: lightskyblue;
27}
28.grid-template-areas-footer {
29 grid-area: footer; /* Placed in the "footer" area */
30 background-color: lightsteelblue;
31}
De eigenschap grid-template-areas
biedt een manier om gebieden binnen een rastercontainer een naam te geven en die namen te gebruiken om rasterelementen gemakkelijk te positioneren. Met deze eigenschap kunnen visueel intuïtieve lay-outdefinities worden gemaakt.
Elementen die zijn geplaatst in benoemde gebieden die zijn gespecificeerd met de eigenschap grid-template-areas
, moeten dezelfde naam toegewezen krijgen met de eigenschap grid-area
. Zelfs als elementen meerdere cellen beslaan, worden ze automatisch correct gepositioneerd.
In dit voorbeeld wordt het raster als volgt gemaakt:.
- In de eerste rij wordt "header" over twee kolommen geplaatst.
- "Sidebar" wordt links geplaatst en "content" rechts in de tweede rij.
- "Footer" wordt over twee kolommen geplaatst in de derde rij.
Basisgebruik
1grid-template-areas:
2 "area1 area2 area3"
3 "area1 area4 area5";
In de eigenschap grid-template-areas
wordt de naam van het gebied voor elke rij gespecificeerd. Door elementen in gebieden met toegewezen namen te plaatsen, kun je eenvoudig lay-outs creëren.
- In dit voorbeeld wordt een raster met 2 rijen en 3 kolommen gemaakt, en elke cel krijgt een naam zoals area1
, area2
, enzovoort.
Lege cellen definiëren met behulp van .
1grid-template-areas:
2 "header header header"
3 "sidebar . content"
4 "footer footer footer";
Als je lege cellen in je lay-out wilt hebben, kun je lege cellen weergeven met een .
(punt).
- Zoals in dit voorbeeld, door een .
te specificeren tussen sidebar
en content
, wordt de tweede kolom leeg.
Voordelen van de eigenschap grid-template-areas
De voordelen van de eigenschap grid-template-areas
omvatten de volgende punten.
- Visuele lay-out: Hiermee kun je de lay-out visueel uitdrukken, wat het ontwerp gemakkelijker te begrijpen maakt.
- Eenvoudige verplaatsing van elementen: Je kunt de lay-out van elementen eenvoudig aanpassen door de gebiedsdefinities in CSS te wijzigen zonder de HTML aan te passen.
Notities
Bij het gebruik van de eigenschap grid-template-areas
is het belangrijk om aandacht te besteden aan de volgende punten.
- Het aantal namen in elke rij moet overeenkomen met het aantal gedefinieerde kolommen.
- Als u dezelfde naam aan meerdere cellen toewijst, worden die cellen samengevoegd.
- Als u dezelfde naam toewijst aan verschillende rijen en kolommen, moet het gebied een rechthoek vormen.
inline-grid
1.inline-grid-container {
2 display: inline-grid;
3 grid-template-columns: 1fr 1fr;
4 gap: 5px;
5 background-color: lightblue;
6}
7.inline-grid-item {
8 background-color: lightskyblue;
9 width: 50px;
10 padding: 0;
11 margin: 0;
12}
inline-grid
is een van de waarden voor de eigenschap display
in CSS. Het toepassen van deze eigenschap zorgt ervoor dat het element zich gedraagt als een inline-niveau container, die intern een raster-indelingscontext creëert. In tegenstelling tot display: grid
gedraagt het zich als een inline-element in de documentstroom.
Gebruiksscenario's van inline-grid
inline-grid
is niet zo gebruikelijk als grid
, maar kan effectief worden gebruikt in specifieke scenario's.
-
Raster binnen inline-context: Nuttig wanneer je een raster naast tekstinhoud of andere inline-elementen wilt plaatsen. Bijvoorbeeld, het is handig wanneer een rasterstructuur nodig is voor knoppen, badges, labels, etc., maar je wilt inline weergeven zonder de tekststroom te verstoren.
-
Lay-outbeheer binnen inline-elementen: Zelfs wanneer complexe lay-outs nodig zijn binnen inline-elementen zoals links, knoppen of spans, kan
inline-grid
de interne structuur beheren met een rasterlay-out terwijl blokweergave wordt vermeden.
1<button class="inline-grid">
2 <span>Icon</span>
3 <span>Text</span>
4</button>
In dit geval toont de knop pictogrammen en tekst in een raster, terwijl het inline blijft in de documentstroom.
- Responsieve inline-componenten:
inline-grid
kan worden gebruikt voor kleine componenten die deel uitmaken van inline-inhoud en een rasterlay-out vereisen. Bijvoorbeeld, het is geschikt voor inline-formulieren, badges, productlabels, etc., waar je de lay-out wilt aanpassen met een raster terwijl je het inline houdt.
Uitlijning en grootte van inline-grid
1.inline-grid {
2 display: inline-grid;
3 vertical-align: middle;
4}
- Net als andere inline-elementen respecteert
inline-grid
de verticale uitlijning ten opzichte van de omliggende inhoud. Je kunt de uitlijning van het raster regelen met behulp van de eigenschapvertical-align
.
1.inline-grid {
2 display: inline-grid;
3 width: 200px;
4 height: 100px;
5}
- Wat betreft de grootte neemt een
inline-grid
-element alleen de breedte in die nodig is voor de inhoud van het raster. Indien nodig kun je expliciet de breedte, hoogte en minimale/maximale afmetingen instellen.
1.inline-grid {
2 display: inline-grid;
3 grid-template-columns: auto 1fr;
4}
Het is ook mogelijk dat de lay-out van het raster zelf de grootte van de inline-grid
-container bepaalt, en deze neiging is sterker bij het gebruik van flexibele eenheden zoals fr
, auto
en procenten.
Je kunt het bovenstaande artikel volgen met Visual Studio Code op ons YouTube-kanaal. Bekijk ook het YouTube-kanaal.