Cascading Style Sheets (CSS) - Luento 13
- CSS (Cascading Style Sheets)
- Mittayksiköt
- Sivuilla käytettävät värit
- Kommentit
- CSS1:n ominaisuudet
- Tyylien valitsimet (engl. selectors)
- Asemointi
- Liu'utus
- Absoluuttinen asemointi (engl. absolute positioning)
- Kiinnitetty asemointi (engl. fixed positioning)
- Suhteellinen asemointi (engl. relative positioning)
- Asemointi z-suunnassa
- Asemointiesimerkkejä
- Asemoinnin suunnittelu
- Lisätietoa
Tällä luennolla käsitellään WWW-sivujen ulkoasun muokkaamista CSS-tiedostojen avulla.
CSS (Cascading Style Sheets)
- Dokumenttien rakenne määritellään XHTML:n avulla.
- Sisältö on hyvin tulkittavissa.
- Sisältö on saatavissa riippumatta näyttölaitteesta.
- Sisältö on helposti muunnettavissa.
- Dokumenttien ulkoasu määritellään CSS-tyylitiedoston avulla.
- Dokumentin rakenne on yksinkertainen.
- Sivuilla on yhtenäinen ulkoasu.
- Ulkoasun määrittämiseen ei mene aikaa.
- Keskitetty ulkoasun päivitys.
- Dokumentteja voidaan katsella monenlaisia ohjelmilla ja laitteilla (mediat).
- Esimerkiksi:
- erilaiset graafiset selaimet
- mobiiliselaimet
- ääniselain
- tekstiselain
- tv:n selain
- tulostin
- projektori
- Sivut on testattava huolellisesti erilaisilla selaimilla!
- Esimerkiksi:
- Sekä sivujen XHTML-koodi että CSS-koodi kannattaa tarkastaa jollakin validaattorilla.
- Esimerkiksi Firefoxin Web Developer -lisäosasta löytyy validaattorit molempiin tarkoituksiin.
Esimerkkejä
Tyylitiedoston liittäminen dokumenttiin
XHTML-dokumentin otsikkotietoihin (head) lisätään seuraava määritys:
<link href="tyylit.css" rel="stylesheet" type="text/css" media="all" />
all-media tarkoittaa, että asetuksia käytetään kaikille medioille. all-median asetuksia voidaan ylikirjoittaa tarvittaessa muissa medioissa. Muiden medioiden tyylitiedostot pitää muistaa linkittää XHTML-tiedostoon all-median linkityksen jälkeen, koska tyylit otetaan käyttöön ylhäältä alas periaatteella. Viimeisenä käyttöön tulee siis viimeiseksi liitetty tiedosto.
Tulostustyylit:
<link rel="StyleSheet" href="print.css" type="text/css" media="print" />
Tietokoneen näytön media on screen.
CSS-Syntaksi
Perusperiaate on muuttaa olemassaolevien XHTML-elementtien ulkoasun ominaisuuksia.
Ominaisuuksilla saattaa olla olemassa selainkohtaiset alkuarvot (kuten esim. että tausta on valkoinen ja teksti musta body-lohkossa).
Ominaisuuksia voidaan muokata suoraan kirjoittamalla sääntöjä CSS-muotoiseen tekstitiedostoon. Muoto on määritelty CSS-suosituksessa.
tyylinimi { ominaisuus: arvo; }
- Tyylin nimi oltava aina pienellä
- Yhdessä ominaisuudessa voi olla useampia arvoja. Tällöin arvot erotellaan välilyönnillä.
- Ominaisuudet erotellaan toisiltaan puolipisteellä.
- Jos arvossa on yksikkö niin sen on oltava kiinni numerossa.
- Ominaisuuksia ja arvoja ei voi keksiä itse vaan niille on määritelty vaihtoehdot CSS-standardissa. Katso mahdolliset vaihtoehdot esim.
Esimerkki
body { color: black; background-color: white; }
Esim. määritellään kaikille otsikkotasoille sama fontti, väri ja alaviiva:
h1, h2, h3, h4, h5, h6 {
font-family: Verdana, sans-serif;
color: blue;
border-bottom: 1px solid black;
}
Isompi esimerkki
- Samat ominaisuudet voidaan laittaa monille eri elementeille erottelemalla elementit pilkuilla.
- Vaihtoehtoiset ominaisuudet luetellaan pilkuilla.
- Jos ominaisuuteen voidaan määrittää useita arvoja, niin ne on eroteltava välilyönnillä.
- CSS-määritykset luetaan käyttöön kirjoitusjärjestyksessä, jolloin voi olla merkitystä missä järjestyksessä tyylisääntöjä kirjoittaa. Jos samalle elementille on määritetty tyylimääritykset CSS-tiedostossa kahteen kertaan, käytetään siis myöhemmin tiedostossa tulevia tyylimäärityksiä.
Perintä
Dokumenttipuun elementit perivät esim. tekstin värin äitielementiltään:
<h1><strong>CSS</strong> on iso juttu.</h1>
strong-elementti saa saman tekstin värin kuin mikä h1-elementillä on, ellei väriä ole strong-elementille erikseen määrätty. Aivan kaikki ominaisuudet eivät kuitenkaan periydy.
Mittayksiköt
Pituudet ja korkeudet kannattaa aina ilmaista suhteellisesti prosentteina tai em
-yksikköinä.
em
suhteutetaan aina oletusfontin kokoon.
px
(pikseli) -yksikköä voi käyttää pienten (alle 5 px) reunusten ja marginaalien
määrittelyssä sekä kuville tarkoitettujen lohkojen leveyksissä ja korkeuksissa, mutta sitä ei
suositella käytettäväksi kirjasimen koon määrittämiseen.
p {
font-size: 120%;
}
h1 {
margin-top: 1em;
}
h2 {
border: 1px solid black;
}
Sivuilla käytettävät värit
Värien määrittämisessä on käytössä useita tapoja. Yksi tapa on käyttää prosentteja:
p {
background-color: rgb(100%, 100%, 100%); /* valkoinen */
}
Perusvärit voidaan myös kirjoittaa suoraan nimillä:
p {
background-color: blue; /* sininen */
}
Yksi käytetty tapa on antaa värit RGB-arvoina:
p {
background-color: #FF0000; /* punainen */
}
Kommentit
Kommentointi CSS-tyylitiedostossa onnistuu c-kielestä tutulla tavalla:
strong { /* Korostamiseen käytettävä tyyli */
background-color: white;
color: red;
}
CSS1:n ominaisuudet
- Kirjasimen
ominaisuudet (esimerkki)
- font-family
Kirjasintyyppiä määrättäessä pitää muistaa antaa useita vaihtoehtoja, koska ei voida tietää mitä kirjasimia käyttäjien koneilta löytyy. Viimeisenä vaihtoehtona pitää antaa yleisen kirjasinperheen nimi:
- sans-serif (päätteetön)
- serif (päätteellinen)
- monospace (tasavälinen)
- font-style
- font-variant
- font-weight
- font-size
Kirjasimen kokoa määrättäessä pitää varoa, ettei tee kirjasimesta liian pientä. Järkevintä on yleensä käyttää käyttäjän selaimen oletuskokoa eli 1em. Kirjasimen kokoa ei pidä määrätä px-yksiköissä, koska pikselien koko vaihtelee näyttöjen koon ja tarkkuuden mukaan.
- font
- font-family
- Värin ja
taustavärin ominaisuudet (esimerkki)
- color
- background-color
Määriteltäessä taustaväri pitää muistaa määrätä myös tekstin väri (color).
- background-image
- background-repeat
- background-attachment
- background-position
- background
- Tekstin ominaisuudet (esimerkki)
- Elementin raja, täyte ja marginaali (esimerkki)
Tyylien valitsimet (engl. selectors)
Luokat (class) valitsimina
class
-attribuutin avulla voidaan XHTML-elementti määrätä käyttämään
tiettyä tyyliä. Esim.
<p>Normaalitekstiä kappaleellinen</p>
<p class="varoitus">varoitus</p>
Vastaavat tyylimääritykset
p {
background-color: white;
color: green;
text-align: center;
}
p.varoitus {
background-color: white;
color: red;
}
Edellisen valitsimen yleistys, jota voidaan käyttää kaikkien elementtien yhteydessä.
.varoitus {
background-color: white;
color: red;
}
Elementin yhteyteen määritelty valitsin on "vahvempi" kuin yleistetty valitsin. Siispä alla olevilla tyylimäärityksillä tekstikappaleen väriksi tulisi punainen, vaikka yleistetty valitsin tulee tyylitiedostossa vasta elementin yhteyteen määritetyn valitsimen jälkeen.
p {
background-color: white;
color: green;
text-align: center;
}
p.varoitus {
background-color: white;
color: red;
}
.varoitus {
background-color: white;
color: blue;
}
Tyylien valitsimien yhteydessä perintä tarkoittaa sitä, että voit luoda luokkia (class) jokaisesta elementistä. Kaikki luokat perivät joitakin ominaisuuksia peruselementiltä (paitsi, jos uusia arvoja määritetään vanhojen tilalle tai ominaisuus ei ole perittävissä).
Esimerkki tyylin aliluokan käytöstä
Asiayhteyden mukaan määräytyvät tyylit
Tyylien avulla voidaan määritellä asiayhteyden mukaan käyttäytyviä tyylejä. Eräs tällainen esimerkki on p-elementin sisällä oleva strong-elementti.
p-elementin sisällä oleva strong-elementti muotoillaan seuraavan säännön mukaisesti:
p strong {
background-color: white;
color: red;
}
Esimerkki asiayhteyden mukaan määräytyvästä tyylistä
Pseudoluokat
Pseudoluokat ovat tyylien erikoistapauksia, joilla saadaan esimerkiksi linkille tapauskohtainen käyttäytyminen sen mukaan, onko linkki vierailtu vai ei.
a:link { /* vierailematon linkki */
color: blue;
background-color: transparent;
}
a:visited { /* vierailtu linkki */
color: purple;
background-color: transparent;
}
a:active { /* aktiivinen linkki */
color: red;
background-color: transparent;
}
a:hover { /* kohdistettu linkki */
color: blue;
background-color: grey;
}
Esimerkki pseudoluokkien käytöstä
Asemointi
Asemointia voidaan tehdä elementtien marginaaleilla, float-ominaisuudella ja position-ominaisuudella.
Asemoinnin onnistumiseksi on kuitenkin ymmärrettävä CSS:n laatikkomalli sekä erilaiset display-asetukset
display-ominaisuus
Normaalisti block-level-elementit (kappaletason elementit esim. h1, p) järjestyvät allekkain äitilohkon vasempaan laitaan ja inline-elementit (tekstitason elementit esim. a, strong) vierekkäin, kunnes äitilohkon leveys on täyttynyt. CSS-ominaisuuksilla voidaan kuitenkin irrottaa tietyt elementit perusjärjestyksestä ja asemoida ne sivulle uuteen paikkaan.
- display
- Esimerkki display:n käytöstä yksinkertaisessa XML-dokumentissa
display-ominaisuudella voidaan muuttaa esimerkiksi tekstikappaleen näkymiseen liittyviä ominaisuuksia. Tekstikappaleesta voidaan tehdä visuaalisesti osa toista tekstikappaletta tai sen näkyminen voidaan estää kokonaan. display-ominaisuudelle voidaan asettaa esim. seuraavia arvoja:
- block-arvolla elementti käyttäytyy lohkotason elementin tavoin.
- inline-arvolla elementti käyttäytyy tekstitason (inline) elementin tavoin.
- list-item-arvolla elementti käyttäytyy lista-alkion tavoin.
- none-arvolla elementin sisältöä ei näytetä ollenkaan ja elementti ei vaikuta mitenkään ympäröiviin elementteihin.
Esimerkki keskittämisestä pystysuunnassa display
-ominaisuuden avulla
Lisätietoa display-ominaisuudesta: http://www.w3.org/TR/CSS21/visuren.html#display-prop
Laatikkomalli (engl. box model)
CSS:n laatikkomalli määrittää jokaisen elementin laatikoksi, jolla on marginaali, raja, täyte ja sisältö.
Sivulla olevien elementtien rajat saat näkyviin esimerkiksi asentamalla Firefoxiin Web Developer -pluginin. Laatikkomallin saa näkyviin Web Developerissa valinnalla Outline | Outline Block Level Elements.
Esimerkki FireBugin käytöstä tyylien määrittämisessä (Inspect-toiminto, Style-välilehti, Layout-välilehti)
Esimerkki CSS:n editoimisesta dynaamisesti Web Developerin avulla
Liu'utus
Liu'utus eli float-ominaisuuden käyttäminen on yksinkertaisin ja helpoin tapa asemoida.
liu'utettu elementti poistuu normaalista dokumenttivirrasta sivun jompaan kumpaan laitan. Muu sisältö kiertää elementin automaattisesti.
float: left;
Lisätietoa: float- ja clear-ominaisuudet
Asemointi position-ominaisuudella
position-ominaisuudella voidaan määritellä kuinka elementti sijoittuu näytölle. Erilaisia arvoja ovat seuraavat:
- static-määrittää sijoittumisen normaaliksi elementin normaaliin paikkaan nähden.
- relative-määrittää sijoittumisen suhteelliseksi elementin normaaliin paikkaan nähden.
- absolute-määrittää sijoittumisen absoluuttisesti sivulle. Sijoittuminen lasketaan sen asemoidun äiti-elementin paikan ja koon suhteen, jossa lohko sijaitsee.
- fixed-kiinnittää positioinnin siten, että elementtiä ei vieritetä näytöllä ja positiointi tapahtuu aina koko näytön suhteen eikä äiti-elementin suhteen.
Lisätietoa: position-ominaisuus
Positioinnin yhteydessä määritellään usein myös seuraavat ominaisuudet:
- top-ominaisuudella voidaan määritellä elementin etäisyys yläreunasta.
- bottom-ominaisuudella voidaan määritellä elementin etäisyys alareunasta.
- left-ominaisuudella voidaan määritellä elementin etäisyys vasemmasta reunasta.
- right-ominaisuudella voidaan määritellä elementin etäisyys oikeasta reunasta.
- z-index-ominaisuudella voidaan määritellä elementin taso ruudulla. Mitä suurempi arvo, niin sitä lähempänä elementti on käyttäjää.
Lisätietoa: position-ominaisuuden kanssa tarvittavat ominaisuudet
Absoluuttinen asemointi (engl. absolute positioning)
Absoluuttisessa
(engl. absolute) asemoinnissa elementti sijoitetaan top
-,
left
-, right
- ja bottom
-ominaisuuksilla
absoluuttisesti tai kiinteästi asemoidun äiti-elementin sisällä välittämättä
normaalista sijainnista.
Absoluuttisesti asemoitu elementti vierii dokumentin sisällön mukana.
.vasenylanurkka {
position: absolute;
top: 10%;
left: 10%;
width: 30%;
height: 10%;
}
Kiinnitetty asemointi (engl. fixed positioning)
Kiinnitetyssä
(engl. fixed) asemoinnissa elementti sijoitetaan top
-, left
-,
right
- ja bottom
-ominaisuuksilla absoluuttisesti näyttöalueen sisällä.
Asemoitu elementti EI vieri dokumentin sisällön mukana.
Paljon tilaa vieviä lohkoja ei yleensä kannata kiinnittää näyttöön, koska ne vievät paljon tilaa sivun muulta sisällöltä.
Kiinnitetty asemointi ei toimi Internet Explorerissa 6:ssa, mutta versioissa 7-9 toimii.
.vasenylanurkka {
position: fixed;
top: 10%;
left: 10%;
width: 30%;
height: 10%;
}
Kiinnitetty asemointi -esimerkki
- navbar.htm - lähdekoodi
- navbar.css - lähdekoodi
Suhteellinen asemointi (engl. relative positioning)
Suhteellisessa
(engl. relative) asemoinnissa elementti sijoitetaan top
-, left
-,
right
- ja bottom
-ominaisuuksilla suhteutettuna normaaliin sijaintiinsa.
.up {
position: relative;
top: -1em;
}
- relative.htm - lähdekoodi
- relative.css - lähdekoodi
Asemointi z-suunnassa
z-index-ominaisuudella voidaan määritellä elementin taso ruudulla. Mitä suurempi arvo, niin sitä lähempänä elementti on käyttäjää. Ominaisuus toimii vain position-asemoitujen lohkojen kanssa.
- z-index.html - lähdekoodi
- z-index.css - lähdekoodi
Asemointiesimerkkejä
- Erilaisia asemointeja
- asemointi.html - lähdekoodi
- asemointi.css - css
- Sarakejako
- Liukuva sarakkeiden määrä esim. kuvagalleriassa
- Lomake
Asemoinnin suunnittelu
CSS 2.1 (ja toki jo CSS2) antaa useita erilaisia mahdollisuuksia WWW-sivujen visuaaliseen muotoilemiseen. Käytetystä tavasta huolimatta sivu kannattaa suunnitella seuraavan ohjeistuksen mukaan:
- Mieti erilaisten sivun elementtien (navigoinnit, koristeet, sisältö) paikat tarkkaan.
- Jaa sivun rakenne loogisiin lohkoihin. Lohkorakenne voi olla esimerkiksi seuraava:
- Yläreunassa on lohko perusnavigoinnille ja ylätunnistetiedoille.
- Sivun alaosa muodostuu kahdesta lohkosta.
- Vasemmassa reunassa on tarkempi linkkilista asiakirjan sisältöön.
- Oikeassa reunassa on sivun varsinainen sisältö.
- Jokainen edellisistä lohkoista kannattaa merkitä div-elementillä.
- Jos jokin lohko halutaan asemoida absoluuttisesti/kiinteästi, niin myös kaikki muut lohkot on syytä asemoida.
- Jos aiot käyttää yhteen lohkoon float-ominaisuutta, niin tee mielellään (jos mahdollista) koko sivun pääasemointi float-ominaisuudella.
- Asemoitujen/leijutettujen lohkojen sisällä voi edelleen käyttää asemointia tai float-ominaisuutta.
Käyttäjien kommentit