← Område 3 Guide · CSS: form och layout Felsökning

Webbutveckling · område 3

Guide – CSS: form och layout

Här står allt som prov 2 kan fråga om, och allt du behöver för Projekt 2. Guiden fungerar utan att du varit på lektionen.

Exemplen är hämtade ur referensprojektet Fyrar längs Bohuskusten – samma sajt som i område 2, nu stilsatt. Öppna stil.css i den mappen bredvid guiden: den är indelad i tio numrerade avsnitt och kommenterad.

Vad du kan efter guiden

1. Stilmallen och hur den kopplas

CSS står för Cascading Style Sheets. HTML säger vad något är, CSS säger hur det ska se ut. Att de är åtskilda är hela poängen: samma markering kan se ut hur som helst, och en sida utan CSS ska fortfarande gå att läsa.

link-elementet

Stilmallen är en egen fil, och den kopplas i head på varje sida:

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Fyrar längs Bohuskusten</title>
  <link rel="stylesheet" href="stil.css">
</head>

rel="stylesheet" säger vad filen är, href var den ligger. Sökvägen är relativ, precis som i område 2.

Tre sätt att skriva CSS, varav ett är rätt

VarHur det ser utNär
Extern fil<link rel="stylesheet"> Alltid. En fil, alla sidor
Inbäddad<style> i head Aldrig i den här kursen
Inlinestyle="color: red" på elementet Aldrig i den här kursen

Skälet till att den externa filen vinner: en ändring på ett ställe når alla sidor. Har du färgen inskriven på tjugo element ska den ändras tjugo gånger, och du kommer att missa ett. Inline-stilar är dessutom nästan omöjliga att skriva över – mer om det i avsnitt 3.

Syntaxen

h1 {
  font-size: 2.25rem;
  color: #1c2733;
}

Kommentarer skrivs /* så här */. CSS har ingen radkommentar – // fungerar inte.

Prova själv

Koppla en tom stil.css till alla dina sidor och skriv en enda regel: body { background: hotpink; }. Öppna varje sida. Blir någon inte rosa är sökvägen fel på just den sidan, och det är bättre att veta nu än i november.

2. Selektorer

Selektorn avgör vilka element regeln träffar. Fyra sorter räcker långt.

Elementselektor

p { margin: 0 0 1rem; }

Alla stycken på hela sajten. Bra för grundvärden, trubbig när du vill åt något särskilt.

Klasselektor

Punkt före namnet. Träffar alla element med den klassen:

.tillbaka { font-size: 0.9rem; }
<a href="#toppen" class="tillbaka">Tillbaka till toppen</a>

Klassen är den selektor du ska använda mest. Den går att sätta på flera element, på olika sorters element, och att återanvända på nästa sida. Ett element kan ha flera klasser, åtskilda med mellanslag: class="knapp knapp-stor".

Id-selektor

#toppen { font-size: 1.15rem; }
Undvik id som krok för CSS

Ett id är unikt per sida, så regeln går aldrig att återanvända, och den är obehagligt svår att skriva över. Id hör hemma som mål för ankarlänkar och som koppling mellan label och fält – det du lärde dig i område 2.

Pseudoklasser

Ett kolon och ett tillstånd. Träffar elementet när något gäller:

a:hover { text-decoration-thickness: 2px; }
PseudoklassGäller när
:hoverMuspekaren är över elementet
:focus-visibleElementet har fokus och markeringen behövs, alltså vid tangentbord
:disabledEtt formulärfält eller en knapp är avstängd
:invalidEtt fält inte uppfyller sina regler
:first-child, :last-childElementet är först respektive sist bland sina syskon

Selektorer som kombineras

nav a { text-decoration: none; }     /* a någonstans inuti nav */
nav > ul { display: flex; }          /* ul direkt inuti nav, inte djupare */
h1, h2, h3 { line-height: 1.25; }    /* alla tre, samma regel */

Mellanslag betyder inuti. Större-än betyder direkt barn till. Komma betyder och. Kommat är det som brukar glömmas: h1 h2 betyder en h2 inuti en h1, vilket aldrig finns.

Prova själv

Öppna referensprojektet och hitta de fyra sorterna i stil.css avsnitt 4. Byt sedan färg på a-regeln och ladda om. Länkarna i navigeringen ändras inte – nästa avsnitt förklarar varför.

3. Kaskaden och specificitet

Två regler kan träffa samma element och säga olika saker. Något måste avgöra. Det som avgör är, i ordning:

  1. Specificitet – hur exakt selektorn är.
  2. Ordning i filen – står det lika vinner den som kommer sist.

Ordningen är alltså den sista utslagsgivaren, inte den första. Det är den vanligaste missuppfattningen i hela området.

Räkna specificitet

Räkna tre tal: id, klasser, element.

SelektoridklasselementLäses
a0010-0-1
nav a0020-0-2
.tillbaka0100-1-0
nav a.tillbaka0120-1-2
#toppen1001-0-0

Jämför från vänster. En enda klass slår hur många element som helst: 0-1-0 vinner över 0-0-9. Och ett id slår alla klasser tillsammans.

Det är därför länkarna i navigeringen inte ändrades i förra avsnittets övning. nav a är 0-0-2 och a är 0-0-1, så nav a vinner oavsett vilken som står sist.

Ärvning

ÄrvsÄrvs inte
color, font-family, font-size, line-height margin, padding, border
text-align, letter-spacing background, width, height

Därför räcker det att sätta typsnittet en gång på body – hela sidan får det. Men marginaler måste sättas där de ska gälla.

Ett undantag som biter: formulärfält ärver inte typsnitt. input, select, textarea och button får webbläsarens eget. Lösningen står i avsnitt 10.

!important

Använd den inte

Den som skriver !important har oftast ett specificitetsproblem och löser det med våld. Nästa gång något ska ändras behövs ett !important till. Sedan ett till. Behöver du den betyder det nästan alltid att du har en id-selektor eller en inline-stil i vägen – ta bort dem i stället.

Prova själv

Skriv två regler som båda träffar samma stycke, en med en klass och en med två element. Gissa vilken som vinner innan du laddar om. Byt sedan plats på dem i filen och se att det inte gjorde någon skillnad.

4. Boxmodellen

Varje element är en låda, och lådan har fyra lager. Inifrån och ut:

┌─────────────────────────────┐
│  margin                     │
│  ┌───────────────────────┐  │
│  │  border               │  │
│  │  ┌─────────────────┐  │  │
│  │  │  padding        │  │  │
│  │  │  ┌───────────┐  │  │  │
│  │  │  │  content  │  │  │  │
│  │  │  └───────────┘  │  │  │
│  │  └─────────────────┘  │  │
│  └───────────────────────┘  │
└─────────────────────────────┘
LagerVad det är
contentInnehållet självt
paddingLuft innanför kanten. Bakgrunden når hit
borderKanten
marginLuft utanför kanten. Bakgrunden når inte hit

Tumregeln: vill du ha mer luft inuti en ruta med bakgrundsfärg, är det padding. Vill du ha avstånd mellan två rutor, är det margin.

box-sizing

*,
*::before,
*::after {
  box-sizing: border-box;
}

Utan den räknar width bara innehållet. Ett element med width: 300px, padding: 20px och border: 1px blir då 342 px brett – 300 + 20 + 20 + 1 + 1. All layout blir en räkneövning.

Med border-box räknar width in padding och border. 300 px betyder 300 px.

Skriv den överst i varje stilmall du gör

Det är inget knep – det är bara ett bättre förval än det webben råkade få 1996.

Kortformer

margin: 1rem;                 /* alla fyra sidor */
margin: 1rem 2rem;            /* över/under, höger/vänster */
margin: 1rem 2rem 3rem;       /* över, höger/vänster, under */
margin: 1rem 2rem 3rem 4rem;  /* över, höger, under, vänster */

Fyra värden går medurs från toppen. Minns du inte ordningen, skriv margin-top, margin-right och så vidare – det är längre men aldrig fel.

Marginalkollaps

Två marginaler som möts lodrätt smälter ihop till en, och den större vinner. Har ett stycke 20 px under sig och nästa 30 px över sig blir avståndet 30, inte 50.

Det är inte ett fel, men det överraskar. Enklaste sättet att slippa tänka på det: sätt marginal bara nedåt på löpande text.

p { margin: 0 0 1rem; }
Prova själv

Sätt background: yellow på ett stycke och ge det padding: 1rem och margin: 1rem. Titta på var det gula slutar. Det är gränsen mellan padding och margin, och nu ser du den.

5. Färg

Tre skrivsätt, samma färger.

SkrivsättExempelVad talen betyder
Hex#17607aRött, grönt, blått – två tecken var, 00 till ff
rgbrgb(23 96 122)Samma tre kanaler, 0 till 255
hslhsl(196 68% 28%)Kulör 0–360, mättnad, ljushet

Alla tre ger identiskt resultat. Skillnaden är hur lätta de är att ändra.

Varför hsl är värt att kunna

I hex är det omöjligt att se vad som händer om du vill ha samma färg lite mörkare. I hsl sänker du sista talet:

--accent:         hsl(196 68% 28%);
--accent-morkare: hsl(196 68% 20%);
--accent-ljus:    hsl(196 55% 94%);

Samma kulör, olika ljushet. En hel färgskala ur ett enda tal. Välj ett skrivsätt och håll dig till det – referensprojektet blandar alla tre bara för att visa dem.

Kontrast

Text måste ha tillräcklig kontrast mot sin bakgrund. Kravet i WCAG är 4,5:1 för brödtext och 3:1 för stor text.

Ljusgrå text på vit bakgrund är den vanligaste överträdelsen, och den ser stilren ut på en ny skärm i ett upplyst rum. Den är oläsbar på en telefon i solsken.

Kontrastkraven och hur de mäts hör till Gränssnittsdesign. Här gäller att din CSS ska hålla de värden stilguiden satte – och att du kan kontrollera dem.

Prova själv

Ta din accentfärg och skriv den i alla tre skrivsätten. Gör sedan en ljusare och en mörkare variant genom att bara ändra ljusheten i hsl.

6. Typografi

Typografi avgör om en sida går att läsa. Det är också det billigaste att göra rätt.

Typsnittsstackar

font-family: "Segoe UI", system-ui, -apple-system, sans-serif;

En lista, inte ett typsnitt. Webbläsaren tar det första som finns på besökarens dator. Sista ledet ska alltid vara en generisk familj – sans-serif, serif eller monospace – för den finns alltid.

Webbtypsnitt

Stacken ovan använder typsnitt som redan finns på besökarens dator. Vill du ha ett som inte gör det måste det hämtas, och då finns två vägar.

Hämta från en tjänst. Ett link-element i head, före din egen stilmall:

<link rel="stylesheet"
      href="https://fonts.googleapis.com/css2?family=Inter&display=swap">

Lägg filen i projektet. Du laddar ned typsnittet, lägger det i en mapp och beskriver det själv:

@font-face {
  font-family: "Inter";
  src: url("typsnitt/inter.woff2") format("woff2");
  font-display: swap;
}

Sedan används det som vanligt, och stacken behövs fortfarande:

body { font-family: "Inter", system-ui, sans-serif; }
VägFördelNackdel
TjänstEn rad, inget att ladda ned Sidan blir beroende av någon annans server
Egen filFungerar även om tjänsten ligger nere Du måste hålla ordning på filerna själv

Tre saker som gäller båda vägarna:

Inget krav i Projekt 2

Stacken räcker för alla betyg. Behöver din stilguide ett särskilt typsnitt är det här du hämtar det.

Enheter

EnhetRäknar motAnvänd till
remRotens teckenstorlekTeckenstorlek. Alltid
emElementets egen teckenstorlekAvstånd som ska följa texten
pxBildpunkterKanter och små radier. Inte text
%Elementet omkringBredder
chBredden på tecknet 0Radlängd
Sätt aldrig teckenstorlek i px

Ändrar besökaren sin webbläsares textstorlek – och många gör det – följer rem med, medan px står still. För den som behöver större text är det skillnaden mellan en läsbar sajt och en oanvändbar.

line-height utan enhet

body { line-height: 1.6; }

Ingen enhet. Det betyder 1,6 gånger elementets egen teckenstorlek. Skriver du 1.6rem räknas det i stället mot rotens storlek och ärvs som ett fast tal – rubriker med stor text får då för trånga rader.

Vilka värden du ska ha står i din stilguide. Radavstånd som typografisk fråga hör till Gränssnittsdesign – här handlar det bara om hur du skriver in det. Har guiden inga värden ännu fungerar 1,6 för brödtext och 1,25 för rubriker som platshållare tills den har det.

Radlängd

p { max-width: 68ch; }

ch är bredden på tecknet 0, så 68ch blir ungefär 68 tecken. Vilken radlängd din sajt ska ha bestämde du i stilguiden – varför ögat tappar raden när den blir för lång är Gränssnittsdesignens typografipass, inte det här.

Det som hör hit är att raden ovan är den som genomför beslutet, och att en sida utan den låter brödtexten bli lika bred som fönstret.

Prova själv

Sätt max-width på dina stycken och dra fönstret brett. Läs samma stycke med och utan begränsningen.

7. Variabler

En variabel är ett värde med ett namn. Ändras värdet ändras det överallt.

:root {
  --accent: #17607a;
  --steg-2: 1rem;
}

.knapp {
  background: var(--accent);
  padding: var(--steg-2);
}

CSS-variabler heter formellt egna egenskaper, custom properties. Båda namnen används.

Varför det här är områdets viktigaste avsnitt

Din stilguide kommer att ändras efter att du skrivit CSS:en. Ligger färgen på fyrtio ställen är en ändring en halvdags arbete och tre missade förekomster. Ligger den i :root är den en rad.

Namngivning

BraDåligtVarför
--accent--morkblaByts färgen till grön blir namnet en lögn
--text-dov--graSamma sak
--steg-2--sexton-pxTalet kan ändras, rollen består

En skala för avstånd

:root {
  --steg-1: 0.5rem;
  --steg-2: 1rem;
  --steg-3: 1.5rem;
  --steg-4: 2.5rem;
  --steg-5: 4rem;
}

Fem värden räcker till en hel sajt. Att avstånden är släkt med varandra är det som gör att sidan ser sammanhållen ut – svårt att uppnå med lösryckta tal som 7, 15 och 23.

Prova själv

Flytta varje hårdkodad färg i din CSS till :root. Byt sedan ut en enda variabel mot en helt annan färg och ladda om. Ändrades allt som skulle ändras? Om inte har du hittat det du missade.

8. Flexbox

Flexbox lägger saker på en rad eller i en kolumn, och fördelar utrymmet mellan dem.

nav ul {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.5rem;
}

display: flex på behållaren. Barnen blir flexbarn och lägger sig på rad.

EgenskapGörVanliga värden
flex-directionÅt vilket håll row (förval), column
justify-contentFördelning längs raden flex-start, center, space-between
align-itemsPlacering tvärs raden stretch (förval), center
flex-wrapFår barnen bryta till ny rad nowrap (förval), wrap
gapAvstånd mellan barnen 1rem, eller rad kolumn

De två som förväxlas är justify-content och align-items. Minnesregeln: justify följer riktningen, align går tvärs över. Byter du flex-direction till column byter de två också håll.

flex-wrap är inte valfritt

Utan den klämmer flexbox ihop barnen tills de inte går att läsa, eller låter dem sticka ut ur sidan. Sätt den på varenda rad som kan innehålla mer än två saker. Navigeringen är det självklara fallet.

gap i stället för marginaler

gap sätter avstånd mellan barnen, inte utanför de yttersta. Med marginaler får du alltid ett överskott i ena kanten. gap fungerar i både flexbox och grid.

Prova själv

Gör din navigering till en flexrad med gap. Dra ihop fönstret tills punkterna inte får plats. Lägg till flex-wrap: wrap och gör om samma sak.

9. Grid

Grid lägger saker i ett rutnät – rader och kolumner samtidigt.

.kortlista {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
  gap: 1rem;
}

fr-enheten

grid-template-columns: 1fr 1fr 1fr;   /* tre lika breda */
grid-template-columns: 3fr 1fr;       /* den första tre gånger så bred */
grid-template-columns: 200px 1fr;     /* fast första, resten till den andra */

fr betyder fraction, en andel av det lediga utrymmet. Den finns bara i grid, och gör procenträkning onödig: 1fr 1fr är alltid exakt halva var, oavsett gap.

repeat, auto-fit och minmax

Läs raden inifrån och ut:

Resultatet är ett galleri som räknar ut antalet kolumner själv. Tre kort på en bred skärm, två på en surfplatta, ett på en telefon – utan en enda media query. Lär dig raden utantill.

grid-template-areas

.sida {
  display: grid;
  grid-template-columns: 3fr 1fr;
  grid-template-areas:
    "rubrik   rubrik"
    "innehall sido";
}

.sida > h1      { grid-area: rubrik; }
.sida > article { grid-area: innehall; }
.sida > aside   { grid-area: sido; }

Layouten går att läsa direkt i CSS:en. Men den låser antalet kolumner: varje rad i namnrutnätet måste ha lika många kolumner, och därför går grid-template-areas inte att kombinera med auto-fit. Vill du ha båda behöver du en media query.

grid-column

.sidlayout > h1 { grid-column: 1 / -1; }

Från första linjen till den sista, alltså hela raden oavsett hur många kolumner det blev.

När grid och när flexbox

SituationVerktyg
Upprepning av lika saker: kort, galleri, produktlista Grid med auto-fit
En rad som ska tåla att brytas: navigering, knapprad Flexbox med wrap
Sidlayout med huvudinnehåll och sidospalt – olika saker Grid med bestämda kolumner
Två saker bredvid varandra, ingen exakt placeringFlexbox
Gränsen som brukar gissas fel

auto-fit löser upprepning av lika stora saker. En artikel med sidospalt är inte det. Där måste du bestämma kolumnerna själv, och då behövs en brytpunkt.

Media query

@media (min-width: 56rem) {
  .sidlayout {
    grid-template-columns: minmax(0, 3fr) minmax(0, 1fr);
  }
}

Läs den som: är fönstret minst 56rem brett, gör kolumnerna så här. Under den bredden gäller regeln inte, och layouten faller tillbaka på en kolumn.

Bygg alltid i den ordningen – smalt först, bredd som tillägg. Det är principen från Gränssnittsdesign, och den är enklare att koda också: en kolumn är förvalet i grid, så det smala fallet behöver oftast ingen kod alls.

Prova själv

Bygg ett galleri med repeat(auto-fit, minmax(16rem, 1fr)) och dra fönstret från smalt till brett. Räkna kolumnerna. Du skrev aldrig något om antalet.

10. Komponenter och tillstånd

En komponent är en del som återanvänds: en knapp, ett kort, ett formulärfält. Den är inte klar när den ser rätt ut i vila.

TillståndVäljs medMåste synas
Vilaselektorn själv–
Muspekaren över:hoverJa
Tangentbordsfokus:focus-visibleAlltid
Avstängd:disabledJa
Felaktigt ifylld:invalidJa
.knapp {
  background: var(--accent);
  color: #fff;
  border: 1px solid transparent;
  border-radius: 6px;
  padding: 0.5rem 1.5rem;
  cursor: pointer;
}

.knapp:hover    { background: hsl(196 65% 24%); }
.knapp:disabled { background: var(--linje); cursor: not-allowed; }

focus-visible är inte valfri

a:focus-visible,
button:focus-visible,
input:focus-visible {
  outline: 3px solid var(--accent);
  outline-offset: 2px;
}
Ta aldrig bort fokusmarkeringen utan att sätta en egen

Den som navigerar med tangentbord ser annars inte var hen är, och sajten blir omöjlig att använda. Det är inte en detalj – det är skillnaden mellan användbar och obrukbar för den som inte kan använda mus.

:focus-visible är den moderna varianten: den slår till vid tangentbord men inte när du klickar med musen, vilket var invändningen mot den gamla :focus.

Formulärfält ärver inte typsnitt

input,
select,
textarea,
button {
  font: inherit;
}

Utan den raden får fälten webbläsarens eget typsnitt, oftast mindre än resten av sidan. Det ser trasigt ut och det är inget du gjort fel – det är ett arv från tidiga webbläsare.

Klasser som går att återanvända

BraDåligt
.knapp.knapp-i-formularet
.faktaruta.hoger-ruta
.kortlista.tre-kolumner

Flyttas rutan till vänster blir .hoger-ruta en lögn. Blir korten fyra i stället för tre blir .tre-kolumner det.

Prova själv

Tabba dig genom din sajt utan att röra musen. Ser du hela tiden var du är? Kommer du åt varje länk och varje fält? Det tar två minuter och det är områdets viktigaste test.

11. Att bygga efter en mockup

En mockup är en bild. Din uppgift är att läsa av den, inte att gissa.

Ur mockupenHur
FärgerFärgkod ur stilguiden, inte pipetten på en skärmdump
TeckenstorlekarUr stilguidens skala
AvståndMät, och avrunda till närmaste steg i din skala
RadlängdUngefär hur många tecken en rad rymmer
TillståndFinns hover och fokus ritade? Ofta inte

Avrundningen är viktig. Mäter du 23 px och din skala har 24, använd 24. Mockupen är en skiss av en avsikt, inte en ritning med toleranser.

Vad du frågar om i stället för att gissa

I det här projektet är designern du själv, vilket gör det enklare – men skriv ändå ned svaren. Det är precis de här frågorna en frontendutvecklare ställer till en designer varje vecka.

Pixelperfekt är fel mål

Sidan ska bli det bilden ville, i ett medium som har rörliga bredder och användare som zoomar. En sida som stämmer på pixeln vid 1440 px och går sönder vid 1200 är sämre byggd än en som är några pixlar bredvid överallt men håller ihop.

Prova själv

Lägg mockupen bredvid din sida i webbläsaren. Skriv ned tre skillnader. Avgör för var och en om det är ett fel i CSS:en eller något mockupen inte hade svar på.

12. Ta det längre

För dig som siktar mot C och A.

13. Felsökning

14 rader

SymptomTrolig orsakÅtgärd
Ingenting händer när jag ändrar CSSFilen är inte kopplad, eller sökvägen är felTitta i utvecklarverktygens nätverksflik – laddas stil.css?
Ingenting händer, men filen laddasEn annan regel med högre specificitet vinnerHögerklicka, välj Inspektera. Överstruken rad = överskriven
Ändringen syns inte fastän allt ser rätt utWebbläsaren har filen i cacheminnetLadda om med Ctrl+F5
Regeln under den trasiga fungerar inte hellerSemikolon saknas Leta uppåt från den första regel som inte fungerar
Elementet blir bredare än jag skrevbox-sizing saknasLägg border-box överst i filen
Avståndet blev mindre än summanMarginalkollapsSätt marginal bara åt ett håll
Sidan har vågrät rullningslistNågot är bredare än skärmen max-width: 100% på bilder, overflow-x: auto på tabeller
Flexbarnen sticker ut ur sidanflex-wrap saknas Lägg till flex-wrap: wrap
Galleriet har en tom kolumnauto-fit fyller ut med tomma spårNormalt, inte ett fel
Formulärfälten har fel typsnittFält ärver inte typsnitt font: inherit på fälten
Jag ser inte var jag är när jag tabbarFokusmarkeringen är borttagenTa bort outline: none, sätt en egen :focus-visible
Färgen ändras inte fast jag bytte variabelnVärdet står hårdkodat någon annanstans ocksåSök i filen på det gamla värdet
Bilden är utdragenBara ena måttet är sattSätt height: auto när du satt width
// fungerar inte som kommentarCSS har ingen radkommentarSkriv /* så här */

14. Snabbreferens: egenskaperna

Använd den inför prov 2. Ordträningen nedan drar slumpvis ur tabellen.

Ordträning

30 rader

Egenskap eller begreppBetyder
link rel="stylesheet"Kopplar en extern stilmall i head
box-sizing: border-boxwidth räknar in padding och border
marginLuft utanför kanten. Bakgrunden når inte hit
paddingLuft innanför kanten. Bakgrunden når hit
borderKanten runt elementet
border-radiusRundade hörn
max-widthStörsta bredd elementet får ta
marginalkollapsTvå lodräta marginaler smälter ihop, den större vinner
specificitetHur exakt en selektor är. Avgör före ordning i filen
klasselektorPunkt före namnet. Den du ska använda mest
id-selektorBrädgård före namnet. Undvik som krok för CSS
:hoverGäller när muspekaren är över elementet
:focus-visibleGäller vid tangentbordsfokus. Får aldrig saknas
:disabledGäller för avstängda fält och knappar
:invalidGäller för fält som inte uppfyller sina regler
!importantSlår all specificitet. Använd den inte
font-familyTypsnittsstack, generisk familj sist
remRäknar mot rotens teckenstorlek. Använd till text
emRäknar mot elementets egen teckenstorlek
chBredden på tecknet 0. Används till radlängd
line-heightRadavstånd. Skrivs utan enhet
hslKulör, mättnad, ljushet. Lättast att göra varianter ur
:rootDokumentets rot. Där variablerna deklareras
var()Hämtar värdet ur en variabel
display: flexGör behållaren till en flexbehållare
flex-wrap: wrapLåter flexbarnen bryta till ny rad
gapAvstånd mellan barnen i flexbox och grid
frAndel av ledigt utrymme. Finns bara i grid
repeat(auto-fit, minmax())Galleri som räknar kolumner själv
grid-template-areasLayout ritad med namn. Låser antalet kolumner