Modul 4 · Kapitel 4.3
Responsiva mått och bilder
Låt innehållet anpassa sig innan du skriver media queries.
Mål
Efter kapitlet ska du kunna...
- välja mellan vanliga CSS-enheter
- begränsa radlängd med
max-width - använda
min(),max()ochclamp() - göra bilder flexibla utan att förvränga dem
Två slags mått
Fasta och relativa
| Fast | Relativt |
|---|---|
px | rem, em, %, vw, vh |
| Samma CSS-mått. | Beror på något annat. |
px
Ett fast CSS-mått
.card { border-width: 2px; }pxpassar bra för tunna linjer och små detaljer.- Ett värde i
pxräknas inte från förälderns storlek.
rem
Räknas från html-elementet
html { font-size: 16px; }
.card { padding: 2rem; }htmlär dokumentets rotelement.- Webbläsarens standard är ofta
16px, men användarens inställningar kan ändra den. 2rem = 2 × 16px = 32pxnär roten är 16px.rempassar ofta för textstorlek och avstånd.
em
Beror på var em används
.parent { font-size: 20px; }
.button {
font-size: 1em;
padding: 1em;
}font-size: 1emräknas från den textstorlek som ärvs från föräldern: här 20px.padding: 1emräknas sedan från knappens egen beräknade textstorlek: här också 20px.
Procent
Beror på CSS-egenskapen
.parent { width: 600px; }
.child { width: 50%; }- För
widthräknas procent från förälderns tillgängliga bredd. - Procent räknas inte alltid från föräldern. Regeln beror på vilken CSS-egenskap som används.
Viewport
vw och vh
1vwär 1% av webbläsarfönstrets bredd.1vhär 1% av webbläsarfönstrets höjd.- De räknas inte från elementets förälder.
.hero { min-height: 60vh; }
h1 { font-size: 5vw; }Jämför enheter
Vad räknas måttet från?
Staplarna visar värden omräknade till pixlar.
Läsbar radlängd
Begränsa textens bredd
main {
max-width: 70ch;
margin-inline: auto;
}70ch motsvarar ungefär bredden av 70 nollor i den aktuella fonten.
Interaktiv radlängd
Ändra max-width
max-width: 70ch;Brödtext behöver en lagom radlängd. Om raden blir för lång måste ögat resa långt tillbaka till nästa rad, vilket gör texten jobbigare att läsa.
min()
Webbläsaren väljer det minsta värdet
width: min(100% - 2rem, 50rem);Textytan använder det minsta av de två beräknade värdena.
- Först beräknas
100% - 2rem. - Sedan jämförs resultatet med maxvärdet.
min()använder det mindre värdet.
max()
Välj det största värdet
.box {
padding-inline: max(1rem, 4vw);
}Avståndet blir aldrig mindre än 1rem, men kan växa med fönstret.
clamp()
Minsta, flexibelt, största
h1 {
font-size: clamp(2rem, 5vw, 4rem);
}2remflexibelt5vwmax4remInteraktiv clamp
Ändra alla tre värden
font-size: clamp(2rem, 5vw, 4rem);Responsiv rubrik
Responsiva bilder
Bilden får krympa
img {
max-width: 100%;
height: auto;
}- Bilden blir aldrig bredare än sin container.
height: autobevarar proportionerna.
Interaktiv bildbredd
Krymp bildens container
img {
max-width: 100%;
height: auto;
}Bilden behåller samma proportioner.

object-fit
Kräver en bestämd bildruta
.image-box {
width: 100%;
height: 12rem;
}
.image-box img {
width: 100%;
height: 100%;
object-fit: cover;
}Utan en bestämd bredd och höjd märks object-fit ofta inte.
Interaktiv object-fit
Jämför bildlägen
object-fit: fill;
Kontrollfråga
Vad gör height: auto på bilden?
Bevarar den bildens proportioner eller beskär den bilden?
Svar: proportionerna bevaras när bredden ändras.
Prova själv
Gör sidan mer följsam
- Sätt en läsbar
max-widthpå huvudinnehållet. - Byt stora fasta avstånd mot
rem. - Gör en bild responsiv.
- Testa
clamp()på huvudrubriken.
Sammanfattning
Kom ihåg
- Relativa enheter räknas från olika utgångspunkter.
max-widthbegränsar radlängd.clamp()ger ett flexibelt värde med två gränser.max-width: 100%ochheight: autogör bilder följsamma.object-fitstyr en bild inuti en bestämd ruta.