Asemointi CSS:n avulla

Tällä luennolla käsitellään sivun ulkoasun asemointia CSS:n avulla.

Oppimistavoitteet

Tämän luennon jälkeen sinun pitäisi osata:

Arvosanaan vaikuttavat asiat

Saavuttaaksesi arvosanan kolme on sinun ymmärrettävä vähintään lohko- ja tekstitason elementtien ero, float, flexbox ja keskitys. Parhaaseen arvosanaan (5) päästäksesi on lisäksi osattava ainakin grid ja transformointi.

Aihe on käsitelty hyvin myös MDN:n dokumentissa CSS layout.

1. CSS Flow Layout

HTML:n elementit voidaan ryhmitellä kahteen kategoriaan: block-tason elementteihin ja inline-elementteihin. Block-tason elementeillä, joita ovat esimerkiksi div ja p, merkitään osioita tai isompia kokonaisuuksia. Inline-tason elementit, kuten a ja img, ovat pienempi osa joko toista inline-elementtiä tai block-elementtiä.

1.1 Block (lohko) -tason elementti

Kaavio: lohkotason elementit asettuvat allekkain ja vievät koko käytettävissä olevan leveyden

1.2 Inline (teksti) -tason elementti

Kaavio: tekstitason elementit asettuvat vierekkäin samalle riville ja jatkuvat seuraavalle rivin täytyttyä

Normaalisti block-tason elementit järjestyvät allekkain äitilohkon vasempaan laitaan ja inline-elementit vierekkäin, kunnes äitilohkon leveys on täyttynyt. CSS-ominaisuuksilla voidaan kuitenkin irrottaa tietyt elementit perusjärjestyksestä ja asemoida ne sivulle uuteen paikkaan. Katso Visual formatting model.

2. display-ominaisuus

CSS:n display-ominaisuudella voi vaihtaa elementin käyttäytymistapaa. Yksinkertaisimmillaan muutetaan lohko tekstitason elementiksi tai toisin päin.

Tärkeimmät display-ominaisuuden arvot.
ArvoMerkitys
blockLohkotason elementti
inlineTekstitason elementti
inline-blockAsettuu kuten tekstitason elementti, mutta käyttäytyy sisäisesti kuin lohko: leveys, korkeus ja pystymarginaalit toimivat
noneElementtiä ei esitetä sivulla lainkaan eikä se vie tilaa
list-itemListan alkio
flexTekee elementistä flex-säiliön
gridTekee elementistä ruudukon
flow-rootKuten block, mutta muodostaa oman sisältökontekstinsa. Ratkaisee floatin korkeusongelman
display: none piilottaa myös apuvälineiltä

Arvolla none merkitty elementti katoaa kokonaan: ruudunlukija ei lue sitä eikä siihen voi siirtyä sarkaimella. Se on siis oikea valinta silloin, kun sisältöä ei todella tarvita, muttei silloin kun jotain halutaan piilottaa vain visuaalisesti.

2.1 Esimerkki block- ja inline-elementeistä

Lisätietoa: Inline formatting context (MDN).

3. Laatikkomallin koko

Asemoinnin yhteydessä on tärkeä ymmärtää, miten CSS laskee elementin koon. Katso CSS box model sekä CSS-luennon luku 9.

width: auto ei ole sama kuin width: 100%

Lohkon oletusarvo on width: auto, jolloin se täyttää käytettävissä olevan tilan marginaalit huomioiden. Arvo 100% taas tarkoittaa äitilohkon koko leveyttä, jolloin marginaalit tulevat sen päälle ja lohko vuotaa reunan yli. Jos tarvitset arvoa 100%, käytä sen kanssa box-sizing: border-box.

3.1 Box-sizing-esimerkki

4. Listojen muotoilu

Listat eli ul- tai ol-elementti ja niihin liittyvä li-elementti ovat joskus kinkkisiä muotoilla.

4.1 Listamuotoiluesimerkki

5. Liu'utus (float)

float-ominaisuudella voidaan irrottaa lohko normaalista dokumenttivirrasta ja liu'uttaa se vasempaan tai oikeaan laitaan. Muu sisältö kiertää liu'utetun lohkon rinnalle, ellei tätä kielletä clear-ominaisuudella.

float ja clear.
OminaisuusArvotMerkitys
floatleft, right, noneLiu'uttaa lohkon reunaan, ja muu sisältö kiertää sen
clearleft, right, both, noneEstää elementtiä tulemasta liu'utetun sisällön rinnalle
Liu'utettu lapsi ei kasvata äitilohkon korkeutta

Tämä on floatin klassisin ongelma: kun lohkon ainoa sisältö on liu'utettu, äiti jää nollan korkuiseksi eivätkä sen tausta ja reunat näy. Ratkaisu on yksi rivi äitilohkolle:

.sisaltaa-floatin {
  display: flow-root;
}

Vanhoissa ohjeissa tämä tehdään niin sanotulla clearfix-tempulla, jossa ::after-pseudoelementille annetaan clear: both. flow-root tekee saman siististi ja on tuettu kaikissa yleisissä selaimissa.

Mihin float on nykyään tarkoitettu

float on alun perin tehty siihen, että teksti kiertää kuvan tai tietolaatikon. Siihen se on edelleen paras työkalu. Monisarakkeisen sivusommittelun tekemiseen käytetään nykyään flexboxia tai gridiä.

5.1 Esimerkki float-ominaisuudesta

Lisätietoa: float ja clear (MDN).

6. Flexbox-asemointi

Flexbox on yksi kätevimpiä ja skaalautuvimpia tapoja tehdä asemointia. Perusongelma asemoinnin kanssa on saada aikaan monisarakkeinen sivusommittelu, ja flexbox tekee sen helpoksi.

order-arvot alkavat nollasta, eivät ykkösestä

order-ominaisuuden oletusarvo on 0, ja arvoksi käy mikä tahansa kokonaisluku, myös negatiivinen. Jos numeroit alkiot ykkösestä alkaen, kaikki ne alkiot joille et anna arvoa menevät ensimmäisiksi, koska niiden arvo on nolla. Negatiivinen arvo siirtää alkion muiden edelle.

order muuttaa vain sen, mitä silmä näkee

order ja row-reverse eivät muuta dokumentin järjestystä. Ruudunlukija lukee sisällön ja sarkain etenee edelleen koodin mukaisessa järjestyksessä, joten näkevä ja näkemätön käyttäjä saavat eri järjestyksen. Saavutettavuusvaatimukset edellyttävät, että järjestys on merkityksellinen myös ilman tyylejä. Kirjoita siis sisältö koodiin siinä järjestyksessä kuin se on tarkoitettu luettavaksi ja käytä order-ominaisuutta vain pieniin siirtoihin, jotka eivät muuta luettavaa järjestystä.

6.1 Flexbox-esimerkki 0

6.2 Flexbox-esimerkki 1

6.3 Alkioiden koko: flex-grow, flex-shrink ja flex-basis

Yksittäisen alkion laajenemiseen ja kutistumiseen vaikutetaan kolmella ominaisuudella.

Alkion koon määräävät ominaisuudet.
OminaisuusMerkitysOletus
flex-grow Kuinka suuren osuuden ylijäävästä tilasta alkio saa. Arvo 0 tarkoittaa, ettei alkio laajene lainkaan 0
flex-shrink Kuinka herkästi alkio kutistuu, kun tila loppuu. Arvo 0 estää kutistumisen 1
flex-basis Alkion perusleveys ennen laajentamista ja kutistamista. Ylimäärittelee width-ominaisuuden pääakselin suunnassa. Arvo auto käyttää elementin omaa width-arvoa auto

Useimmiten nämä kolme kirjoitetaan yhteen flex-lyhennemerkinnällä, jonka arvot ovat järjestyksessä flex-grow, flex-shrink ja flex-basis:

.alkio {
  flex: 0 1 auto;   /* oletus: ei laajene, kutistuu, perusleveys width-arvosta */
  flex: initial;    /* sama kuin 0 1 auto */
  flex: auto;       /* sama kuin 1 1 auto: laajenee ja kutistuu */
  flex: none;       /* sama kuin 0 0 auto: ei laajene eikä kutistu */
  flex: 1;          /* sama kuin 1 1 0: kaikki alkiot jakavat tilan tasan */
}
flex: 1 on se, jota tarvitset useimmin

Kun annat kaikille alkioille arvon flex: 1, ne jakavat käytettävissä olevan tilan tasan sisällön määrästä riippumatta. Jos yhden pitää olla kaksi kertaa leveämpi, anna sille flex: 2.

.container {
  display: flex;
  gap: 1em;
}

.sivupalkki { flex: 1; }
.sisalto    { flex: 3; }
Miksi alkio ei kutistu, vaikka flex-shrink on 1?

Flex-alkion oletusarvo on min-width: auto, mikä estää sitä kutistumasta sisältönsä vähimmäisleveyttä pienemmäksi. Pitkä sana tai leveä taulukko aiheuttaa siksi ylivuodon, vaikka kaikki muu näyttäisi oikealta. Korjaus on antaa alkiolle min-width: 0.

.alkio {
  flex: 1;
  min-width: 0;
}

6.4 Flexbox-esimerkki 2

6.5 Flexbox-esimerkki 3

6.6 Tasaus ja keskitys flexboxissa

Alkioiden tasaus poikkiakselin suunnassa tapahtuu align-items-ominaisuudella:

align-items.
ArvoMerkitys
stretchVenyttää alkiot äitielementin korkeuteen. Oletus
flex-startTasaa alkuun eli ylös, jos flex-direction on row
flex-endTasaa loppuun
centerKeskittää
baselineTasaa tekstin perusviivan mukaan

Yksittäinen alkio voi ylimääritellä oman tasauksensa poikkiakselin suunnassa align-self-ominaisuudella. Sen arvot ovat samat kuin align-items-ominaisuudella, ja lisäksi auto, joka on oletus ja tarkoittaa säiliön arvon perimistä.

Alkioiden tasaus pääakselin suunnassa tapahtuu justify-content-ominaisuudella. Käytettävissä ovat samat flex-start, flex-end ja center kuin edellä, sekä lisäksi kolme tilanjakoarvoa:

justify-content-ominaisuuden tilanjakoarvot.
ArvoMerkitys
space-betweenJakaa tyhjän tilan tasan alkioiden väleihin, muttei jätä tilaa kumpaankaan päähän
space-aroundTasaa saman määrän tyhjää kaikkien alkioiden sivuille, jolloin alussa ja lopussa on puolet vähemmän kuin alkioiden välissä
space-evenlyKuten edellinen, mutta alussa ja lopussa on sama määrä tilaa kuin alkioiden välissä

6.7 Flexbox-esimerkki 4

Lisätietoa: Aligning items in a flex container (MDN).

6.8 Flexboxiin liittyvät CSS-ominaisuudet

Yhteenveto.
OminaisuusAsetetaanMerkitys
display: flexSäiliöönTekee elementistä flex-säiliön
flex-directionSäiliöönPääakselin suunta: riveittäin vai sarakkeittain, ja kumpaan suuntaan
flex-wrapSäiliöönRivitetäänkö vai tungetaanko kaikki peräkkäin
gapSäiliöönAlkioiden väli
justify-contentSäiliöönTasaus pääakselin suunnassa
align-itemsSäiliöönTasaus poikkiakselin suunnassa
flexAlkioonLyhennemerkintä ominaisuuksille flex-grow, flex-shrink ja flex-basis
align-selfAlkioonYksittäisen alkion tasaus poikkiakselin suunnassa
orderAlkioonAlkioiden esitysjärjestys

Voit harjoitella flexboxia Flexbox Froggy -pelillä.

7. CSS-ruudukko (grid)

Gridillä voi määritellä sivulle tai sen osaan ruudukon, jonka eri ruutuihin voi sijoittaa haluttuja lohkoja. Ruudukko koostuu riveistä ja sarakkeista.

.ruudukko {
  display: grid;
  grid-template-columns: 1fr 3fr;   /* kaksi saraketta suhteessa 1:3 */
  gap: 1em;
}

7.1 Itsestään mukautuva ruudukko

Yhdistelmä repeat(), auto-fit ja minmax() on gridin hyödyllisin yksittäinen rakenne. Se sovittaa sarakkeiden määrän tilan mukaan ilman yhtäkään mediakyselyä:

.galleria {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(15em, 1fr));
  gap: 1em;
}

Sääntö tarkoittaa: tee niin monta saraketta kuin mahtuu, kunkin vähimmäisleveys on 15 em, ja jaa ylijäävä tila sarakkeiden kesken tasan. Kapealla näytöllä sarakkeita on yksi, leveällä niitä on useita.

7.2 Ruutujen nimeäminen

Suositeltavin tapa sijoittaa lohkot ruudukkoon on nimetä alueet grid-template-areas-ominaisuudella ja sijoittaa lohkot nimien perusteella. Näin tyylitiedostosta näkee yhdellä silmäyksellä, miltä sivu näyttää.

.sivu {
  display: grid;
  grid-template-columns: 12em 1fr;
  grid-template-areas:
    "otsake  otsake"
    "valikko sisalto"
    "alatunniste alatunniste";
  gap: 1em;
}

header { grid-area: otsake; }
nav    { grid-area: valikko; }
main   { grid-area: sisalto; }
footer { grid-area: alatunniste; }

Yksittäisiä lohkoja voi sijoittaa myös ruutunumeroilla ominaisuuksilla grid-column ja grid-row, esimerkiksi grid-column: 1 / 3 ulottaa lohkon ensimmäisestä viivasta kolmanteen eli kahden sarakkeen yli.

Grid ja flexbox yhdessä

Gridillä tehdään kaksiulotteinen rakenne, jossa on sekä rivejä että sarakkeita. Flexbox sopii yksiulotteiseen: yhteen riviin tai yhteen sarakkeeseen. Tavallinen ratkaisu on tehdä sivun päälayout gridillä ja yksittäisten osien sisältö flexboxilla.

Alkioiden tasaus ruuduissaan tapahtuu ominaisuuksilla justify-items ja align-items, tai molemmat kerralla lyhenteellä place-items.

7.3 Grid-esimerkki

Voit harjoitella gridiä Grid Garden -pelillä.

8. Keskittäminen

Keskittäminen vaatii erilaisia toteutustapoja sen mukaan, millaista sisältöä keskitetään. Yleisimmät tavat on käyty läpi MDN:n dokumentissa Box alignment.

8.1 Yleiskäyttöiset tavat

Nämä kaksi keskittävät sisällön sekä vaaka- että pystysuunnassa:

.keskitys {
  display: grid;
  place-items: center;
}
.keskitys2 {
  display: flex;
  align-items: center;      /* pystysuunnassa */
  justify-content: center;  /* vaakasuunnassa */
}
Varo virheellistä flex-direction-arvoa

Vanhoissa ohjeissa näkee flex-keskityksessä rivin flex-direction: center. Sellaista arvoa ei ole olemassa: flex-direction hyväksyy vain arvot row, row-reverse, column ja column-reverse. Rivi hylätään kokonaan, eikä sitä tarvita: keskitys syntyy kahdesta muusta määrityksestä.

Pelkkä vaakakeskitys onnistuu yksinkertaisemmin, kun lohkolla on leveys:

.lohko {
  max-width: 40em;
  margin-left: auto;
  margin-right: auto;
}

8.2 Sisällön mittainen lohko

Tavallinen ongelma on saada keskitettyä kuvateksti tai muu sisältö, joka ei täytä koko lohkon leveyttä. Lohkon, jonka display-tyyppi on block, leveys on oletuksena kaikki käytettävissä oleva tila. Jos elementin esitystavaksi vaihdetaan display: inline-block, se käyttäytyy sisäisesti kuin lohko mutta asemoituu kuten tekstitason elementti, jolloin sen koko määräytyy sisällön mukaan.

<figure class="inlineblock">
  <img src="hamahakki.jpg" alt="Hämähäkki rinkan kankaalla" />
  <figcaption>Hämähäkki</figcaption>
</figure>
.inlineblock {
  display: inline-block;
  text-align: center;
}

Sama onnistuu nykyään myös arvolla width: fit-content, jolloin elementti pysyy lohkona.

text-align asetetaan lohkoon

text-align vaikuttaa lohkon sisällä olevaan tekstiin, joten se asetetaan lohkoon (block tai inline-block). Jos yrität asettaa sen esimerkiksi strong-elementille, joka on tekstitason elementti, mitään ei tapahdu.

8.3 Keskitysesimerkki

Lisätietoa: Center an element (MDN) ja Centering in CSS: A Complete Guide.

9. Transformointi

transform-ominaisuudella elementtiä voi siirtää, kääntää, vääntää, suurentaa ja pienentää. transform-origin asettaa pisteen, jonka suhteen muunnokset tehdään; oletus on elementin keskipiste.

Tärkeimmät muunnosfunktiot.
FunktioMerkitys
rotate()Kiertää elementtiä kaksiulotteisesti, esimerkiksi rotate(15deg)
rotateX(), rotateY()Kiertää X- tai Y-akselin ympäri
scale()Skaalaa elementin kokoa, esimerkiksi scale(1.5)
translate()Siirtää elementtiä vaaka- ja pystysuunnassa
translateX(), translateY()Siirtää vain toiseen suuntaan
skew()Vääntää elementtiä
Transform ei siirrä elementtiä dokumenttivirrassa

Muunnettu elementti vie edelleen alkuperäisen tilansa, vaikka se näyttää siirtyneen. Muut elementit eivät siis siirry sen tieltä, ja muunnettu elementti voi peittää niitä. Tämä on tarkoituksellista: siksi muunnokset ovat nopeita eivätkä aiheuta koko sivun uudelleenlaskentaa.

Transform luo uuden sisältölohkon

Jos elementillä on transform-määritys, sen sisällä oleva position: fixed suhteutuu siihen eikä näkymäikkunaan. Sama koskee ominaisuuksia filter ja perspective. Tämä on yleinen syy siihen, miksi kiinnitetty valikko lakkaa yhtäkkiä toimimasta.

Muista liikkeen vähentäminen

Jos animoit muunnoksia, kirjoita animaatio prefers-reduced-motion: no-preference -kyselyn sisään. Katso mediatyyppiluennon luku 3.2.

9.1 Transform-esimerkki

Lisätietoa: Using CSS transforms (MDN).

10. CSS-sarakkeet (columns)

CSS:llä on erittäin helppo toteuttaa sanomalehtityyppisiä sarakkeita, joissa teksti jatkuu sarakkeesta toiseen. Käytä column-count-ominaisuutta, jos tiedät montako saraketta haluat, tai column-width-ominaisuutta, jos tiedät kuinka leveitä sarakkeita haluat. Selain tekee automaattisesti sopivan määrän tai sopivan levyisiä sarakkeita.

Tällä tavalla ei voi määrätä, mikä elementti tulee mihinkin sarakkeeseen. Jos tarvitset sitä, käytä gridiä.

Sarakeominaisuudet.
OminaisuusMerkitys
column-countSarakkeiden lukumäärä
column-widthSarakkeen tavoiteleveys
column-gapSarakkeiden väli
column-ruleSarakkeiden välissä oleva viiva. Sama merkintätapa kuin border-ominaisuudella
column-spanArvolla all lohko laajenee kaikkien sarakkeiden yli. Muita vaihtoehtoja ei ole, eli lohkoa ei voi laajentaa vain osan sarakkeista yli
break-insideArvolla avoid estetään lohkon jakautuminen kahdelle sarakkeelle
Sarakkeet ja luettavuus

Sarakkeet toimivat hyvin paperilla mutta huonosti näytöllä, jos sarake on korkeampi kuin näkymäikkuna: lukijan on vieritettävä alas ja takaisin ylös jokaisen sarakkeen kohdalla. Käytä sarakkeita vain lyhyeen sisältöön, tai rajaa ne leveälle näytölle column-width-ominaisuudella.

10.1 Sarake-esimerkki

11. Asemointi position-ominaisuudella

position-ominaisuudella määritellään, kuinka elementti sijoittuu sivulle. Käytä sitä vain erikoistapauksissa. Useimmiten on parempi käyttää flexboxia, gridiä tai floatia.

position-ominaisuuden arvot.
ArvoMerkitys
staticNormaali sijoittuminen. Oletus. top, left, right ja bottom eivät vaikuta
relativeSijoittuminen suhteessa elementin omaan normaaliin paikkaan
absoluteSijoittuminen suhteessa lähimpään asemoituun esi-isään
fixedSijoittuminen suhteessa näkymäikkunaan. Ei vieri sisällön mukana
stickyKuten relative, kunnes vieritys saavuttaa annetun rajan, jonka jälkeen elementti käyttäytyy kuin fixed

Sijainti annetaan ominaisuuksilla top, bottom, left ja right, jotka kertovat etäisyyden kustakin reunasta. z-index-ominaisuudella määritellään, mikä elementti on päällimmäisenä.

11.1 Absoluuttinen asemointi (absolute)

Absoluuttisessa asemoinnissa elementti sijoitetaan top-, left-, right- ja bottom-ominaisuuksilla välittämättä normaalista sijainnistaan. Se ei myöskään vie tilaa muilta elementeiltä. Elementti vierii dokumentin sisällön mukana.

Mihin absoluuttinen asemointi suhteutuu?

Elementti sijoittuu suhteessa lähimpään esi-isään, jonka position on jokin muu kuin static. Kelvollisia ankkureita ovat siis relative, absolute, fixed ja sticky. Jos sellaista esi-isää ei ole, elementti suhteutuu koko dokumenttiin.

Käytännössä ankkuri tehdään lähes aina antamalla äitilohkolle position: relative ilman koordinaatteja. Se ei siirrä äitilohkoa mihinkään mutta tekee siitä asemoidun.

.aitilohko {
  position: relative;   /* tekee ankkurin, ei siirrä mitään */
}

.vasenylanurkka {
  position: absolute;
  top: 10%;
  left: 10%;
  width: 30%;
}

11.2 Kiinnitetty asemointi (fixed)

Kiinnitetyssä asemoinnissa elementti sijoitetaan suhteessa näkymäikkunaan, eikä se vieri dokumentin sisällön mukana. Paljon tilaa vieviä lohkoja ei yleensä kannata kiinnittää, koska ne vievät tilaa sivun muulta sisällöltä — erityisesti kapealla näytöllä.

.vasenylanurkka {
  position: fixed;
  top: 10%;
  left: 10%;
  width: 30%;
}
Poikkeus: transform rikkoo kiinnityksen

Jos jollakin esi-isällä on transform, filter tai perspective, fixed-elementti suhteutuu siihen eikä näkymäikkunaan, ja alkaa vieriä sisällön mukana. Katso luku 9.

11.3 Suhteellinen asemointi (relative)

Suhteellisessa asemoinnissa elementti siirretään top-, left-, right- ja bottom-ominaisuuksilla suhteessa sen omaan normaaliin sijaintiin. Elementti vie edelleen alkuperäisen tilansa, eivätkä muut elementit siirry sen tieltä.

.ylos {
  position: relative;
  top: -1em;
}

11.4 Tarttuva asemointi (sticky)

sticky yhdistää kaksi edellistä: elementti on normaalilla paikallaan, kunnes vieritys saavuttaa annetun rajan, jonka jälkeen se jää siihen kiinni. Tavallisin käyttö on kiinnittyvä otsikko tai taulukon otsikkorivi.

thead th {
  position: sticky;
  top: 0;          /* raja on pakollinen, muuten mitään ei tapahdu */
  background-color: #ffffff;
}

Kaksi asiaa kannattaa muistaa. Vähintään yksi rajoista (top, bottom, left tai right) on annettava, muuten elementti käyttäytyy kuin relative. Ja elementti pysyy kiinni vain oman äitielementtinsä alueella: kun äiti vierii pois näkyvistä, myös tarttuva elementti lähtee mukana.

11.5 Asemointi z-suunnassa

z-index-ominaisuudella määritellään elementin taso. Mitä suurempi arvo, sitä lähempänä elementti on käyttäjää. Negatiivinen arvo vie elementin taakse.

z-index ei vaadi position-määritystä

Vanhoissa ohjeissa sanotaan, että z-index toimii vain asemoitujen elementtien kanssa. Se toimii nykyään myös flex- ja grid-alkioissa ilman position-arvoa. Muissa tapauksissa elementille on annettava jokin muu kuin position: static; tavallisesti relative ilman koordinaatteja riittää.

11.6 Position-esimerkki

Lisätietoa: position (MDN).

12. Asemoinnin suunnittelu

CSS antaa useita erilaisia mahdollisuuksia WWW-sivujen visuaaliseen muotoilemiseen. Käytetystä tavasta huolimatta sivu kannattaa suunnitella seuraavan ohjeistuksen mukaan.

  1. Mieti sivun eri osien (navigointi, koristeet, sisältö) paikat tarkkaan.
  2. Jaa sivun rakenne loogisiin lohkoihin. Rakenne voi olla esimerkiksi tällainen:
    • yläreunassa lohko perusnavigoinnille ja ylätunnistetiedoille;
    • vasemmassa reunassa tarkempi linkkilista asiakirjan sisältöön;
    • oikeassa reunassa sivun varsinainen sisältö.
  3. Sijoita sivun pääsisältö ensimmäiseksi html-tiedostoon, jos suinkin mahdollista. Tämä ratkaisee samalla sen, missä järjestyksessä ruudunlukija lukee sivun ja mihin sarkain siirtyy ensin.
  4. Merkitse lohkot header-, nav-, main- ja footer-elementeillä, ja käytä div-elementtiä vasta kun merkityksellistä elementtiä ei löydy. Katso HTML5-luennon luku 7.
  5. Tee päälayout gridillä tai flexboxilla, jos layout tarvitsee useita eri osille sivua sijoitettavia alueita.
  6. Jollain tavalla asemoidun lohkon sisällön asemointiin voi käyttää mitä tahansa asemointitapaa. Sivun päälayout voidaan esimerkiksi määritellä gridillä, navigointilohkon sisällä käyttää flexboxia ja pääsisällössä floatia.
  7. Käytä position-ominaisuutta vain, jos mikään muu tapa ei toimi.
  8. Tarkista lopuksi, miten layout käyttäytyy kapealla näytöllä. Katso mediatyyppien ja mediakyselyjen luento.
Testaa sivu ilman tyylejä

Nopein tapa varmistaa, että rakenne ja lukujärjestys ovat kunnossa, on katsoa sivua ilman tyylitiedostoa. Jos sisältö on silloin luettavassa järjestyksessä, se on sitä myös ruudunlukijalla riippumatta siitä, mihin CSS on sen siirtänyt.

13. Lisätietoa

Käyttäjien kommentit

Kommentoi Lisää kommentti