← Område 3 Guide · CSS Felsökning

Webbutveckling 1 · område 3 · guide

CSS – form, layout och designsystem

Områdets uppslagsbok. Allt från lektion 22 till 26 står här, i den ordning det gås igenom. Var du borta en lektion är det hit du går, och slår du i den under ett arbetspass hittar du rätt genom innehållsförteckningen eller sökrutan i felsökningen.

Exemplen är hämtade ur områdets förlaga – den stilsatta versionen av Vikstads naturreservat, samma sajt som du såg ostilad i område 2. Kraven guiden stödjer står i Projekt 2.

Vad du kan efter guiden

Så hänger avsnitten ihop med lektionerna

Avsnitt 1–4 hör till tisdag 6/10, avsnitt 5–7 till fredag 9/10, avsnitt 8 till måndag 12/10, avsnitt 9 till tisdag 13/10 och avsnitt 10 till fredag 16/10.

1. Stilmallen och syntaxen

Extern stilmall

CSS skrivs i en egen fil och kopplas in i head på varje sida:

<link rel="stylesheet" href="stil.css">

En fil, alla sidor. Ändrar du en färg där byts den på hela sajten. Det är hela poängen med extern CSS, och det är därför style-attribut i HTML är förbjudna i uppgiften – de går inte att återanvända och är nästan omöjliga att skriva över.

Raden ska ligga i head. Ligger den i body fungerar den ofta ändå, men sidan visas då först ostilad och hoppar till när stilen kommer.

En regel

h1 {
  font-size: 2rem;
  color: #1e4b3f;
}
DelVad det är
h1Selektorn – vad regeln träffar
{ }Deklarationsblocket
font-sizeEn egenskap
2remEgenskapens värde
;Avslutar deklarationen
Semikolon efter varje deklaration

Glömmer du ett slutar nästa rad att fungera – och felet syns på raden efter den trasiga, inte på den trasiga. Det är den vanligaste tidstjuven i hela området.

Kommentarer skrivs så här, och CSS har bara den här sorten – // fungerar inte:

/* Sidhuvudet och menyn */

Ordningen i filen

Skriv från allmänt till särskilt: variabler, grunder, layout, komponenter, detaljer. Det är samma ordning som kaskaden läser filen i, och det gör att senare regler kan bygga på tidigare i stället för att slåss med dem.

Prova själv

Skapa stil.css, koppla in den i head på alla dina sidor och skriv en enda regel: body { background: #fbfaf6; }. Ladda om varje sida och kontrollera att bakgrunden ändrats på alla fyra. Gör den inte det saknas link-raden på någon av dem.

2. Selektorer

p        { }   /* alla p-element */
.ingress { }   /* alla element med class="ingress" */
#faglar  { }   /* elementet med id="faglar" */
Använd klasser

Element-selektorn träffar allt, vilket är bra för grunder och dåligt för detaljer. Id-selektorn träffar exakt ett element och är så specifik att den blir svår att skriva över – därför är den förbjuden för formgivning i Projekt 2. Ett id är till för ankarlänkar och för label for, inte för färg.

Kombinationer

.kortrutnat article  { }   /* article någonstans inuti .kortrutnat */
body > header        { }   /* header som är direkt barn till body */
input + label        { }   /* label som står direkt efter en input */
h1, h2, h3           { }   /* alla tre – komma grupperar */

Mellanslag betyder någonstans inuti, > betyder direkt barn. Skillnaden spelar roll när något är nästlat i flera lager.

Attributselektorn

.huvudmeny a[aria-current="page"] {
  color: var(--accent-djup);
}

Den här träffar länken till sidan man står på. Attributet finns redan i HTML:en och betyder redan "du är här" – då behöver vi ingen klass som säger samma sak en gång till. Låt formen följa innebörden.

input[type="checkbox"] { width: auto; }

Samma sak för fälttyper: en kryssruta ska inte vara 22 rem bred som ett textfält.

Pseudoklasser

En pseudoklass beskriver ett tillstånd eller en position, inte ett element.

PseudoklassTräffar
:hoverElementet muspekaren är över
:focus-visibleElementet som har tangentbordsfokus
:first-child, :last-childFörsta respektive sista barnet
:nth-child(even)Varannat barn
:visitedBesökt länk
tbody tr:nth-child(even) {
  background: var(--yta);
}

Varannan tabellrad tonad, utan att en enda rad behöver märkas i HTML:en. Det är pseudoklassernas styrka: de väljer utifrån hur sidan ser ut, inte utifrån vad du hunnit skriva klasser på.

Prova själv

Ge navigationen på din sajt en klass och formge den. Lägg sedan till en regel med :hover och en med :focus-visible. Tabba dig fram till länkarna med Tab och se att markeringen syns.

3. Kaskaden, specificitet och arv

Två regler säger olika saker om samma element. Vilken vinner? Webbläsaren ställer tre frågor, i den här ordningen.

Fråga 1: gäller regeln alls?

Träffar selektorn elementet? Gör den inte det spelar resten ingen roll. Det låter självklart, och det är ändå det vanligaste felet: regeln fungerar inte för att selektorn träffar något annat än du tror.

Fråga 2: vilken är mest specifik?

Specificitet räknas som tre siffror: id, klass, element.

SelektoridklasselementLäses som
p0010-0-1
.ingress0100-1-0
.kortrutnat p0110-1-1
a[aria-current="page"]0110-1-1
#faglar1001-0-0

Jämför siffra för siffra från vänster. En enda klass slår hur många element som helst: 0-1-0 är större än 0-0-9.

Ett riktigt exempel ur förlagan. Först sätts ett läsmått på all brödtext:

p, li, dd {
  max-width: var(--las);
}

Sedan tas det bort inuti korten, där kortet redan bestämmer bredden:

.kortrutnat p {
  max-width: none;
}

Den andra regeln vinner med 0-1-1 mot 0-0-1. Inte för att den står sist, utan för att den är mer specifik.

Fråga 3: vilken står sist?

Är specificiteten lika vinner den som står längst ned i filen. Därför spelar ordningen i stilmallen roll, och därför skriver man allmänt först och särskilt sist.

Arv

Vissa egenskaper ärvs nedåt i dokumentet, andra inte.

ÄrvsÄrvs inte
color, font-family, font-size, line-height, text-alignmargin, padding, border, background, width, display

Tumregeln: det som handlar om text ärvs, det som handlar om lådan gör det inte. Därför räcker det att sätta typsnittet en gång på body. Och därför måste du sätta background på varje element som ska ha en – den droppar inte ner av sig själv.

font: inherit på formulärfält är ett undantag värt att kunna: fält ärver inte typsnittet automatiskt, så utan den raden ser ditt formulär ut som 1998.

Om !important

!important går förbi hela specificitetsräkningen. Det löser problemet en gång och gör nästa problem svårare, eftersom det enda som slår ett !important är ett till.

Behöver du det betyder det nästan alltid att någon selektor längre upp är för specifik. Sänk den i stället. I Projekt 2 ligger "inga !important" på utmaningsnivå.

Prova själv

Skriv två regler som träffar samma element – en med elementselektor och en med klass – och ge dem olika färg. Gissa vilken som vinner innan du laddar om. Byt sedan ordning på dem och gissa igen.

4. Felsökning i DevTools

Att gissa varför en regel inte fungerar är slöseri. Webbläsaren kan visa dig svaret.

Öppna: F12, eller högerklicka på elementet och välj Inspektera.

Elements och Styles

Till vänster ser du HTML:en, till höger alla regler som träffar det markerade elementet, i ordning: mest specifik överst. Tre saker att titta efter:

Ändra live

Du kan klicka i värdena och skriva nya. Sidan uppdateras direkt, ingenting sparas. Det är det snabbaste sättet att prova sig fram till ett värde – och sedan skriver du in det i din riktiga stilmall.

Bocka i och ur kryssrutan bredvid en deklaration för att stänga av den. Det svarar på frågan "vad gör den här raden egentligen?" på en sekund.

Längst ned i Styles ligger en figur med lådans fyra lager och måtten i. Den svarar på "varför är det här elementet 340 pixlar brett när jag sa 300?" utan att du behöver räkna själv.

Prova själv

Inspektera en länk i din navigation. Hitta regeln som ger den sin färg, och läs vilken rad i stil.css den kommer från. Stäng av deklarationen med kryssrutan och se vad som händer.

5. Boxmodellen

Varje element är en låda med fyra lager, inifrån och ut:

+-----------------------------------+
|            margin                 |
|  +-----------------------------+  |
|  |         border              |  |
|  |  +-----------------------+  |  |
|  |  |      padding          |  |  |
|  |  |  +-----------------+  |  |  |
|  |  |  |    content      |  |  |  |
|  |  |  +-----------------+  |  |  |
|  |  +-----------------------+  |  |
|  +-----------------------------+  |
+-----------------------------------+

Padding eller margin? Ska luften ha bakgrundsfärgen är det padding. Ska den skilja elementet från grannen är det margin.

border-box

Det här är områdets viktigaste enskilda rad:

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

Utan den betyder width: 300px att innehållet blir 300 pixlar, och padding och border läggs ovanpå. Ett element med width: 300px, padding: 20px och border: 1px blir då 342 pixlar brett.

Med border-box betyder 300 pixlar 300 pixlar. Sätt raden överst i varje stilmall du skriver, resten av livet.

Kortform

margin: 1rem;                    /* alla fyra sidor */
margin: 1rem 2rem;               /* uppe/nere  höger/vänster */
margin: 1rem 2rem 3rem;          /* uppe  höger/vänster  nere */
margin: 1rem 2rem 3rem 4rem;     /* uppe höger nere vänster – medurs */
Marginalkollaps

Två lodräta marginaler som möts slås ihop till en – den största vinner, de adderas inte. Har ett stycke margin-bottom: 2rem och nästa margin-top: 1rem blir avståndet 2rem, inte 3rem.

Det gäller bara lodrätt, och inte inuti flex- eller grid-behållare. Det är ett av skälen att gap är trevligare än marginaler så fort du har en layout.

Prova själv

Ge ett element width: 300px, padding: 20px och en synlig border. Mät det i DevTools. Ta sedan bort box-sizing-regeln, ladda om och mät igen.

6. Färg

color: darkgreen;              /* namn – 147 stycken finns */
color: #2f6f5e;                /* hex – två tecken per kanal */
color: rgb(47 111 94);         /* rött, grönt, blått 0–255 */
color: hsl(164 40% 31%);       /* nyans, mättnad, ljushet */

Hex är vanligast och det du kommer att se överallt. #2f6f5e är 2f rött, 6f grönt, 5e blått. Korta formen #fff betyder #ffffff.

HSL är det enda av de fyra som går att räkna i huvudet. Samma nyans och mättnad med olika ljushet ger en färgskala som hänger ihop – hsl(164 40% 31%) och hsl(164 40% 45%) är samma färg, ljusare. Det är ett bra sätt att bygga en palett.

box-shadow: 0 1px 3px rgb(31 36 32 / 8%);

Det fjärde värdet efter snedstrecket är alfa: 0 % är osynligt, 100 % är helt täckande.

Kontrast

Färg som ser fin ut på din skärm kan vara oläslig på en annan. Kontrasten mellan text och bakgrund mäts som ett förhållande, och riktvärdet är 4,5:1 för brödtext. DevTools visar värdet när du inspekterar en färgruta.

Vanligaste missen: grå text på vit bakgrund som ser stilren ut och hamnar på 3:1.

Prova själv

Välj tre färger till din sajt: en bakgrund, en textfärg och en accentfärg. Kontrollera kontrasten mellan text och bakgrund i DevTools. Ligger den under 4,5 – mörka texten.

7. Typografi och enheter

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

En stack är en lista över typsnitt i fallande ordning. Webbläsaren tar det första som finns på användarens dator. Sista värdet ska alltid vara en generisk familj – sans-serif, serif eller monospace – så att det finns något kvar att falla tillbaka på. Namn med mellanslag i skrivs inom citattecken.

px, rem och em

EnhetBetyderAnvänd till
pxAbsoluta pixlarKanter och sådant som verkligen ska vara fast
remGånger sidans grundstorlekTypografi och avstånd
emGånger elementets egen storlekSällan. Ihopväxande vid nästling
%Andel av föräldernBredder

Varför rem och inte px? En användare som ställt in större text i webbläsaren får den större om du använder rem. Med px händer ingenting – du har låst storleken över huvudet på någon som behöver den. 1rem är normalt 16 pixlar.

em växer ihop: ett element med font-size: 1.2em inuti ett annat med 1.2em blir 1,44 gånger. Det är sällan det du vill.

line-height utan enhet

line-height: 1.6;

Skriv den utan enhet. Då betyder den 1,6 gånger elementets egen textstorlek, och den ärvs som faktor i stället för som fast värde. Med line-height: 24px får rubriken samma radavstånd som brödtexten, vilket ser fel ut. Riktvärde: 1,5–1,7 för brödtext, tätare för rubriker.

Text blir också svårläst i långa rader. Runt 60–75 tecken är lagom:

p, li, dd {
  max-width: 34rem;
}

clamp

font-size: clamp(1.9rem, 1.2rem + 2.4vw, 2.8rem);

Tre värden: minsta, önskade, största. Rubriken växer med fönstret men aldrig under 1,9rem och aldrig över 2,8rem. Det är ett sätt att få något att skala utan en enda media query.

Prova själv

Sätt font-family, font-size och line-height på body. Ändra sedan font-size på html till 20px och ladda om – allt som är satt i rem ska följa med.

8. Flexbox

Flexbox lägger element i en rad eller en kolumn och fördelar utrymmet mellan dem. Använd den när sakerna hör ihop i en riktning: en meny, en knapprad, ett kort med bild och text bredvid varandra.

.huvudmeny ul {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.5rem;
  list-style: none;
  margin: 0;
  padding: 0;
}

Det är hela navigationen i förlagan. display: flex på behållaren – barnen behöver ingenting.

EgenskapVad den görVanliga värden
flex-directionÅt vilket hållrow (förval), column
justify-contentFördelning längs riktningenflex-start, center, space-between
align-itemsPlacering tvärs riktningenstretch (förval), center, flex-start
flex-wrapFår radbryta?nowrap (förval), wrap
gapAvstånd mellan barnenVilket mått som helst

Det som förvirrar: justify-content och align-items byter håll när du sätter flex-direction: column. De följer riktningen, inte skärmen.

wrap är det viktiga

Utan flex-wrap: wrap pressas barnen ihop tills de blir oläsliga när fönstret smalnar. Med den radbryter de av sig själva. Det är så menyn i förlagan klarar en telefonskärm utan en enda media query, och det är precis vad området handlar om.

gap sätter avstånd mellan barnen, inte utanför det första och sista. Det är nästan alltid det du vill, och det är ett bör-krav i Projekt 2.

På barnen behöver du bara en enda egenskap i det här projektet:

.sok input { flex: 1; }

flex: 1 betyder "ta det som blir över". Sätter du det på ett barn av tre växer just det och de andra behåller sin storlek.

SymptomOrsak
Barnen ligger under varandraflex-direction: column står kvar
Inget radbryterflex-wrap saknas
gap gör ingentingElementet är inte display: flex
Punkterna syns kvar i menynlist-style: none saknas på ul
Menyn ligger inte till vänsterpadding på ul – nollställ den
Prova själv

Gör din navigation till en flex-behållare med wrap och gap. Smalna fönstret tills menyn radbryter. Sätt sedan flex-direction: column och se vad som händer med justify-content.

9. Grid

Grid lägger element i rader och kolumner samtidigt. Använd den när du har ett rutnät eller en sidlayout – alltså när sakerna ska ligga i linje åt två håll.

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

Tre rader, och det är hela kortrutnätet i förlagan.

fr-enheten

fr är en andel av det som blir över.

grid-template-columns: 1fr 1fr 1fr;      /* tre lika breda */
grid-template-columns: 2fr 1fr;          /* dubbelt så bred som den andra */
grid-template-columns: 200px 1fr;        /* en fast, en som tar resten */

auto-fit och minmax

grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));

Läs den inifrån och ut:

Resultatet är ett rutnät som väljer antal kolumner själv: tre på en laptop, en på en telefon, utan att du skrivit en enda media query. Det här är områdets enskilt mest användbara rad.

Placera ett barn över alla kolumner

.kortrutnat > h2 {
  grid-column: 1 / -1;
}

1 / -1 betyder från första linjen till den sista. Rubriken i fågelavsnittet är ett barn till rutnätet precis som artiklarna, och den här raden låter den sträcka sig över hela bredden – i stället för att vi lindar artiklarna i en div som inte betyder något.

Namngivna områden

body {
  display: grid;
  grid-template-areas:
    "topp"
    "innehall"
    "fot";
  grid-template-rows: auto 1fr auto;
  min-height: 100vh;
}

body > header { grid-area: topp; }
body > main   { grid-area: innehall; }
body > footer { grid-area: fot; }

Så är sidans skelett byggt i förlagan. grid-template-areas ritar layouten i text – du ser den i koden. auto 1fr auto gör att toppen och foten tar den plats de behöver och innehållet resten, så att sidfoten hamnar längst ned även på en kort sida. Namngivna områden ligger på utmaningsnivå i Projekt 2.

Fällan: grid-items som vägrar krympa

Ett grid-item har min-width: auto – "bli aldrig smalare än ditt innehåll". Ligger en bred tabell i ett spår växer spåret i stället för att hålla emot, och hela sidan börjar scrolla i sidled.

grid-template-columns: minmax(0, 1fr);

minmax(0, ...) säger att spåret får bli hur smalt som helst. Då är det innehållet som måste hantera trängseln – till exempel genom att scrolla i sin egen ruta:

.tabellsvep {
  overflow-x: auto;
}

Det här är den enda div som lagts till i hela förlagan, och den är motiverad: ingen befintlig struktur kunde bära scrollningen.

Grid eller Flexbox?

SituationVälj
En rad länkar som ska radbrytaFlexbox
Ett kortgalleriGrid med auto-fit
Sidans skelettGrid med grid-template-areas
Ikon och text bredvid varandraFlexbox
Något ska ligga i linje åt två hållGrid

Tumregeln: en riktning är Flexbox, två riktningar är Grid. Går det med båda, ta den som ger minst kod.

Prova själv

Gör ett avsnitt på din sajt till ett rutnät med repeat(auto-fit, minmax(16rem, 1fr)). Dra i fönstret och räkna kolumnerna. Lägg sedan grid-column: 1 / -1 på avsnittets rubrik.

10. CSS-variabler och designsystem

:root {
  --accent: #2f6f5e;
}

a {
  color: var(--accent);
}

Namnet börjar med två bindestreck. :root är dokumentets rot – variabler du lägger där gäller på hela sidan, eftersom de ärvs nedåt precis som color. var(--accent) hämtar värdet, och var(--accent, green) ger ett reservvärde om variabeln saknas.

Vad ett designsystem är

De återkommande värdena, samlade på ett ställe och namngivna efter vad de är till för. Tre skalor räcker för ett projekt av den här storleken:

:root {
  /* Färg */
  --bakgrund: #fbfaf6;
  --yta: #ffffff;
  --text: #1f2420;
  --dov: #5c665e;
  --accent: #2f6f5e;
  --accent-djup: #1e4b3f;
  --linje: #dcdcd2;

  /* Typografisk skala – varje steg ungefär 1,25 gånger det förra */
  --text-liten: 0.875rem;
  --text-bas: 1rem;
  --text-mellan: 1.25rem;
  --text-stor: 1.5rem;

  /* Avståndsskala – fem steg räcker för hela sajten */
  --rum-1: 0.5rem;
  --rum-2: 1rem;
  --rum-3: 1.5rem;
  --rum-4: 2.5rem;
  --rum-5: 4rem;
}

Poängen med en skala är att du slutar hitta på värden. Behöver du luft väljer du --rum-2 eller --rum-3, inte 13px för att det såg lagom ut. Sajten blir jämn på ett sätt som är svårt att peka på men lätt att se.

Namnge efter roll, inte efter värde

--accent går att byta till blått. --gron gör det inte – namnet ljuger så fort du byter. Variabelnamn som säger vad värdet är till för överlever en ommålning, och det är skillnaden mellan ska- och bör-nivå i matrisen.

Mörkt läge

@media (prefers-color-scheme: dark) {
  :root {
    --bakgrund: #141815;
    --yta: #1c221e;
    --text: #e8ede9;
    --accent: #7fc9b2;
  }
}

Ligger allt i variabler byter du bara värdena. Ingen enda regel längre ned i filen behöver skrivas om – de hämtar redan sin färg härifrån. Det är det bästa beviset på att ett designsystem sitter ihop, och det ligger på utmaningsnivå i Projekt 2.

En sak att tänka på: en färg som fungerar mot en ljus bakgrund kan bli oläslig mot en mörk. Knappen i förlagan har därför en egen variabel för sin textfärg, som vänds i mörkt läge.

Så refaktorerar du

Har du redan skrivit stilmallen med hårdkodade värden gör du så här, i den ordningen:

  1. Sök efter en färg du använt på flera ställen.
  2. Lägg den på :root med ett namn som säger vad den är till för.
  3. Byt ut alla förekomster mot var(--namnet).
  4. Ladda om. Ser sidan likadan ut har du gjort rätt.
  5. Ta nästa färg.

Gör en färg i taget och ladda om mellan varje. Byter du tjugo värden på en gång och något går sönder vet du inte vilket.

Prova själv

Lägg de tre färgerna du valde i avsnitt 6 på :root och byt ut dem i din stilmall. Ändra sedan --accent till något helt annat och ladda om – allt som använder accenten ska byta på en gång.

11. Ta det längre

För dig som har ska-kraven på plats och siktar mot C eller A.

A är inte mer CSS

Det är att systemet hänger ihop och att du kan säga varför varje regel ser ut som den gör.

12. Felsökning

27 rader

SymptomTrolig orsakÅtgärd
Stilmallen gör ingenting allslink-raden ligger i body, eller filnamnet stämmer inteRaden hör hemma i head. Jämför filnamnet tecken för tecken
Stilen fungerar på startsidan men inte på de andralink-raden saknas därVarje sida behöver sin egen rad
En regel fungerar, nästa gör det inteSemikolon saknas efter värdet innanSemikolon efter varje deklaration. Felet syns på raden efter
Allt efter en viss punkt slutar gällaEn klammer är ostängdRäkna klamrarna
Min ändring syns inteWebbläsaren visar en sparad versionLadda om med Ctrl + F5
Regeln syns överstruken i DevToolsEn annan regel vinnerLäs vilken. Sänk dess specificitet eller höj din
Färgen slår inte igenomEn id-selektor eller !important vinnerId slår klass. Byt id-selektorn mot en klass
Elementet blir bredare än jag sattpadding och border läggs på breddenbox-sizing: border-box
Avståndet blir mindre än summanMarginalkollaps – två lodräta marginaler blir enAnvänd gap eller padding i stället
Bakgrundsfärgen syns inte på barnenbackground ärvs inteSätt den på det element som ska ha den
Formuläret har fel typsnittFält ärver inte font-familyfont: inherit på input, select, textarea
Rubriken har samma radavstånd som brödtextenline-height satt med enhetSkriv den utan: line-height: 1.6
Texten skalar inte när jag zoomarStorlekarna är satta i pxrem för typografi
Flex-barnen ligger under varandraflex-direction: columnFörvalet är row
Flexbox radbryter inteflex-wrap saknasflex-wrap: wrap
gap gör ingentingElementet är varken flex eller gridgap gäller bara där
Punkterna syns kvar i menynlist-style inte nollställdlist-style: none på ul
Menyn börjar en bit inul har standard-paddingpadding: 0
Grid-kolumnerna blir olika bredafr blandat med fasta värden1fr är en andel av det som blir över, inte en bredd
Rutnätet skalar inteFasta kolumnvärdenrepeat(auto-fit, minmax(16rem, 1fr))
Hela sidan scrollar i sidledEtt grid-item vägrar krympa, ofta en tabellminmax(0, 1fr) på spåret, overflow-x: auto på innehållet
Bilden spränger sin spaltIngen maxbreddimg { max-width: 100%; height: auto; }
Variabeln gör ingentingDefinierad i fel block, eller stavad olikaDefiniera på :root, använd med var(--namn)
var(--namn) syns som textBindestrecken saknas i definitionenTvå bindestreck: --namn
Fokusmarkeringen är bortaoutline: none utan ersättningSätt något annat, eller använd :focus-visible
Knappen är oläslig i mörkt lägeTextfärgen är hårdkodad vitEgen variabel för knapptext, vänd den i mörkt läge
CSS-validatorn klagar på något jag inte skrivitDen läser hela filenLäs radnumret – validatorn pekar rätt

13. Snabbreferens

EgenskapGörAvsnitt
box-sizingRäknar padding och border inåt5
margin, padding, borderLådans lager5
color, backgroundTextfärg, bakgrund6
font-familyTypsnittsstack7
font-sizeTextstorlek. rem7
line-heightRadavstånd, utan enhet7
max-widthStörsta bredd. Läsmått och bilder7
clamp()Minsta, önskade, största7
display: flexEn riktning8
flex-directionrow eller column8
justify-contentFördelning längs riktningen8
align-itemsPlacering tvärs riktningen8
flex-wrapLåt barnen radbryta8
gapAvstånd mellan barnen8, 9
flex: 1Barnet tar det som blir över8
display: gridTvå riktningar9
grid-template-columnsKolumnernas mått9
frAndel av det som blir över9
repeat(auto-fit, minmax(a, b))Rutnät som väljer antal kolumner själv9
grid-template-areasLayouten ritad i text9
grid-column: 1 / -1Sträck över alla kolumner9
minmax(0, 1fr)Spår som får krympa9
overflow-x: autoScrolla i sidled inuti elementet9
--namn / var(--namn)Egen egenskap och uppslag10
:rootDokumentets rot. Här bor variablerna10
:hover, :focus-visibleMuspekare respektive tangentbordsfokus2
:nth-child(even)Varannat barn2
[attribut="värde"]Attributselektor2
@media (prefers-color-scheme: dark)Användarens val av mörkt läge10

14. Ordlista

Klicka på en rad för att visa betydelsen, eller träna på orden med knapparna nedan.

Ordträning

OrdBetyder
regelSelektor plus deklarationsblock
selektorDet som säger vad regeln träffar
deklarationEtt par av egenskap och värde
kaskadenOrdningen webbläsaren avgör krockar i
specificitetHur exakt en selektor är, räknad som id-klass-element
arvAtt textegenskaper faller nedåt i dokumentet
pseudoklassVäljer på tillstånd eller position, som :hover
boxmodellenContent, padding, border, margin
border-boxAtt bredden räknar in padding och border
marginalkollapsTvå lodräta marginaler som blir en
typsnittsstackLista av typsnitt i fallande ordning
remGånger sidans grundstorlek
flexboxLayout i en riktning
gridLayout i två riktningar
frAndel av det utrymme som blir över
gapAvstånd mellan barnen i flex eller grid
egen egenskapCSS-variabel, skriven --namn
tokenEtt namngivet värde i ett designsystem
designsystemDe återkommande värdena, samlade och namngivna