CSS (Cascading Style Sheets)
ITKP1011 Web-julkaiseminen · korjattu ja laajennettu laitos
Seuraavassa tarkastellaan CSS-tyylikielen käyttöä. Tarkemmin aiheesta voi lukea MDN:n artikkeleista Styling basics ja CSS reference sekä kurssisivuston CSS-dokumentaatiosta.
Tämän luennon jälkeen sinun pitäisi osata:
- liittää tyylitiedosto dokumenttiin ja perustella, miksi tyylit pidetään erillisessä tiedostossa;
- kirjoittaa tyylisääntöjä elementti-, luokka- ja tunnistevalitsimilla;
- selittää, mitä perintä tarkoittaa ja mitkä ominaisuudet periytyvät;
- päätellä, mikä sääntö voittaa ristiriitatilanteessa, ja käyttää käsitteitä kaskadi ja spesifisyys;
- valita mittayksikön perustellusti ja välttää
px-yksikköä fonttikoossa; - määritellä värit ja tarkistaa tekstin ja taustan kontrastin;
- selittää laatikkomallin osat ja marginaalien yhdistymisen;
- tutkia ja kokeilla tyylejä selaimen kehittäjätyökaluilla.
Sivun asettelu eli palstat, navigointivalikon sijoittelu ja elementtien järjestäminen käsitellään omalla luennollaan, samoin mediakyselyt ja tyylien kohdistaminen eri laitteille. Tällä luennolla opetellaan CSS:n perusteet: valitsimet, kaskadi, yksiköt, värit ja laatikkomalli.
1. Perusteet
Dokumentin rakenne määritellään HTML:n avulla ja ulkoasu CSS:n avulla. Jaosta seuraa useita etuja:
- Sisältö on hyvin tulkittavissa ja saatavissa näyttölaitteesta riippumatta.
- Sisältö on helposti muunnettavissa toiseen muotoon.
- HTML-dokumentin rakenne pysyy yksinkertaisena ja luettavana.
- Koko sivustolla on yhtenäinen ulkoasu.
- Ulkoasu päivitetään yhdestä paikasta. Yhden tiedoston muuttaminen muuttaa kaikki sivut kerralla.
- Sama dokumentti voidaan esittää eri tavoin eri tilanteissa: graafisessa selaimessa, puhelimessa, ruudunlukijalla tai tulostettuna.
Sivut on testattava useammalla kuin yhdellä selaimella. Sekä HTML- että CSS-koodi kannattaa lisäksi tarkistaa validaattorilla:
- W3C:n HTML-validaattori
- W3C:n CSS-validaattori, joka ottaa vastaan osoitteen, tiedoston tai suoraan liitetyn koodin
- Web Developer -laajennuksesta löytyvät molemmat valikon kohdasta Tools
2. Tyylitiedoston linkittäminen dokumenttiin
Tyylitiedosto (*.css) liitetään HTML-dokumenttiin
link-elementillä head-elementin sisällä:
<link rel="stylesheet" href="tyylit.css" />
Attribuutti type="text/css" oli pakollinen vanhoissa
dokumenttityypeissä. HTML5:ssä se on tarpeeton, ja sen voi jättää pois. Kirjoita
rel-attribuutin arvo pienillä kirjaimilla.
Käytä tyylitiedostoon suhteellista osoitetta, jolloin sivusto toimii sellaisenaan myös omalla koneellasi:
<link rel="stylesheet" href="tyylit.css" />
<link rel="stylesheet" href="../tyylit.css" />
<link rel="stylesheet" href="/css/tyylit.css" />
Samaan dokumenttiin voi liittää useita tyylitiedostoja. Ne otetaan käyttöön siinä järjestyksessä, jossa ne on liitetty, joten myöhempi tiedosto voi ylikirjoittaa aiemman määrityksiä.
link-elementin media-attribuutilla ja
@media-säännöllä tyylejä voi kohdistaa esimerkiksi vain tulostukseen
tai vain kapealle näytölle. Nämä käsitellään omalla luennollaan.
Vanhoissa ohjeissa esitellään title-attribuutti ja
rel="alternate stylesheet", joilla käyttäjä voisi vaihtaa sivuston
ulkoasua selaimen valikosta. Vain Firefox on koskaan tukenut tätä kunnolla, eikä
ominaisuutta käytännössä käytetä. Älä anna
link-elementille title-attribuuttia: se tekee
tyylistä vaihdettavan ja voi johtaa siihen, ettei tyyliä oteta käyttöön lainkaan.
2.1 style-elementti
Tyylejä voi lisätä yhteen dokumenttiin style-elementillä:
<head>
<title>Esimerkki</title>
<style>
h1 { color: blue; background-color: yellow; }
</style>
</head>
style-elementin käyttöä ei voi suositella, koska se rajaa vaikutuksen
yhteen dokumenttiin. Sama onnistuu yhtä helposti ulkoisella tyylitiedostolla, joka
toimii koko sivustolla.
Älä käytä style-elementtiä tällä kurssilla.
2.2 style-attribuutti
Tyylejä voi lisätä yhteen elementtiin style-attribuutilla:
<h1 style="color: blue; background-color: yellow;">Otsikko</h1>
style-attribuutin käyttöä ei voi suositella, koska se rajaa
vaikutuksen yhteen elementtiin ja sekoittaa ulkoasun takaisin rakenteen sekaan. Sama
onnistuu ulkoisella tyylitiedostolla ja luokalla.
Älä käytä style-attribuuttia tällä kurssilla.
2.3 Tyylien liittäminen toisesta tyylitiedostosta
@import-säännöllä voi liittää omaan tyylitiedostoon toisen
tyylitiedoston sisällön. Näin yhteiset tyylit voi pitää yhdessä tiedostossa ja
sivukohtaiset lisäykset toisessa.
@import "yhteiset.css";
@import url("varit.css");
Sääntöjen on oltava tiedoston ensimmäisinä riveinä, ennen mitään
tyylisääntöä. Ainoa asia, joka saa olla ennen niitä, on
@charset-sääntö.
Selain löytää @import-säännön vasta ladattuaan ja luettuaan
ensimmäisen tiedoston, joten tiedostot haetaan peräkkäin eikä rinnakkain. Useampi
link-elementti on siksi nopeampi. Käytä
@import-sääntöä silloin, kun haluat koota tyylit yhteen tiedostoon,
etkä pysty muuttamaan HTML-dokumentteja.
3. Kaskadi: mikä sääntö voittaa?
CSS:n nimessä oleva sana cascading tarkoittaa sitä, että samaan elementtiin voi osua useita sääntöjä ja niiden ristiriidat ratkaistaan tietyssä järjestyksessä. Ratkaisu tehdään kolmessa vaiheessa, ja seuraavaan siirrytään vasta jos edellinen ei ratkaissut asiaa.
3.1 Vaihe 1: lähde ja tärkeys
| Järjestys | Lähde |
|---|---|
| 1 (heikoin) | Selaimen oletustyylit |
| 2 | Käyttäjän omat tyylit, jotka hän on asettanut selaimeensa |
| 3 | Sivun tekijän tyylit eli sinun tyylitiedostosi |
| 4 | Sivun tekijän !important-määritykset |
| 5 (vahvin) | Käyttäjän !important-määritykset |
- Käyttäjän tyylit eivät voita sinun tyylejäsi muuten kuin
!important-merkinnällä. Tavallisessa tilanteessa sivun tekijän tyylit voittavat. style-elementti ei ole vahvempi kuin erillinen tyylitiedosto. Molemmat ovat sivun tekijän tyylejä, joten voittaja ratkeaa spesifisyydellä ja kirjoitusjärjestyksellä. Joslink-elementti onstyle-elementin jälkeen, tiedoston säännöt tulevat myöhemmin ja voittavat.
3.2 Vaihe 2: spesifisyys
Jos säännöt ovat samasta lähteestä, voittaa tarkempi eli spesifisempi valitsin. Spesifisyys lasketaan kolmena lukuna:
| Osa | Mitä lasketaan | Esimerkki |
|---|---|---|
| 1. luku | Tunnisteet (id) | #valikko |
| 2. luku | Luokat, attribuutit ja pseudoluokat | .varoitus, :hover |
| 3. luku | Elementtien nimet ja pseudoelementit | p, ::before |
Vertailu tehdään vasemmalta oikealle: yksikin tunniste voittaa minkä tahansa määrän luokkia.
| Valitsin | Spesifisyys |
|---|---|
p | 0, 0, 1 |
p strong | 0, 0, 2 |
.varoitus | 0, 1, 0 |
p.varoitus | 0, 1, 1 |
#tiedote | 1, 0, 0 |
style-attribuutti | voittaa kaikki yllä olevat |
3.3 Vaihe 3: kirjoitusjärjestys
Jos lähde ja spesifisyys ovat samat, voittaa viimeisenä kirjoitettu sääntö. Tällä on käytännön merkitystä: yleiset säännöt kannattaa kirjoittaa tiedoston alkuun ja poikkeukset loppuun.
p { color: green; }
p { color: red; } /* tämä voittaa, koska se on myöhemmin */
Sama koskee saman säännön sisällä olevia ominaisuuksia:
h2 {
border: 0; /* poistaa ensin kaikki reunat */
border-bottom: 1px solid black; /* lisää sitten alareunaan viivan */
}
3.4 !important
Määrityksen perään voi lisätä !important, jolloin se nousee
lähdejärjestyksessä ylemmälle tasolle ja voittaa tavalliset
säännöt spesifisyydestä riippumatta.
p { color: red !important; }
!important on hätäkeino. Se rikkoo spesifisyyden logiikan, ja kun
tiedostossa on useita !important-määrityksiä, niiden keskinäistä
järjestystä on vaikea seurata. Yleensä oikea ratkaisu on korjata valitsin tai
sääntöjen järjestys. Käyttäjien omissa saavutettavuustyyleissä
!important sen sijaan on paikallaan, koska vain sillä käyttäjä saa
oman tyylinsä voimaan.
4. Tyylien määrittäminen
Tyylisääntö koostuu valitsimesta ja aaltosulkeisiin kirjoitetuista ominaisuus–arvo-pareista. Jokainen pari päättyy puolipisteeseen.
valitsin {
ominaisuus: arvo;
ominaisuus: arvo;
}
Yksinkertaisin valitsin on elementin nimi. Silloin sääntö koskee kaikkia sen nimisiä elementtejä dokumentissa.
body {
color: black;
background-color: white;
}
Samat ominaisuudet voi antaa monelle elementille erottelemalla valitsimet pilkuilla:
h1, h2, h3, h4, h5, h6 {
font-family: Verdana, Arial, sans-serif;
color: navy;
}
- Pilkku valitsimien välissä luettelee useita valitsimia:
h1, h2tarkoittaa "kaikki h1-elementit ja kaikki h2-elementit". - Välilyönti valitsimien välissä tarkoittaa sisäkkäisyyttä:
p strongtarkoittaa "p-elementin sisällä olevat strong-elementit". Katso luku 5.4. - Pilkku arvojen välissä luettelee vaihtoehtoja:
font-family: Verdana, Arial, sans-serif. - Välilyönti arvojen välissä antaa yhdelle ominaisuudelle
useita osia:
border-bottom: 1px solid black.
4.1 Perintä
Osa ominaisuuksista periytyy äitielementiltä lapsielementeille. Kun kirjoitat
<h1><strong>CSS</strong> on iso juttu.</h1>
strong-elementti saa saman tekstin värin ja kirjasintyypin kuin
h1, ellei sille ole erikseen määrätty omia arvoja.
Kaikki ominaisuudet eivät periydy. Nyrkkisääntö on, että tekstiin liittyvät ominaisuudet periytyvät ja laatikkoon liittyvät eivät.
| Periytyy | Ei periydy |
|---|---|
color, font-family, font-size,
font-weight, line-height,
text-align, letter-spacing,
list-style |
background, border, margin,
padding, width, height |
Perinnän saa tarvittaessa pakotettua arvolla inherit, ja se
katkaistaan antamalla elementille oma arvo.
5. Valitsimet
5.1 Elementtivalitsin
Elementin nimi valitsimena koskee kaikkia sen nimisiä elementtejä. Tämä on lähtökohta: muotoile ensin elementit, ja tee poikkeukset vasta sitten luokilla.
p { line-height: 1.6; }
5.2 Luokat (class) valitsimina
class-attribuutilla elementti määrätään käyttämään tiettyä tyyliä.
Sama luokka voi olla usealla elementillä samassa dokumentissa.
<p>Normaalia tekstiä kappaleellinen.</p>
<p class="varoitus">Varoitus!</p>
Vastaavat tyylimääritykset:
p {
color: green;
text-align: center;
}
p.varoitus {
color: red;
}
Valitsin p.varoitus osuu vain p-elementteihin, joilla on
luokka varoitus. Jos haluat saman luokan toimivan minkä tahansa
elementin kanssa, jätä elementin nimi pois:
.varoitus {
color: red;
}
Vanhoissa ohjeissa sanotaan, että luokka "perii ominaisuuksia peruselementiltä". Se on harhaanjohtavaa: perintä tarkoittaa äitielementiltä lapselle siirtyviä ominaisuuksia. Tässä on kyse eri asiasta: molemmat säännöt osuvat samaan elementtiin, ja niiden määritykset yhdistyvät. Ristiriidat ratkeavat spesifisyydellä.
Alla olevilla säännöillä kappaleen väri on sininen, vaikka
yleistetty valitsin on tiedostossa myöhemmin: p.varoitus on
spesifisempi (0, 1, 1) kuin .varoitus (0, 1, 0).
p.varoitus { color: blue; }
.varoitus { color: red; }
Elementillä voi olla useita luokkia välilyönnillä eroteltuina:
<p class="varoitus korostettu">Tämä käyttää molempia luokkia.</p>
5.3 Tunnisteet (id) valitsimina
id-attribuutilla määrätään yksi elementti käyttämään
tiettyä tyyliä. Tunnisteen arvo saa esiintyä dokumentissa vain kerran.
<p id="tiedote">Tärkeä tiedote.</p>
#tiedote {
color: red;
}
Tunniste toimii vain yhdellä elementillä ja on
spesifisyydeltään niin vahva, että sen ylikirjoittaminen
myöhemmin on hankalaa. Ulkoasun määrittelyyn kannattaa lähes aina käyttää luokkaa.
Tunniste on hyödyllinen muihin tarkoituksiin: siihen voi viitata
dokumentin
sisäisellä linkillä ja label-elementin
for-attribuutilla.
5.4 Asiayhteyden mukaan määräytyvät tyylit
Kun valitsimet kirjoitetaan peräkkäin välilyönnillä eroteltuina, sääntö osuu vain niihin elementteihin, jotka ovat toisen sisällä. Näin samalle elementille voi antaa eri ulkoasun sen mukaan, missä se sijaitsee.
p strong {
color: red;
}
Sääntö koskee vain p-elementin sisällä olevia
strong-elementtejä. Muualla olevat strong-elementit
säilyvät ennallaan.
5.5 Pseudoluokat
Pseudoluokka osuu elementtiin sen tilan perusteella: onko linkkiä jo käyty, onko hiiri sen päällä, onko kenttä valittuna. Pseudoluokka kirjoitetaan kaksoispisteellä valitsimen perään.
| Pseudoluokka | Osuu, kun |
|---|---|
:link | Linkkiä ei ole vielä avattu |
:visited | Linkissä on jo käyty |
:hover | Osoitin on elementin päällä |
:focus | Elementti on valittuna, esimerkiksi sarkaimella siirryttäessä |
:focus-visible | Kuten edellinen, mutta vain kun selain arvioi kohdistuksen tarpeelliseksi näyttää |
:active | Elementtiä painetaan parhaillaan |
:first-child, :last-child | Elementti on äitinsä ensimmäinen tai viimeinen lapsi |
:nth-child(2n) | Joka toinen lapsi. Kätevä taulukon riveissä |
a:hover { text-decoration: underline; }
a:focus { outline: 2px solid orange; }
tr:nth-child(even) { background-color: #f2f2f2; }
Linkin neljä pseudoluokkaa on kirjoitettava tyylitiedostoon järjestyksessä
:link, :visited, :hover,
:active. Muussa järjestyksessä myöhemmät säännöt kumoavat aiemmat,
koska niillä on sama spesifisyys. Muistisääntö on LoVe HAte.
Selain piirtää valittuna olevan elementin ympärille reunuksen, jotta
näppäimistöllä liikkuva näkee, missä hän on. Merkintä
outline: none tekee näppäimistökäytöstä mahdotonta. Jos oletusreunus
ei miellytä, korvaa se omalla näkyvällä tyylillä äläkä poista sitä.
6. Mittayksiköt
Pituudet kannattaa ilmaista suhteellisina, jolloin sivu skaalautuu käyttäjän asetusten ja näytön koon mukana.
| Yksikkö | Mihin suhteutetaan | Käyttö |
|---|---|---|
rem |
Juurielementin (html) laskettuun fonttikokoon. Jos et muuta
sitä, se on käyttäjän selaimeensa asettama fonttikoko |
Fonttikoot. Ei kertaudu sisäkkäin, joten lopputulos on ennustettava |
em |
Elementin omaan laskettuun fonttikokoon. font-size-
ominaisuudessa poikkeuksellisesti äitielementin fonttikokoon |
Marginaalit ja täytteet, jotka halutaan skaalautuvan tekstin mukana |
% |
Äitielementin vastaavaan mittaan | Leveydet |
ch |
Nollan merkin leveyteen käytössä olevalla kirjasimella | Tekstipalstan leveys. Luettavuudeltaan hyvä rivi on noin 60–75 merkkiä |
vh, vw |
Näkymäikkunan korkeuteen ja leveyteen. 1vh on 1 %
näkymäikkunan korkeudesta |
Koko ruudun kokoiset osiot |
px |
Kiinteä yksikkö, 1/96 tuumaa | Ohuet reunaviivat ja kuvien mitat. Ei fonttikokoihin |
px kelpaa fonttikokoon?
Vanhoissa ohjeissa perustellaan, että pikselin koko vaihtelee näytön koon ja
tarkkuuden mukaan. Se ei pidä paikkaansa: CSS:n px on kiinteä
vertailuyksikkö.
Oikea syy on saavutettavuus. Kun käyttäjä suurentaa selaimensa oletusfonttikokoa
asetuksista, rem- ja em-mittainen teksti kasvaa mukana
mutta px-mittainen ei muutu lainkaan. Heikkonäköinen käyttäjä ei siis
saa tekstiäsi luettavaan kokoon. Selaimen zoomaus kyllä suurentaa myös
px-tekstiä, mutta se suurentaa kaiken muunkin eikä korvaa
fonttikokoasetusta.
em kertautuu sisäkkäin
Jos ul { font-size: 0.9em; } ja listat ovat sisäkkäin, toisen tason
lista on 0,81-kertainen ja kolmannen 0,73-kertainen. Teksti kutistuu huomaamatta.
Käytä fonttikokoihin rem-yksikköä, joka suhteutuu aina juureen.
html { font-size: 100%; } /* kunnioittaa käyttäjän asetusta */
body { font-size: 1rem; line-height: 1.6; }
h1 { font-size: 2rem; }
h2 { font-size: 1.5rem; }
p { max-width: 70ch; margin-bottom: 1em; }
7. Sivuilla käytettävät värit
Värin voi ilmaista usealla tavalla. Kaikki alla olevat tarkoittavat samaa punaista.
| Tapa | Esimerkki | Huomioita |
|---|---|---|
| Nimi | color: red; | Noin 150 nimettyä väriä. Kätevä kokeiluun |
| Heksadesimaali | color: #ff0000; | Yleisin tapa. Lyhennetty muoto #f00 toimii, kun parit ovat samoja |
| RGB lukuina | color: rgb(255 0 0); | Kukin osa väliltä 0–255 |
| RGB prosentteina | color: rgb(100% 0% 0%); | Harvinaisempi |
| HSL | color: hsl(0 100% 50%); | Sävy, kylläisyys ja vaaleus. Helpoin tapa tehdä saman sävyn vaaleampi tai tummempi versio |
| Läpinäkyvyys | color: rgb(255 0 0 / 50%); | Kauttaviivan jälkeen alfa-arvo |
currentColor | border-color: currentColor; | Sama kuin elementin color |
p {
color: #222222;
background-color: #ffffff;
}
Kun asetat taustavärin, aseta myös tekstin väri, ja päinvastoin. Muuten lopputulos riippuu siitä, mitä käyttäjän selain on asettanut toiselle, ja teksti voi jäädä lukukelvottomaksi. Sama koskee tummaa tilaa käyttäviä laitteita.
Tekstin ja taustan välisen kontrastin on oltava riittävä. Saavutettavuusvaatimus on 4,5:1 tavalliselle tekstille ja 3:1 suurelle tekstille (vähintään 24 px tai lihavoituna 19 px). Vaaleanharmaa teksti valkoisella taustalla on tyypillinen tapa epäonnistua.
Kontrastin voi tarkistaa WebAIMin kontrastityökalulla tai selaimen kehittäjätyökaluilla: kun valitset elementin ja avaat värivalitsimen, työkalu näyttää kontrastisuhteen suoraan.
Väri ei myöskään saa olla ainoa tapa välittää tietoa. Jos virheelliset kentät merkitään punaisella, mukana on oltava myös teksti tai symboli.
Värien valintaan on apuvälineitä, esimerkiksi ColorZilla, jolla voi poimia värin miltä tahansa sivulta, sekä Coolors ja Adobe Color väripalettien rakentamiseen.
8. Kommentit
Kommentti alkaa merkinnällä /* ja päättyy merkintään
*/. Se voi olla yhden tai usean rivin mittainen.
strong {
/* Korostamiseen käytettävä tyyli */
background-color: white;
color: red;
}
Huomaa, että CSS:ssä ei ole rivin loppuun ulottuvaa
//-kommenttia, vaikka se on tuttu monista ohjelmointikielistä.
Sellainen rivi jää tulkitsematta ja voi rikkoa sitä seuraavan säännön.
9. Laatikkomalli (box model)
CSS käsittelee jokaista elementtiä laatikkona, jolla on neljä kerrosta sisältä ulospäin:
| Osa | Suomeksi | Selitys |
|---|---|---|
| content | sisältö | Varsinainen teksti tai kuva |
padding | täyte | Tyhjä tila sisällön ja reunan välissä. Saa taustavärin |
border | raja | Reunaviiva |
margin | marginaali | Tyhjä tila laatikon ulkopuolella. Ei saa taustaväriä |
div {
padding: 1em;
border: 1px solid black;
margin: 2em;
}
width ei tarkoita koko laatikon leveyttä
Oletuksena width ja height koskevat vain
sisältöä. Täyte ja reuna tulevat sen päälle, joten alla oleva
laatikko vie tilaa 300 + 2 × 20 + 2 × 1 = 342 pikseliä.
div {
width: 300px;
padding: 20px;
border: 1px solid black;
}
Ominaisuudella box-sizing: border-box width alkaa
tarkoittaa koko laatikkoa täytteineen ja reunoineen, mikä on lähes aina
helpompaa. Monissa tyylitiedostoissa se asetetaan kerralla kaikille elementeille:
* {
box-sizing: border-box;
}
Laatikoiden asettelu vierekkäin ja allekkain käsitellään omalla luennollaan.
9.1 Yhdistyvät marginaalit
Lohkojen ylä- ja alamarginaalit yhdistyvät silloin, kun niiden välissä ei ole mitään sisältöä. Yhdistämisessä käytetään suurempaa marginaalia, ei niiden summaa.
- Jos kahden peräkkäisen lohkon välissä ensimmäisen alamarginaali on 1 em ja seuraavan ylämarginaali 2 em, väliin jää 2 em eikä 3 em.
- Sama tapahtuu sisäkkäisillä lohkoilla, jos ulomman ja sisemmän välissä ei ole sisältöä eikä täytettä tai reunaa.
- Täysin tyhjän lohkon oma ylä- ja alamarginaali yhdistyvät keskenään.
Yhdistymisen estää se, että väliin tulee jotain: reuna, täyte tai sisältöä.
Yksinkertaisin keino on antaa lohkolle padding tai
min-height.
Tarkempi kuvaus: Mastering margin collapsing (MDN).
10. Taulukoiden ulkoasu
Taulukon ulkoasuun vaikuttavat erityisesti seuraavat ominaisuudet.
| Ominaisuus | Merkitys |
|---|---|
border-collapse |
collapse yhdistää solujen rajat yhdeksi viivaksi,
separate pitää ne erillisinä |
border-spacing |
Erillisten rajojen välinen etäisyys, esimerkiksi
border-spacing: 5px; |
caption-side |
Taulukon otsikko taulukon ylä- (top) tai alapuolelle
(bottom) |
empty-cells |
show näyttää tyhjien solujen rajat, hide
piilottaa ne |
table-layout |
auto sovittaa sarakkeet sisällön mukaan,
fixed määrää leveydet ensimmäisen rivin tai
col-elementtien mukaan |
vertical-align |
Solun sisällön sijoittelu pystysuunnassa |
Taulukossa ei näy mitään rajoja, ellet aseta niitä
th- ja td-elementeille. Pelkkä
table-elementin reuna piirtää viivan vain koko taulukon ympärille.
table {
border-collapse: collapse;
}
th, td {
border: 1px solid #999999;
padding: 0.4em 0.7em;
text-align: left;
}
caption {
caption-side: top;
text-align: left;
font-style: italic;
}
CSS ei korjaa puutteellista merkintää. Taulukossa on oltava
caption, otsikkosolut th-elementteinä ja niissä
scope-attribuutti. Katso
HTML5-luennon
luku 11.
11. Tavallisimmat ominaisuudet
Alla on tällä kurssilla tarvittavat ominaisuudet ryhmiteltynä. Jokaisen tarkka kuvaus löytyy MDN:n CSS-hakemistosta ja suomeksi kurssisivuston CSS-dokumentaatiosta.
11.1 Kirjasin
| Ominaisuus | Huomioita |
|---|---|
font-family |
Anna aina useita vaihtoehtoja, koska et voi tietää mitä kirjasimia
käyttäjällä on. Viimeisenä on oltava yleinen kirjasinperhe:
serif (päätteellinen), sans-serif (päätteetön) tai
monospace (tasavälinen) |
font-size | Käytä rem-yksikköä. Älä tee tekstistä liian pientä; leipätekstin oletuskoko 1rem on hyvä lähtökohta |
font-weight | Lihavointi, esimerkiksi bold tai 700 |
font-style | Kursivointi arvolla italic |
font-variant | Esimerkiksi small-caps |
font | Lyhennemerkintä, joka asettaa kaikki edelliset kerralla |
body {
font-family: Georgia, "Times New Roman", serif;
font-size: 1rem;
}
11.2 Teksti
| Ominaisuus | Huomioita |
|---|---|
line-height | Riviväli. Anna yksiköttömänä lukuna, esimerkiksi 1.6, jolloin se skaalautuu fonttikoon mukana. Riittävä riviväli on luettavuuden kannalta yhtä tärkeä kuin fonttikoko |
text-align | Tasaus. Vältä arvoa justify: se tuottaa epätasaisia sanavälejä ja haittaa lukemista |
text-decoration | Alleviivaus. Älä poista linkkien alleviivausta ilman muuta selvää erottavaa tekijää |
text-transform | Muuttaa kirjainkokoa, esimerkiksi uppercase. Muuttaa vain ulkoasun, ei sisältöä |
text-indent | Ensimmäisen rivin sisennys |
letter-spacing, word-spacing | Merkkien ja sanojen väli |
white-space | Miten tyhjämerkit ja rivinvaihdot käsitellään |
11.3 Väri ja tausta
| Ominaisuus | Huomioita |
|---|---|
color | Tekstin väri |
background-color | Taustaväri. Määritä aina yhdessä color-ominaisuuden kanssa |
background-image | Taustakuva. Aseta aina myös taustaväri sen varalta, ettei kuva lataudu |
background-repeat | Toistuuko taustakuva |
background-position | Taustakuvan sijainti |
background | Lyhennemerkintä kaikille edellisille |
opacity | Koko elementin läpinäkyvyys välillä 0–1. Vaikuttaa myös lapsielementteihin |
11.4 Marginaali, täyte ja raja
| Ominaisuus | Huomioita |
|---|---|
margin | Yksi arvo koskee kaikkia sivuja, kaksi arvoa pysty- ja vaakasuuntaa, neljä arvoa järjestyksessä ylä, oikea, ala, vasen |
padding | Sama merkintätapa kuin marginaalissa |
border-width, border-style, border-color | Reunan leveys, tyyli ja väri. border-style on pakollinen: ilman sitä reunaa ei näy, vaikka leveys ja väri olisi annettu |
border | Lyhennemerkintä: border: 1px solid black; |
border-radius | Pyöristetyt kulmat |
box-sizing | Määrää, koskeeko width sisältöä vai koko laatikkoa. Katso luku 9 |
margin: 1em; /* kaikille sivuille */
margin: 1em 2em; /* ylä ja ala 1em, vasen ja oikea 2em */
margin: 1em 2em 0.5em 2em; /* ylä, oikea, ala, vasen */
12. Kehittäjätyökalut CSS-editorina
Selaimen kehittäjätyökaluilla voi kokeilla tyylimuutoksia suoraan sivulla ja nähdä tuloksen heti. Tämä on nopein tapa opetella CSS:ää ja etsiä vikoja.
- Napsauta muutettavaa kohtaa hiiren oikealla painikkeella ja valitse Tutki tai Inspect. Työkalut avautuvat ja oikea elementti on valmiiksi valittuna. Työkalut saa auki myös F12-näppäimellä.
- Oikeanpuoleisessa paneelissa näkyvät kaikki elementtiin osuvat säännöt vahvimmasta heikoimpaan. Jokaisen säännön perässä lukee, mistä tiedostosta ja miltä riviltä se tulee.
- Yliviivattu määritys tarkoittaa, että jokin toinen sääntö on voittanut sen. Tämä on nopein tapa nähdä kaskadi käytännössä.
- Voit muokata arvoja kaksoisnapsauttamalla, kytkeä yksittäisen määrityksen pois päältä valintaruudusta ja lisätä uusia napsauttamalla säännön sisällä.
- Muutokset eivät tallennu tiedostoon ja katoavat, kun lataat sivun uudelleen. Kokeile ensin täällä ja kirjoita toimiva ratkaisu sen jälkeen tyylitiedostoon.
| Näkymä | Mitä siitä näkee |
|---|---|
| Rules / Styles | Elementtiin osuvat säännöt ja se, mikä voittaa |
| Computed | Lopulliset lasketut arvot. Kertoo, mistä säännöstä kukin arvo tuli |
| Layout (Firefox) tai Computed (Chrome) | Laatikkomalli kuvana: sisältö, täyte, raja ja marginaali mittoineen |
| Värivalitsin | Napsauta väriruutua säännössä. Näyttää myös tekstin ja taustan kontrastisuhteen |
13. Tarkistuslista
- Onko kaikki ulkoasu erillisessä tyylitiedostossa? Sivuilla ei saa olla
style-elementtiä eikästyle-attribuuttia. - Onko
link-elementissä suhteellinen osoite jarel="stylesheet", eikä turhaatype- taititle-attribuuttia? - Onko fonttikoot annettu
rem-yksikössä eikäpx-yksikössä? - Onko jokaisen taustavärin kanssa määritelty myös tekstin väri?
- Onko tekstin ja taustan kontrasti vähintään 4,5:1?
- Näkyykö kohdistus, kun liikut sivulla sarkainnäppäimellä?
- Ovatko linkkien pseudoluokat järjestyksessä
:link,:visited,:hover,:active? - Meneekö tyylitiedosto CSS-validaattorista läpi ilman virheitä?
- Toimiiko sivu myös ilman tyylitiedostoa? Kokeile poistaa
link-rivi hetkeksi: sisällön pitää olla yhä luettavissa ja oikeassa järjestyksessä.
14. Lisätietoa
- MDN: Styling basics, laaja oppimateriaali harjoituksineen.
- MDN: CSS reference, hakuteos yksittäisistä ominaisuuksista.
- MDN: Specificity.
- W3C:n CSS-validaattori.
- WebAIM: Contrast Checker.
- Kurssisivuston suomenkielinen CSS-dokumentaatio.
Käyttäjien kommentit