Hur man skapar en responsiv CSS Grid-layout. Tilldela områden till mallar och experiment


En gång i tiden skrev jag om en ovanlig tjänst, som är en AI för att skapa en hemsida. Att döma av de aktuella resultaten visade sig de vara "so-so", särskilt med tanke på det angivna priset. i detta avseende kommer de att vara mer effektiva.

Idag vill jag prata om en liknande till namnet, men helt annan i huvudsak "teknik" - CSS Grid! Inlägget består av flera delar:

Denna metod för att bygga layouter gör det enkelt att skapa tillräckligt flexibla platsnät med använder CSS... I framtiden kommer den med största sannolikhet att användas överallt. Om jag förstår det rätt är den perfekt för samma uppgifter som Flexbox, men till skillnad från den kan den samtidigt fungera i tvådimensionella dimensioner (kolumner och rader). Nedan erbjuder jag en översättning av artikeln, som är en slags introduktion till ämnet och innehåller enkla informativa exempel. Uppmärksamhet! Författaren till anteckningen genomför en gratis (!) kurs om CSS Grid i december, om du vill, skicka en förfrågan till hans e-post.

Också på Internet hittade jag en användbar video om ämnet. Kanske är det lättare för någon att uppfatta information så här:

Introduktion till CSS Grid

I år har denna teknik fått inbyggt stöd i Chrome, FF, Safari, så det är troligt att det kommer att bli ett populärt verktyg inom en snar framtid. Men för nu, kom ihåg att ta hand om föråldrade och eftersläpande webbläsare.

Det enklaste nätet

Det finns 2 huvudobjekt här:

  • förälder / omslag (omsluter alla inre block som utgör det);
  • barn / föremål (föremålen själva).

Här är den enklaste konstruktionen:

Omslag (display: rutnät;)

Ingenting förändras dock direkt efter det, eftersom visningsformatet inte är definierat. Du kommer att se 6 DIV som följer varandra.

Kolumner och rader

För att göra ditt rutnät tvådimensionellt måste du ange parametrarna för raderna och kolumnerna - använd alternativen rutnät-mall-rad och rutnät-mall-kolumn respektive:

.wrapper (display: grid; grid-mall-columns: 100px 100px 100px; grid-mall-rader: 50px 50px;)

Omslag (visning: rutnät; rutnät-mall-kolumner: 100px 100 pixlar 100 pixlar; rutnät-mall-rader: 50 pixlar 50 pixlar;)

Eftersom det finns tre värden för kolumnerna kommer samma nummer att genereras, därför finns det bara 2 rader. Siffrorna i pixlar i det första fallet anger bredden på elementen (100px vardera), i det andra - den höjd (50px).

Här är ett annat exempel som hjälper dig att bättre förstå hur det fungerar:

.wrapper (display: grid; grid-mall-columns: 200px 50px 100px; grid-mall-rader: 100px 30px;)

Wrapper (visning: rutnät; rutnät-mall-kolumner: 200px 50px 100px; rutnät-mall-rader: 100px 30px;)

Följande bild kommer att visas:

Placering och mått

Med denna funktion kommer du att få riktigt mycket kraftfulla förmågor för att skapa webbsidor. Låt oss säga att vi har en storlek 3x3:

.wrapper (display: grid; grid-mall-columns: 100px 100px 100px; grid-mall-rader: 100px 100px 100px;)

Omslag (visning: rutnät; rutnät-mall-kolumner: 100px 100 px 100 px; rutnät-mall-rader: 100 px 100 px 100 px;)

Om det i HTML-koden, som i vårt exempel, finns 6 DIV-element (se i början), då I detta fall endast 2 rader kommer att visas på sidan, den tredje kommer inte att fyllas i tillfälligt. Men när vi börjar tillämpa olika parametrar för blockens position och storlekar - rutnät-kolumn rutnätsrad, kommer situationen att förändras.

Vi sätter stilar till ett av objekten:

.item1 (rutnät-kolumn-start: 1; rutnät-kolumn-slut: 4;)

Objekt1 (rutnät-kolumn-start: 1; rutnät-kolumn-slut: 4;)

Det betyder att en DIV med klass item1 börjar på den första raden i kolumnen i rutnätet och slutar på den 4:e, det vill säga den fyller hela raden.

Faktiskt, nu har några objekt flyttat till den sista raden, som vi tidigare hade registrerat (3x3). Det finns ett enklare alternativ:

.item1 (rutnät-kolumn: 1/4;)

Objekt1 (rutnätskolumn: 1/4;)

.item1 (rutnät-kolumn-start: 1; rutnät-kolumn-slut: 3;) .item3 (rutnät-rad-start: 2; rutnät-rad-slut: 4;) .item4 (rutnät-kolumn-start: 2 ; rutnät-kolumn-slut: 4;)

Item1 (rutnät-kolumn-start: 1; rutnät-kolumn-slut: 3;) .item3 (rutnät-rad-start: 2; rutnät-rad-slut: 4;) .item4 (rutnät-kolumn-start: 2; rutnät-kolumn-slut: 4 ;)

Han ger oss följande bild:

Lyckades du lista ut det? I princip inte svårt, men du måste förstå att detta bara är den grundläggande delen av nyanserna i CSS Grid.

Prototyper och layoutområden med CSS Grid

Uppmärkningskoden är följande (HTML):

Behållare (display: rutnät; rutnät-mall-kolumner: upprepa (12, 1fr); rutnät-mall-rader: 50px 350px 50px; rutnätsgap: 5px;)

Om allt i princip är klart med linjer, är det nödvändigt att förtydliga med kolumner. Här i betydelsen rutnät-mall-kolumner ett rutnät skapas, som består av 12 identiska kolumner (bredd på varje = 1/12 av det totala) + 5px mellanrum mellan dem (rutnätsgap).

Lägg till rutnät-mall-områden

Alternativet ger dig ännu mer flexibilitet och fantastiska funktioner. Möjligen parameterns syntax och formatering rutnät-mall-områden ser lite ovanligt ut, men då kommer du att förstå varför allt är så här:

.container (display: grid; grid-gap: 5px; grid-template-columns: repeat (12, 1fr); grid-template-rows: 50px 350px 50px; grid-template-areas: "hhhhhhhhhhhhhhcc" "ffffffffffffffff" ";)

Behållare (display: grid; grid-gap: 5px; grid-mall-columns: repeat (12, 1fr); grid-mall-rows: 50px 350px 50px; grid-mall-areas: "hhhhhhhhhhhhhhhh" "mmcffffffffffffff" ;)

Det är en slags visuell representation av din webbplats rutnät i CSS. Alla tecken i denna parameter bildar 3 rader och 12 kolumner, definieras av sträng ovan. Varje bokstav är ansvarig för en cell. Namnen i exemplet motsvarar blocken av HTML-kod: sidhuvud (h), meny (m), innehåll (c) och sidfot (f), men du kan använda alla andra varianter.

Tilldela områden till mallar och experiment

I nästa steg länkar du "logiskt" behållarsymbolerna och DIV-elementen:

.header (rutnätsområde: h;) .menu (rutnätsområde: m;) .innehåll (rutnätsområde: c;) .sidfot (rutnätsområde: f;)

Header (rutnätsområde: h;) .menu (rutnätsområde: m;) .innehåll (rutnätsområde: c;) .sidfot (rutnätsområde: f;)

Webbplatsen kommer att visa en layout av formuläret:

Och nu börjar magin. Låt oss byta några bokstäver i parametern rutnät-mall-områden, till exempel "c" och "m" på platser:

rutnät-mall-områden: "h h h h h h h h h h h h h" "ccccccccc c c m m" "f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f

rutnät-mall-områden: "h h h h h h h h h h h h h" "ccccccccc c c m m" "f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f

Rutnätet kommer att se annorlunda ut:

Att lägga till lyhördhet till denna design ser fantastiskt ut i allmänhet. Du skulle inte göra det med HTML enbart, men allt är möjligt i CSS: ". H h h h h h h h h h." "c c c c c c c c c c m m" ". f f f f f f f f f f." ;

grid-template-areas: ". h h h h h h h h h h." "c c c c c c c c c c m m" ". f f f f f f f f f f.";

Sajten ser ut så här:

Inga skript eller HTML - bara CSS Grid magi!

Fler Grid och Flex-exempel

Senare om CSS-tricks hittade jag en annan artikel om ämnet, några av varianterna från den kan vara användbara för dig. Följ länkarna till (logga i kodblocket uppe till höger) för att se exempelarbetet på storbildsskärmen.

Klassisk webblayout

Vi har en sidhuvud och sidfot i full bredd med ett innehållsblock emellan med två sidofält. I det första fallet, när skärmen är reducerad, kommer alla objekt att förbli i samma positioner som tidigare.

Om du vill att blocken ska placeras under varandra gör du följande:

2-kolumn bloggrutnät

Låt oss säga att vi har ett stort innehållsblock och en sidofält i mitten. Koden nedan håller alla objekt på plats när sidstorleken minskas.

Den andra tekniken är att ge dem sin plats efter varandra.

Fördelning av element i bredd

Visuellt liknar exemplet ett galleri, när alla bilder går bredvid varandra i flera kolumner. När du minskar storleken visas färre och färre av dem på varje rad.

Bild inuti artikeln

Här är innehållet uppdelat i 2 delar, med ett helskärmsblock emellan.

Total. I allmänhet upptäckte jag konceptet med CSS Grid, som, om jag ska vara ärlig, var positivt imponerad - speciellt ramarna, där områdena i layouten med olika bokstäver beaktades. Naturligtvis är allt detta bara grunderna för "teknik", plus att jag inte beskrev i detalj varje parameter i koden. V sista avsnittet exempelartiklar är mer komplexa, de bör granskas noggrant. Den kombinerar både Flex och Grid. Om detta ämne är intressant, prenumerera på den första författarens kurser - E-postinlägg i den ursprungliga första eller andra anteckningen.

Har du något att lägga till i CSS Grid? - skriv tankar, råd eller skicka intressanta länkar.

I den här artikeln hittar du full kurs på CSS-rutnät. Vi kommer att analysera vad det är, vad som är annorlunda med FlexBox och hur du kan arbeta med CSS Grid.

CSS-rutnät är ett nytt tillvägagångssätt för att skapa responsiva sajter med många block placerade var som helst på sajten. Dessutom CSS Grid det finns också en teknik som är väldigt lik mesh. Vi kommer inte att förstå de minsta skillnaderna mellan dem, eftersom detta kommer att kräva en separat artikel, men vi kommer kort att beskriva de viktigaste skillnaderna.

CSS Grid kan kallas en coolare och bättre version FlexBox, eftersom FlexBox låter dig arbeta i endast ett plan: antingen skapa kolumner eller skapa rader.

CSS-rutnät låter dig göra mer eftersom de fungerar på båda plan samtidigt. Således är skapandet av responsiva webbplatsblock mycket enklare, och möjligheterna att arrangera objekt som du vill är helt enkelt oändliga.

Vi inbjuder dig att titta på hela videon om att lära dig CSS-rutnät för att omedelbart förstå essensen. CSS Grid:


  • Lektion om;

Under lektionen skapades tre sidor, du kan kopiera koden för varje sida nedan.

Första filen

CSS Grid
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima animi, tempore. Vitae consectetur voluptate inventore soluta totam iste dicta neque nesciunt a! Incidunt aliquit quae eveniet blanditiis, laudantium assumenda natus doloribus, fuga mollitia debitis dolorem, soluta asperiores accusamus. Qui, necessitatibus autem doloremque corporis eligendi dolorum natus, eius aperiam consequatur aliquid, quaerat excepturi sequi repellendus, tempora cum sed velit. En voluptates laboriosam quibusdam consequatur quas harum unde sint minus, molestiae quo?
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Suscipit, nostrum animi, aliquid consequuntur iusto esse nulla accusamus commodi perferendis deserunt ipsa quidem, illo quam minima aspernatur vero natus?

Andra filen

CSS Grid
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Lorem ipsum.
Lorem ipsum.
Lorem ipsum.
Lorem ipsum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repellendus magni atque nostrum deleniti magnam unde ad, expedita perferendis laborum aut, pariatur delectus. Deleniti dolores consequuntur sed iure ratione, laudantium exercitationem perferendis reprehenderit delectus aperiam fugiat rerum earum quidem facere aspernatur ipsam harum. Minus alias sequi inventore aspernatur expedita, odio nemo corporis consectetur labore, voluptas quasi.
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Lorem ipsum dolor sit amet, consectetur adipisicing elit.

Tredje filen

CSS Grid
Ruta 1
Ruta 2
Ruta 3
Ruta 4
Ruta 5
Ruta 6

Funktionsprincip

Att arbeta med mesh är väldigt enkelt. Algoritmen för åtgärder här är som följer:

  1. Skapa ett huvudblock och placera andra block i det ( sektion);
  2. Lägg till egenskapen display: grid till huvudblocket;
  3. CSS-rutnätsegenskaper kan nu tillämpas på alla element i huvudblocket;
  4. Lägg till olika egenskaper. Du kan göra dokumentationen för alla möjliga egenskaper;

Varje block kan ställas in på bredd, höjd, plats. Block som skapas på basis av rutnät har omedelbart adaptiv design som justerar block för olika skärmupplösningar.

På så sätt kan du skriva mindre och få mer. Vad mer kan vara coolare? Dela din erfarenhet av att använda rutnät i dina projekt i kommentarerna till den här artikeln.

Speciellt för webbplatsanvändare ger vi en praktisk lektion om användningen av 960 Grid-systemet. Föreställ dig att vi fick en layoutdesign. Först måste vi beskriva en plan för att implementera webbplatsens struktur och först därefter gå direkt till koden. Efter att ha studerat den här artikeln kommer du att vara för tuff med någon klassisk layout för Så snart som möjligt och naturlig hårfärg i många år (inget grått hår). Så här är vår design:

1. Skapa ett nät

Som du redan vet använder 960 Grid-systemet en mängd olika klasser och finns i flera smaker (12 kolumner och 16 kolumner). Huvudbehållaren, oavsett antalet kolumner, kommer alltid att vara 960px bred. För denna design kommer vi att välja ett system med 12 kolumner. Varje block i 960 Grid-systemet har en marginal på 0 10px. Detta säkerställer att vi har jämna, proportionella marginaler på 20px. För dem som är förvirrade av storleken 960px, råder jag dig att ta en titt på detta diagram. Given storlekär optimal för de allra flesta bildskärmsupplösningar. Så vi har möjlighet att skapa block med följande bredd:

  • 140 pixlar
  • 220 pixlar
  • 300 pixlar
  • 380 pixlar
  • 460 pixlar
  • 540 pixlar
  • 620 pixlar
  • 700 pixlar
  • 780 pixlar
  • 860 pixlar
  • 940 pixlar

Varje storlek har sin egen klass, vars namn är baserat på grid_X-schemat, där X är antalet kolumner. Om du behöver ett 960px-block bör du välja klassen grid_12. För att aktivera 960 Grid-systemet måste du ställa in klassen container_12 eller container 16 till den överordnade containern. Nedan finns ett litet exempel på en sida som består av 3 block. Bredden på den första är lika med bredden på 960px, de andra två är hälften så stora:

Kom ihåg att när du fyller en rad med block med klassen grid_X, se till att de inte blir fler än 12. Till exempel, som vi har - två block grid_6 + grid_6 = 12. Mindre är möjligt: ​​6, 4, 2 , etc. etc. Nu när vi har gått igenom de grundläggande principerna kan vi börja med en praktisk lektion:

2. Skapa mock-up

Låt oss försöka bygga ett diagram över vad vi behöver för layout. Först och främst behöver vi 2 block med 960px. En för logotypen, den andra för navigering. Sedan 2 block (på en rad), för en affisch och platspresentation, ett separationsblock (full bredd), 4 kolumner (på en rad), återigen ett separationsblock och en sidfot. Något som det här:

Jag tror att efter att ha tittat på bilden vet du redan vilka klasser vi behöver. Försök att plocka upp dem själv och ta en titt på koden nedan för att se till att dina tankar är korrekta:

Kom ihåg att i slutet av varje rad måste vi infoga

för normal visning i alla webbläsare. Glöm inte att inkludera 960 Grid CSS på din sida i huvudsektionen också.

Så, skelettet är klart, så det är dags att göra dekorationen. Låt oss ställa in höjden och bakgrundsfärgen för avdelarblocken. Höjden på menyblocket beror på själva menyn. Glöm inte heller att lägga till en logotyp:

Div.spacer (bakgrundsfärg: # 8FC73E; höjd: 1em;) div # navbar (bakgrundsfärg: # 8FC73E; stoppning: 10px 0;)

Här är vad vi bör skaffa:

Vi är inte alls intresserade av information nu, så du kan infoga innehåll i de centrala kolumnerna härifrån på den här sidan. Innan vi tar oss an toppen, låt oss ta itu med botten. I vår design är sidfotens bakgrund färgad grå färg... På det här ögonblicket vi kan inte implementera detta för om du kommer ihåg, finns det en fördjupning mellan blocken, vilket inte kommer att tillåta oss att helt fylla detta område. För att lösa detta problem, låt oss flytta de 3 blocken relaterade till sidfoten till separata block med id = sidfot. En detalj till: när vi använder klasser i klasser skulle det vara trevligt att ställa in alfavärden (för att indikera vilket block som kommer att vara det första och omega - för det sista):

Div # sidfot (bakgrundsfärg: # e5e5e6;)

Excellent! Vår sidfot har nu en bakgrundsfärg. Lägg till lite text till det och fortsätt till navigeringsblocket. Enligt alla lagar för moderna layoutprinciper är navigering en oordnad lista. Lägg till följande kod och stil:

  • Artiklar
  • Ämnen
  • Handla om
  • Redaktörer
  • Kontakt

Div # navbar ul (liststil: ingen; display: block; marginal: 0 10px;) div # navbar ul li (flytande: vänster; marginal: 0 1,5em; teckensnitt: fetstil 1em Arial;)

Häftigt! Allt går bra med oss. Allt som återstår är ett block med en affisch och en presentation av sajten, men innan vi börjar implementera dem vill jag säga några ord om CSS-ramverk i allmänhet.

3. CSS-ramverk kommer inte att lösa alla dina problem

Innan du börjar göra designlayout på ett CSS-ramverk bör du överväga några av nackdelarna med dessa system. När du läste den här artikeln kunde du inte låta bli att lägga märke till att reglerna för att bygga en sida är mycket strikta. Allt har sin egen fasta storlek. När du ändrar bredden på ett block måste du ändra andra. Något måste man i alla fall offra. Till exempel, vad skulle du göra om du har en 1000px design och 960 Grid låter dig skapa en maximal bredd på 960px ... Du vill ha 1000px! Utan en massiv förändring i koden är detta omöjligt att implementera. Till exempel vill en kund ha en bredare sida eller så håller en designer inte med om din implementering. Det finns ett annat problem med högtalarhöjderna. Om tre kolumner har samma bakgrundsfärg (som vi har i sidfoten), måste dessa kolumner ha samma höjd. En annan betydande nackdel: användningen av ytterligare indrag och skapandet av ramar leder till att hela layouten förstörs. För att lägga till det som behövs och inte förstöra någonting måste du kompensera för de tillagda dimensionerna. Nu ska jag visa dig hur. Låt oss börja avsluta den övre delen.

4. Översta delen

Låt oss först lösa problemet med kolumnhöjden - låt oss fixa det. Låt oss sedan skapa tomma divs i det ena och det andra blocket. De kommer att innehålla en ritning eller textinformation... Vi kommer inte att fastställa interna marginaler sedan dess du kan bryta andelen av rutnätets bredd. Låt oss lägga till lite utfyllnad till p-taggarna för att få texten att se snygg ut.

I det här fallet är det bättre att skapa en klass för stilen, inte ett ID, eftersom vi måste tillämpa det på flera block. Vid behov kommer detta också att tillåta oss att ändra höjden i 2 steg. Så här ser våra klasser ut:

Div.topSection div (kant: fast 10px # e5e5e6; höjd: 280px;) div.topSection div p (marginal: 10px;)

Häftigt! Låt oss se vad vi har:

Redo att fylla? Släpp sedan lite text i det vänstra blocket, men överdriv inte för att inte överskrida höjden. Faktum är att i verkliga projekt måste designern beräkna allt detta (antalet tecken som blockstorleken kommer att uppfylla); Innan du infogar bilden i det högra blocket måste du bestämma storleken, om du inte redan har gjort det. Detta kan göras tidigt i designprocessen eller genom FireBug. Klicka på Inspektera. Klicka på den div vi behöver. Välj fliken Layout. Efter det kommer du att se all information du behöver. Följande bild hjälper dig:

På skärmdumpen har affischen måtten 360x280. Hitta en bild och stil den:

Bild # affisch (bredd: 360px; höjd: 280px;)

Det är allt! Mallen är klar. Nu återstår bara att fylla den med riktigt innehåll och lägga den online:

5. Känn till dina alternativ

Nu när allt är klart, låt oss sammanfatta. 960 Grid tillät oss att nita en mall på 15 minuter. Häftigt? ja! Har vi testat det i IE6, IE7? Inte! Måste? Nej. Detta är bara början! Vad ska vi göra? Nu måste du visa det för kunden och titta på reaktionen. Om det passar honom, då kan du börja testa, men om inte, och kunden vill ha något mer komplicerat, då måste du skriva allt från grunden själv. Jag kommer att upprepa det igen. CSS-ramverk löser inte alla problem. Trots detta använder tusentals utvecklare dem som ett vanligt webbutvecklingsverktyg eftersom CSS-ramverk, precis som alla verktyg, har ett eget område för utbredd användning. I vilket fall som helst, om designförfrågningar inte är superspecifika (80 % av tiden), kan du spara mycket tid med att använda 960 Grid - och tid är pengar!

Den här artikeln visar hur detta i jämförelse ny teknologi, det fungerar, inte bara beskrivning av egenskaper med ytexempel.

Själva artikeln är en responsiv utökad översättning av CSS Grid Tutorial

CSS Grid Module utvecklades av CSS Working Group för att ge det bästa sättet att skapa mallar i CSS. Det fanns med i en kandidatrekommendation i februari 2017, och stora webbläsare började stödja det i mars 2017.

CSS Grid kommer snart att bli en viktig del av alla front-end-utvecklares verktygslåda. Och om du är en av dem, då måste du lära dig CSS Grid - vilket nästan säkert kommer att bli en obestridlig färdighet för alla positioner inom front-end-utveckling.

Med denna kraftfulla funktionalitet och intuitiva syntax kommer rutnätsmallar utan tvekan att förändra hur webben är byggd.

Introduktion

CSS Grid är ny modell mall optimerad för 2D-mallar. Det är den perfekta modellen för webbplatsmallar, formulär, gallerier och allt annat som kräver exakt och lyhörd positionering.

Med utvecklingen av webben i senaste åren, har utvecklingen av webbplatsmallar blivit svårare och svårare. Under webbens tidiga dagar användes HTML-tabeller ofta för mallar med flera kolumner, formulär och mer. Men denna metod har sina nackdelar. Detta innebär att presentationen måste göras på uppmärkningsnivå, så det gjordes ingen skillnad mellan presentation och innehåll. Faktum är att tabeller skapades för att innehålla tabelldata, inte för att skapa mallar. Bortsett från semantiska problem är tabellmallar inte gjorda för responsiv design.

Floats ersatte så småningom tabellmallar som den allmänt accepterade och rekommenderade metoden för att skapa mallar, eftersom de tillåter oss att placera element oavsett markering. Men även om denna metod ansågs vara en betydande förbättring jämfört med tabelllayouten, hade den också sina begränsningar. Floats var främst designade för dokumentmallar och lämpade sig inte för de komplexa applikationsmallar som nu är vanliga på webben. Flytelement är svåra att kontrollera, särskilt på enheter och visningsportar olika storlekar... Detta ledde till olika rutnätsliknande hack som blev normen, varav de flesta krävde ytterligare uppmärkning som distraherade från hela konceptet med innehållsdelning. Så CSS-arbetsgruppen letade efter en bättre lösning.

CSS Grid Model tar upp dessa problem och mer. Det låter dig skapa avancerade mallar på en bråkdel av den tid du skulle spendera med flottor och med mindre kodning.

Men självklart för detta kan man använda olika betydelser som 100px, 7em, 30% och så vidare. Du kan också tilldela namn till strängar tillsammans med deras storlekar.

rutnät-mall-kolumner: 1fr 1fr 1fr

Samma som ovan, definierar bara kolumner i rutnät.

Avslöjar en paus. Det vill säga mellanrum mellan rutnätsobjekt. Här använder vi längdenheten vw, som är relativt visningsportens bredd, men vi kan också använda 10px, 1em, etc. Grid-gap-egenskapen är en förkortning för grid-row-gap och grid-column-gap egenskaper.

Tja, den andra delen av koden tilldelar bara olika stilar till rutelementen.

#grid>

Upprepa () funktion

Du kan använda funktionen repeat () för att upprepa elementstorleksvärdedeklarationer. Till exempel, istället för att göra så här:

Rutnät-mall-rader: 1fr 1fr 1fr 1fr 1fr;

Vi kan göra det här:

Rutnät-mall-rader: upprepa (5, 1fr);

Detta kommer avsevärt att minska mängden kod du måste skriva, speciellt om du arbetar med stora och repetitiva rutnät.

Hur man skapar en webbplatsmall med CSS Grid

Grids inkluderar en intuitiv "ASCII grafisk" syntax där du praktiskt taget kan "se" mallen i koden, vilket gör det mycket enkelt att skapa och ändra din mall. Även stora förändringar kan göras på några sekunder. Denna intuitiva syntax hjälper också till med responsiv webbdesign. Att skapa olika mallar för olika enheter blir ganska trivialt när man använder rutnät.

Låt oss nu skapa en webbplatsmall som ser ut så här:

Och här är koden för denna mall:

Exempel

Rubrik
Artikel
Annonser
Sidfot

Låt oss ta en närmare titt på vår kod. HTML-uppmärkning ser ut så här:

Rubrik
Artikel
Annonser
Sidfot

Och så kommer vi att göra en rutnätsbehållare, så alla andra objekt blir rutnätsartiklar.

Låt oss nu ta en titt på ASCII-grafiken som vi pratade om tidigare.

Grid-template-areas: "header header header" "navigeringsartikelannonser" "sidfot sidfot sidfot";

Den här biten definierar vår mall. Bara genom att titta på koden kan vi se att detta är ett 3x3 rutnät (tre rader och tre kolumner). Detta ger oss fem rutnätsområden på nio rutnätsceller, eftersom vissa rutnätsområden spänner över flera celler.

Vi ser också att rubriken upptar hela den första raden med tre celler, och källaren upptar hela den nedre raden, och tar också tre celler. Navigerings-, innehålls- och reklamsektionerna delar tillsammans utrymme på den andra raden, där vart och ett av dessa element får en cell.

Vi kan nu tilldela vart och ett av dessa rutnätsområden till varje objekt:

#pageHeader (grid-area: header;) #pageFooter (grid-area: footer;) #mainArticle (grid-area: article;) #mainNav (grid-area: nav;) #siteAds (grid-area: ads;)

Grid-area-egenskapen är en förkortning för en egenskap som låter dig placera rutnätsobjekt på ett rutnät. I vårt fall syftar vi helt enkelt på namnen som vi tidigare angett i grid-mall-områden.

Det mesta av mallen har redan färdigställts. Resten av koden kommer helt enkelt att hänvisa till dimensioner, avstånd och höjder, mer generellt det dekorativa området.

Följande kod ger dimensioner för rader och kolumner:

Rutnätsmall-rader: 60px 1fr 60px; rutnät-mall-kolumner: 20% 1fr 15%;

Den första och tredje raden är båda 60px höga, och den andra raden tar upp eventuell återstående plats.

Den första kolumnen är 20 % och den tredje är 15 %. Den andra tar all återstående plats.

Ändra mall

Du kan ändra mallen helt enkelt genom att ordna om rutnätsområdena i rutnätsmallområden.

Så om vi ändrar till detta:

Grid-template-areas: "nav header header" "nav article ads" "nav footer ads";

Sedan, som ett resultat, får vi följande mall:

Du kan dock behöva justera storleken om du flyttar ett mindre rutnät till ett större.

Till exempel, för att göra detta:

Navigeringen tar nu den plats där innehållet var, därför har dimensionerna justerats. Annars skulle vi ha ett smalt innehåll och bred navigering. Så nu ser koden ut så här.

Grid-template-areas: "header header header" "article nav ads" / * Innan det fanns "nav article ads" * / "footer footer footer"; rutnät-mall-rader: 60px 1fr 60px; rutnät-mall-kolumner: 1fr 20% 15%; / * Innan dess var det '20% 1fr 15%'* /

Bygga ett responsivt rutnät

Rutnätsmallen har värden som autofyll och autopassning, vilket gör att du kan skapa ett rutnät med många spår av en specifik storlek som passar in i behållaren. Detta kan innebära att rutnätet är responsivt, vilket innebär att elementen ändrar sina positioner när du ändrar storlek på webbläsarfönstret.

Ett exempel på hur du använder Autofyll:

Exempel

1
2
3
4
5
6
7
8
9

Här är resultatet:

Koden som ansvarar för detta:

Rutnät-mall-kolumner: upprepa (autofyll, minmax (150px, 1fr));

Det ger kolumnerna en minimistorlek på 150px och ett maximum för det återstående utrymmet. Sådana spår kommer att upprepas så många gånger som behövs för att passa in i behållaren.

Funktionen Repeat () upprepar definitionen av ett spår det antal gånger som anges av den första parametern. Om du använder autofyll kommer spåren att upprepas lika många gånger tills de fyller behållaren.

Storleken på dessa spår anges i den andra parametern. I vårt fall använder vi minmax (150px, 1fr) för att indikera att den minsta kolumnstorleken är 150px och den maximala är 1fr.

Autopassning

auto-fit fungerar ungefär på samma sätt som auto-fill. Den enda skillnaden är att auto-fit kollapsar alla tomma spår i slutet av placeringen, medan auto-fill inte gör det. Det bästa sättet här är en demo med en jämförelse.

Exempel

1
2
1
2

Att använda två små rutnätselement här kommer att hjälpa till att visa hela konceptet med arbete. Autofyll lämnar tomma spår i slutet med de angivna måtten, och autopassning sträcker ut det tomma spåret, vilket leder till att spåren fylls med sträckta element för att fylla utrymmet.

Rutnät med mediafrågor

En av styrkorna med rutnät är att du kan skapa en helt annan mall på några sekunder.

Detta gör rutnät idealiska för mediefrågor. Vi kan helt enkelt tilldela om värdena i ASCII-grafik och slå in resultatet i en mediefråga.

Exempel

Rubrik
Artikel
Annonser
Sidfot

Detta är en layout med tre kolumner på en stor visningsport och krymper till en layout med en kolumn på små enheter. Således kommer detta exempel att se annorlunda ut beroende på skärmstorleken. Hur som helst, här är den relevanta koden för 3-kolumnmönstret, för breda vyportar.

Grid-template-areas: "header header header" "navigeringsartikelannonser" "sidfot sidfot sidfot";

Och här är motsvarande kod för mobilversionen:

Grid-template-areas: "sidhuvud" "artikel" "annonser" "navigering" "sidfot";

Så det handlar om att omfördela värdena i egenskapen grid-template-areas.

I vårt fall slog vi in ​​mobilversionen i en mediefråga, som här:

@media all and (max-width: 575px) (brödtext (grid-template-areas: "header" "article" "ads" "nav" "footer"; grid-mall-rader: 80px 1fr 70px 1fr 70px; grid- mall-kolumner: 1fr;))

Observera att vi även justerade värdena i rutnät-mall-rader och rutnät-mall-kolumner för att passa den nya mallen. I synnerhet ska det bara finnas en kolumn och den ska ta upp allt ledigt utrymme. Och eftersom alla rutnätsobjekt kommer att vara i en hög kommer vi att tilldela 5 rader och bestämma deras höjder.

Kombinera rutnät med block

Beroende på kraven i din mall finns det inget som hindrar dig från att ändra mobilversionen till att visa: block. Som här:

@media alla och (maxbredd: 575px) (kropp (display: block;))

Detta kommer att fungera på samma sätt som i exemplet ovan, men som standard kommer elementen att visas i sin ursprungliga ordning. I exemplet ovan har mobilversionen ett nav under annonser, men om vi skulle använda display: block skulle nav vara högre än annonser.

Med den här metoden kan du också behöva lägga till lite extra stoppning för att kompensera för de saknade luckorna som ingick i rutnätsversionen.

Explicita och implicita rutnät

CSS Grid använder konceptet av ett explicit rutnät och ett implicit. Detta är ett nyckelbegrepp som du måste hålla utkik efter när du skapar rutnät, annars kommer du att få en massa rader och kolumner som du aldrig förväntade dig att existera.

Ett explicit rutnät är rutnätet som du definierar i rutnät-mall-rader, rutnät-mall-kolumner och rutnät-mall-områden.

Däremot kan du fortfarande ha objekt som inte passar in i ditt "explicit" definierade rutnät. Till exempel definierade du ett rutnät som bara kan passa sex föremål, men själva behållaren är faktiskt nio föremål. Endast sex objekt kommer att passa in i det explicita rutnätet, och tre kommer att finnas kvar. Och det är här som implicita rutnät börjar.

Implicita rutnät genereras automatiskt av rutnätsbehållaren när rutnätsobjekt är placerade utanför det explicita rutnätet. Behållaren genererar implicita rutnätsspår genom att lägga till implicita linjer till rutnätet. Dessa linjer, tillsammans med de explicita rutnäten, bildar de implicita. Här är ett exempel:

Exempel

1
2
3
4
5
6

I det här exemplet definierar vi uttryckligen två rader och två kolumner för att passa fyra rutnätsobjekt. Det finns dock sex rutnätsobjekt, så ett implicit rutnät skapades för att rymma ytterligare två objekt.

Och det är väldigt bra, om det implicita rutnätet inte hade skapats, skulle de två extra elementen ha skapat en komplett röra av rutnätet.

Ställa in spårstorlek för implicita rutnät

Du kanske har märkt att den extra raden inte är lika hög som de två föregående. Detta beror på att vi har ställt in radhöjden i egenskapen grid-template-rows, men det gäller bara explicita rutnät. Radhöjden på implicita rutnät måste ställas in med egenskapen grid-auto-rows. Men eftersom vi inte gjorde det, visar det sig att den implicita raden använder den automatiska spårstorleken, som baseras på innehållet. Så här ligger spårdimensioneringsegenskaperna:

Generellt sett ser det ut så här:

Explicit rutnät använder rutnät-mall-rader och rutnät-mall-kolumner

Implicit rutnät använder rutnät-auto-rader och rutnät-auto-kolumner

Exempel

I det här fallet behöver vi inte ange slutvärdena på det första elementet, eftersom det bara täcker ett spår. Detsamma kan sägas om det andra rutnätet. Som standard, om du inte anger slutraden, kommer elementet bara att täcka ett spår.

Faktum är att vi inte behövde ange någon positionering för det första rutelementet, eftersom det är i en viss position, då skulle det vara det ändå. Men om vi inte angav positionering för det andra elementet, skulle det placeras omedelbart efter det första elementet, och upptar bara 1 spår.

Namnge rutnätslinjer

Du kan också namnge rutnätslinjer för enklare referens. Detta kan göras genom att ställa in egenskaperna för grid-template-rows och grid-template-columns, till exempel så här:

#grid (display: grid; / * Ställ in spåren och namnge linjerna * / grid-template-rows: 50px 1fr 80px; grid-template-columns: 120px 1fr 80px; grid-gap: 5px; height: 90vh;) . .. / * Se nu till de namngivna raderna * / # item2 (rutnät-rad-start: rad3-start; rutnät-kolumn-start: kol2-start; rutnät-rad-slut: rad3-slut; rutnät-kolumn-slut : col3 -end;)

Namngivna rader kan vara explicita eller implicita. Implicita namngivna linjer skapas när du skapar namngivna rutnätsområden med hjälp av rutnätsmallområden.

Namnet är hämtat från rutnätsområdet med tillägg av -start och -end, beroende på om det är början eller slutet av raden.

Detta kommer att skapa fyra implicita linjer för varje namngiven rutnätshuvudområde. Två är namngivna header-start och kolumn-start i det namngivna rutnätsområdet och två namnges header-end respektive.

Namngivna rutnätsområden

Rutnätsområden kan namnges i egenskapen grid-template-areas för själva grid-behållaren. Detta är vad vi gjorde tidigare när vi skapade webbplatsmallen. För att återställa det till minnet ser det ut så här:

#grid (display: grid; / * Byt namn på rutnätsområdet * / grid-template-areas: “aa” “bc”;…)... / * Applicera nu varje gridobjekt på det namngivna rutnätsområdet * / #a (grid- area: a;) #b (rutnätsarea: b;) #c (rutnätsarea: c;)

Du kan ange en tom cell med en punkt (.) eller en serie punkter utan mellanslag. Till exempel:

Grid-template-areas: "a a" ". b "; Eller grid-template-areas: "header header" "... content";

Rutnätsplaceringsegenskaper

Det finns tre korta egenskaper som du kan använda i stället för de långa egenskaperna för att placera rutnäten som nämns i exemplen ovan. Det är där de alla passar.

rutnätsområde - Den här egenskapen är en förkortning för:

grid-column - Den här egenskapen är en förkortning för:

rutnät-kolumn-start - anger vilken kolumnrad i rutnätsobjektet som är startraden och hur många spår den sträcker sig.

grid-column-end - indikerar på vilka kolumnlinjer rutnätsobjektet slutar och hur många spår det sträcker sig.

grid-row - Den här egenskapen är en förkortning för:

grid-row-start - indikerar vilken radlinje rutelementet börjar med och hur många spår det sträcker sig.

grid-row-end - indikerar vilken radlinje som kommer att vara den sista för elementet och hur många spår det kommer att sträcka sig.

Du kan också använda egenskapen grid-auto-flow som nämndes i kapitlet före detta. Den anger hur de automatiskt utlagda rutnätsobjekten ska passa i rutnätet. Autoplacerade objekt är de som inte uttryckligen placeras med någon av egenskaperna ovan.

Skapa ett kapslat rutnät

Grid-element kan själva bli rutnät i CSS Grid. Det vill säga, du kan kapsla ett rutnätsobjekt i ett annat rutnätsobjekt och därigenom skapa ett kapslat rutnät.

För att skapa ett sådant kapslat rutnät behöver du bara tillämpa display: grid (eller display: inline-grid) på gridobjektet och det kommer att bli ett grid själv. Du kan också använda display: subgrid för att skapa ett subgrid. , Hur går det till.

Exempel

1
2
3
5
6
7
8

Arv

De flesta rutnätsegenskaper ärvs inte, vilket innebär att ditt kapslade rutnät inte kommer att ärva värdena från dess överordnade rutnät. Detta gör att du kan göra ändringar i det överordnade rutnätet utan att oavsiktligt påverka det kapslade rutnätet.

Du exponerade till exempel grid-auto-flow:-kolumnen i det överordnade rutnätet, men du exponerade inte egenskapen i det kapslade rutnätet. I det här fallet kommer det kapslade rutnätet att ställas in på rad, eftersom det är det ursprungliga värdet för den här egenskapen.

Exempel

1
2
3
5
6
7
8

Observera att på det överordnade rutnätet går siffror vertikalt ner i kolumnerna istället för horisontellt längs raden, men det kapslade rutnätet går fortfarande horisontellt längs raden.

Subgrids

CSS Grid-modulen ställer in subgridvärdet för visningsegenskapen. Men inte alla webbläsare stöder det ännu. Detta värde borde vara ganska användbart.

Subgrid är ett kapslat rutnät, men med display: subgrid. Detta gör den till en speciell typ av rutnätsbehållare som är med och dimensionerar den överordnade nätbehållarens rutnät. Med andra ord, innehållet i undernätet påverkar storleken på det överordnade rutnätet, vilket gör att innehållet kan ordnas över två rutnät. Nedan är ett exempel på var den här egenskapen kan vara användbar.

Här är en lista med föremål:

Här är CSS, där listan är ett rutnät och listobjekten är undernät.

Ul (display: grid; grid: auto-flow / auto 1fr;) li (display: subgrid; grid-column: span 2; marginal: 0.5em; border: solid; stopping: 0.5em;) label (grid-column: 1;) input (rutnät-kolumn: 2;)

Det här exemplet skulle visa etikett och indata i en rad, med en ram runt varje listobjekt. Att exponera varje element i listan för ett undernät betyder att det inte bör vara några problem med justeringen av inmatningsformulär, eftersom varje element i listan kommer att delta i bildandet av storleken på det överordnade rutnätet.

Formulär med automatisk placering

Du kan använda explicita rutnät som en fördel när du skapar former eller någon annan klump av objekt som behöver rutnätsjustering. Du kan till exempel använda explicita rutnät för att skapa en form så här:

Och när du lägger till formulärelement i markeringen kommer det explicita rutnätet att lägga till linjer för att passa dem. För att skapa formen på toppen behöver vi alltså denna markering.

Inget behov av ytterligare uppmärkning för att ordna allt korrekt. Och det finns inget behov av att lägga till ytterligare klasser för formulärelement. Vi lägger bara till en klass för

element, men även detta är valfritt. Här är ett fungerande exempel:

Exempel

Du kan automatiskt lägga till nya formulärelement och de anpassas automatiskt till de andra eftersom de kommer att placeras i det explicita rutnätet.

Detta är möjligt eftersom vi gjorde själva formuläret till ett rutnät (eftersom myForm appliceras med display: grid). Och sedan specificerade vi att etiketter går till en kolumn och kontroller går till en annan.

Här är ett annat exempel, den här gången med ännu fler element:

Exempel

Vilken taxi behöver du?
Extrafunktioner

När undernät blir utbredda i webbläsare kommer det att vara möjligt att justera formulärelement som inte är direkta ättlingar.

... Till exempel, såsom listor över formulärelement.

CSS Grid alignment

I grund och botten fungerar de flesta justeringsegenskaperna på samma sätt på rutnätsobjekt som de gör på andra objekt. Men det finns också några uppriktningsegenskaper som bara gäller rutnät och böjningar.

Egenskapen align-items anger standardvärdet för align-self för alla rutnätsobjekt som deltar i en rutnätsbehållare i samband med dess formatering.

align-items: center;

I exemplet ovan använder vi align-items: center till rutnätsbehållaren, så att alla rutnätsobjekt kommer att centreras på boxaxeln.

Men eftersom detta är standard, kan vilket som helst av rutnätsobjekten skriva om det med hjälp av egenskapen align-self.

Justera-själv-egenskap

Den här egenskapen justerar ett element i en containerbox längs boxen/kolumnen/korsaxlarna.

Röd (bakgrund: orangeröd; höjd: 40%; align-self: baslinje;) .green (bakgrund: gulgrön; höjd: 60%;) .blue (bakgrund: stålblå; höjd: auto; align-self: stretch;)

Platsobjekt egendom

Den här egenskapen är en förkortning för justify-items och align-items.

Jag lade märke till Grid-tekniken för ungefär ett år sedan. Sedan verkade den här tekniken, efter en mycket ytlig studie, för mig värdelös och väldigt experimentell, det var motbjudande att det var nödvändigt att skapa onödiga uppmärkningar för implementeringar. Men nu börjar det redan bli svårt att inte lägga märke till antalet webbplatser som byggts på nätet, liksom antalet artiklar och lektioner om det. Tack vare det senare har det blivit mycket lättare att studera och förstå principerna och begreppen, att dra mer eller mindre verkliga slutsatser. Min slutsats efter ett år är denna - "Detta är en enkel och användbar lösning som någonsin har skapats för layout av webbsidor, bör varje webbdesigner med självrespekt veta."

Alla som någonsin har arbetat med grafiska redaktörer vet vad ett rutnät är. (Photoshop, Fireworks, Gimp, etc.) och, naturligtvis, uppskattade dess nödvändighet i skapandet av någon design. Men hur implementerar du Grid på webben? Faktiskt Tabellform Layouten var en riktig design för webbsidor med ett Grid, utan tvekan mycket användarvänlig. Men inte den avsedda användningen av elementen tabell livrädd.
Lyckligtvis har webbstandardernas enorma popularitet, som har vuxit och fortsätter att växa under de senaste åren, liksom deras stöd i moderna webbläsare, gjort det möjligt för oss att skapa multifunktionella sidor med mycket liten, logisk uppmärkning. Denna layout fick namnet Blockig... Men också Blockig layout visade sig vara en svag sida. När du skapar sidor med en enorm uppsättning element av olika storlekar och betydelser har layouten av sådana sidor blivit en mycket svår uppgift, och om mer än en person arbetar med uppmärkningen kan sådant arbete bli en mardröm.
Och nu kom tekniken med hjälp av Grid till undsättning. Denna teknik är en hybrid mellan Blockig och Tabellform layout. Att använda det ger oss:

  • snabbhet och enkel utveckling
  • positioneringsfrihet
  • sidelementens proportionalitet och deras placering
Betalningen för allt detta är bara lite extra påslag. Jag tror att nuförtiden, när kostnaden för en mansklocka är mycket dyrare än järn och produktivitet, är det inte svårt att gissa åt vilket håll vågen lutar.

Vad är Grid Layout? Först och främst är det ett koncept. Ett koncept som innehåller många designaspekter och väldigt få regler för dess genomförande. Detta ger fullständig frihet och ingen standardisering i dess prestanda. Jag kommer att säga ännu mer - samma Mesh kan implementeras på en mängd olika sätt. Om du redan har läst om Grid, kanske du har märkt att varje författare börjar från en ny sida, går djupt in i detaljerna, detta är milt uttryckt förvirrande. Lyckligtvis började dyka upp Gridsystem- CSS-bibliotek för att arbeta med Grid. Och genom deras exempel kan du mycket snabbt bemästra de grundläggande principerna för denna teknik.

Jag tycker att det inte är meningsfullt att skriva om alla aspekter av Grid, du kan enkelt hitta information om det på Internet. Jag föreslår att skapa din egen enkla Rutsystem.

Först måste du förstå att rutnätet består av kolumner och mellanrum mellan dem. Det finns tre huvuddimensioner - rutnätsbredd, kolumnbredd och kolumnavstånd. Bredden på kolumnerna beror på deras antal.

Låt oss försöka göra ett rutnät 950px brett med 16 kolumner med 10px avstånd, så en kolumn bör vara 50px bred. Efter att ha förstått alla värden öppnar vi vilken grafisk editor som helst som vi känner till och skapar en layout. Du kan också lägga till indrag i Grid från vänster och från höger, låt oss säga 20 pixlar vardera, och då får du en layout med en bredd på 990 pixlar. Du kan se mitt exempel.

Nu kan vi börja bygga vårt bibliotek. Som de flesta CSS-bibliotek som vårt behöver en global återställning, föreslår jag Eric Meyers CSS-återställning, med reset.css skapa grid.css där vi omedelbart kan lägga till en metod för rengöring av behållare som innehåller flytande block - Clear Fix. Det första vi behöver är en regel för behållaren som kommer att innehålla alla våra kolumner. Bredden på varje container är samma bredd som vårt galler.

.behållare (
marginal: 0 auto;
bredd: 950px;
}

Nu kan vi lägga till en regel för våra kolumner, den innehåller bredd och utfyllnad. Indrag fungerar som en lucka (ränna) mellan högtalarna.
.column (
flyta till vänster;
marginal-höger: 10px;
overflow: gömd;
bredd: 50px;
}

För den sista kolumnen behövs ingen indragning, för detta lägger vi till en regel för den också:

Våra containrar innehåller kolonner, kolonnerna är flytande block, så de måste saneras. För att undvika onödiga .clearfixes i din uppmärkning kan du även tillämpa den här regeln på behållare:
.clearfix: efter, .container: efter{
innehåll: ".";
display: block;
höjd: 0;
klara: båda;
synlighet: dold;
}

Clearfix, .behållare(display: inline-block;)

/ * Döljer sig från IE-mac \ * /
* html .clearfix, * html .container(höjd: 1%;)
.clearfix, .behållare(visa: block;)
/ * Avsluta dölj från IE-mac * /


Nu kan vi komma ner till våra kolumner. Kolumner kan vara så breda som två eller tre, och så vidare. För att göra detta kan vi tillämpa följande regler på dem:
.span-1 (bredd: 50px;)
.span-2 (bredd: 110px;)
.span-3 (bredd: 170px;)
.span-4 (bredd: 230px;)
.span-5 (bredd: 290px;)
.span-6 (bredd: 350px;)
.span-7 (bredd: 410px;)
.span-8 (bredd: 470px;)
.span-9 (bredd: 530px;)
.span-10 (bredd: 590px;)
.span-11 (bredd: 650px;)
.span-12 (bredd: 710px;)
.span-13 (bredd: 770px;)
.span-14 (bredd: 830px;)
.span-15 (bredd: 890px;)
.span-16 (bredd: 950px; marginal-höger: 0;)

I princip är detta allt som behövs för Grid-implementeringarna, du kan även lägga till en wrapper och en klass för att se Grid med en layout. Låt oss skapa main.css och lägg till det:
.wrapper (
marginal: 0 auto;
bredd: 990px;
}
.overlay (
bakgrund: genomskinlig url (overlay.png) repetera-y rulla upp till vänster;
}

Så här kan layouten se ut:


Jag tror att det räcker till en början.
Du kan se mitt exempel






2021 gtavrl.ru.