Elementtien sijoittelu
Normaalisti HTML-elementit piirretään sivulla ylhäältä alas siinä järjestyksessä, jossa ne esiintyvät, ja ympäröivien elementtien sisään. Piirtokohtaan vaikuttaa elementin etäisyys muista elementeistä, eli marginaali, sekä elementtejä ympäröivä täyte, eli padding.
Elementtejä voidaan kuitenkin irroittaa normaalista elementtijärjestyksestä
tietyillä css-ominaisuuksilla. Näistä ensimmäinen on position
-ominaisuus.
Mahdollisia arvoja position
-ominaisuudelle ovat:
static
,relative
,absolute
jafixed
Seuraavassa kuvattujen asetteluiden lisäksi elementtien sijoittelua voidaan vielä hienosäätää marginaalien tai negatiivisten marginaalien avulla.
Static
Elementtien normaali oletusasettelu on static
, jolloin kukin elementti
sijaitsee omalla paikallaan toinen toisensa jälkeen. Sijaintiin voi vaikuttaa
lähinnä margin
- ja padding
-ominaisuuksilla.
Relative
Seuraava asettelutyyppi on suhteellinen, eli relative
. Tällä asettelulla
elementti sijoittuu muuten samaan paikkaan kuin normaalilla static
-asettelulla,
mutta sen sijaintia siirretään top
-, right
-, bottom
- ja left
-ominaisuuksien
määräämillä arvoilla. Arvot voivat olla positiivisia, negatiivisia tai nolla ja
ne kuvaavat elementin sijainnin etäisyyttä oletusarvostaan.
Suhteellisesti aseteltu elementti varaa kokoisensa paikan sieltä, mihin normaali
asettelu sen sijoittaisi, mutta tämän jälkeen elementtiä siirretään käsketyn etäisyyden
verran käsekttyyn suuntaan. Esimerkiksi asetus top: 20px;
siirtää elementtiä niin,
että sen yläreuna on 20 pikseliä normaalia alempana ja top: -20px;
siirtää elementtiä
vastaavasti 20 pikseliä ylemmäs.
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pretium gravida
massa id tristique. Quisque at nulla congue, imperdiet odio at, accumsan nulla.
<span style="border: 1px solid red; position: relative; left: 2em; bottom: 1em;">
Maecenas luctus pretium massa, at feugiat sapien ultrices non. Suspendisse iaculis
</span>
ac massa dapibus sollicitudin. Ut euismod ipsum et odio rutrum sagittis. Donec
tincidunt augue eu tristique convallis. Class aptent taciti sociosqu ad litora
torquent per conubia nostra, per inceptos himenaeos. Phasellus id justo non metus
<img src="ghost-penguin.png" style="border: 1px solid blue; position: relative; top: -10px; left: -1em;">
tempus sagittis in nec tortor. Suspendisse sed accumsan est, non tincidunt lorem.
Sed at metus vitae ipsum aliquet malesuada ut eget tortor. In vitae fringilla urna.
</p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pretium gravida massa id tristique. Quisque at nulla congue, imperdiet odio at, accumsan nulla. Maecenas luctus pretium massa, at feugiat sapien ultrices non. Suspendisse iaculis ac massa dapibus sollicitudin. Ut euismod ipsum et odio rutrum sagittis. Donec tincidunt augue eu tristique convallis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus id justo non metus tempus sagittis in nec tortor. Suspendisse sed accumsan est, non tincidunt lorem. Sed at metus vitae ipsum aliquet malesuada ut eget tortor. In vitae fringilla urna.
Absolute
Absoluuttinen sijoittelu, eli css-sääntö position: absolute;
irroittaa elementin
normaalista asettelusta. Se ei siis vie enää tilaa normaalilta paikaltaan, kuten
staattisessa tai suhteellisessa sijoittelussa. Absoluuttisesti sijoiteltu
elementti sijoitetaan sen sijaan absoluuttisesti sen lähimmän ympäröivän elementin
suhteen, joka on sijoiteltu, eli jonka position
-ominaisuus on jotain muuta kuin static
.
Jos tällaista elementtiä ei ole, se sijoitellaan itse sivun, eli <html>
-elementin suhteen.
Elementille annetut top
-, left
-, bottom
- ja right
-arvot määräävät siis elementin
sijainnin kyseisen reunan etäisyyden ympäröivän elementin vastaavasta reunasta.
Huomattavaa on, että jos elementille on annettu leveys tai jos se on esimerkiksi kuva, jolla
on valmiiksi sen oletusleveys, ei left
- ja right
-ominaisuuksia voida yleensä käyttää yhtä aikaa.
Samoin top
- ja bottom
-ominaisuuksien yhtäaikainen käyttö voi olla mahdotonta, jos elementillä
on määrätty korkeus.
.ulompi {
position: relative;
border: 1px solid red;
height: 200px;
width: 300px;
}
.sisempi {
position: absolute;
top: 30px;
right: 75px;
border: 1px solid blue;
height: 100px;
width: 100px;
}
img {
position: absolute;
left: 0;
bottom: 0;
border: 1px solid green;
}
<div class="ulompi">
.ulompi
<div class="sisempi">
.sisempi
</div>
<img src="ghost-penguin.png">
</div>
Fixed
position
-ominaisuuden neljäs mahdollinen arvo on fixed
, joka tarkoittaa, että elementti on kiinnitetty
selainikkunan näkymän suhteen. Tällöin siis top
-, right
-, bottom
- ja left
-arvot eivät tarkoita
elementin sijaintia minkään muun HTML-selaimen suhteen vaan itse ikkunan suhteen. Tällä asetuksella
on mahdollista asettaa esimerkiksi sivuston valikko pysymään koko ajan näkyvissä samassa kohtaa vaikka
sivua rullattaisiin alas päin.
.kiinnitetty {
position: fixed;
right: 50px;
bottom: 100px;
width: 50px;
height: 50px;
border: 1px solid red;
background-color: rgba(255,170,170,0.5);
}
<div class="kiinnitetty">Fixed</div>
Elementtien päällekkäisyys
Jos elementtien sijoittelu on staattinen, ne asettuvat aina siististi toinen toisensa jälkeen.
Jos taas elementin asettelu on jotain muuta kuin staattinen ja sen sijaintia on liikuteltu
top
-, right
-, bottom
- tai left
-ominaisuuksilla, se voi sijoittua osittain tai
kokonaan jonkin toisen elementin alle tai päälle.
Päällekkäin asettuneiden elementtien järjestystä voidaan hallita css-ominaisuudella z-index
,
joka saa arvokseen jonkin kokonaisluvun. Suuremman z-index
-arvon saava elementti näkyy pienemmän
arvon saaneen elementin päällä. Oletusarvona on 0. Elementit, joiden arvo on sama, asettuvat
piirtojärjestyksessä, eli dokumentissa myöhemmin oleva piirretään aiemmin olevan päälle.
z-index
-arvo ei kuitenkaan vaikuta keskenään sisäkkäisiin elementteihin. Sisempi on
aina ulomman päällä.
.ulompi {
position: relative;
width: 300px;
height: 200px;
border: 1px solid gold;
background-color: #ffa;
}
.sisempi1 {
position: absolute;
top: 25px;
left: 75px;
width: 100px;
height: 100px;
border: 1px solid red;
background-color: #faa;
z-index: 3;
}
.sisempi2 {
position: absolute;
top: 75px;
right: 75px;
width: 100px;
height: 100px;
border: 1px solid green;
background-color: #afa;
z-index: 2;
}
<div class="ulompi">
<div class="sisempi1"></div>
<div class="sisempi2"></div>
</div>