Kaikki aihepiirit: Luettelen alla aihealueittain tekemäni aihepiirit. Paluulinkkeinä tähän aihepiiriin on tämä valikko ja sivun yläreunassa oleva linkki Aihepiiriluettelo.
| ||||||||||||||||||
![]() | Aihepiiriluettelo > CSS-oppaan etusivu > Opassivut > 11. Mikä on CSS2:n Visuaalinen muotoilumalli > 11. yhtenä isona sivuna |
|---|
Edellinen sivu | Sivun jaksot: | Seuraava sivu![]() |
Tämä sivu on jaettu jaksoihin, jotka sisältävät seuraavia aiheita:
Tämä sivu käsittelee oikeastaan CSS2 visuaalisen muotoilumallin (Visual formatting model, CSS2 9-11) tehokkaimpia keinoja. CSS tarjoaa eräitä mahdollisuuksia vaikuttaa dokumenttien struktuuriin.

, 10
Visual formatting model details
.Tosin XML dokumenteissa voi käyttää
vaihtoehtoisesti tai CSS:n kanssa XSL kieltä. CSS:n osaaminen on silti perustavalaatuinen kysymys XML dokumenttien luomisessa. CSS2 sisältää
itsessään kuitenkin eräitä puuttuvia piirteitä
(viittaan niihin sivulla Erikoistyylisivut
).
Ominaisuus float siirtää elementtejä joko vasemmalle tai oikealle - elementit ikään kuin "kelluvat" näihin suuntiin. Tällä tavoin määriteltyjen elementtien pitäisi olla samalla vaakatasolla kuin elementtien, joille ei ole määritelty ominaisuutta float. Kelluvien elementtien korkeuden ei saisi vaikuttaa emoelementin korkeuteen. Kaikkien kelluvien elementtien (mukaan luettuna normaalisti rivinsisäiselementit) tulee käyttäytyä lohkoina. Ominaisuuden float kanssa käytetään usein ominaisuutta clear. Alla mainitulla sivulla on joitakin esimerkkejä, jotka käyttävät näitä ominaisuuksia:
.Alla on esimerkki, jossa on käytetyt näitä ominaisuuksia: (![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
):
img.icon
{float: left; /* kuva kelluu vasemmalle - toinen arvo on right
*/
clear: left;} /* kuvan vasen puoli on "siivottu" muista elementeistä (vaikka tilaa olisi useille kelluville elementeille kaikki kelluvat elementit ovat nyt omilla riveillään) - muita arvoja ovato left
ja all
(sen paremmin oikealla kuin vasemmalla puolellakaan ei ole mitään) */Kelluvana elementtinä on järkevä käyttää elementtiä
DIV, jolloin voi luoda kehys- ja taulukkovapaan perusrakenteen. DIV-elementteihin voi tehdä kelluvat linkkilistat. Tekstin voisi kirjoittaa kelluvan elementin viereen eikä olisi mitään tarvetta käyttää kehysvapailla sivuilla dokumentin perusmuotoiluun taulukoita (tiukasti ottaen taulukoiden käyttö dokumenttien perusrakenteen luomiseen on taulukoiden väärinkäyttöä).

Itse asiassa on mahdollista luoda dynaaminen perusrakeene jakamalla sisältö kelluviin jaksoihin. 640x480 ja 800x600 näytöillä sivuilla näkyisi vain yksi palsta, mutta 1024x768
tai suuremmilla näytöillä voisi olla kaksi tai useampi palsta (esimerkkisivu
- käytä niin leveää ikkunaa kuin pystyt).
Ideaa voi soveltaa navigaatiokehyksiin, joilla ei ole tarkkaa leveysarvoa. Jos ominaisuutta float käytetään elementin IFRAME kanssa, joka sisältää päänavigointilinkit.
CSS2 antaa mahdollisuuden asettaa lohkoelementtien korkeudelle ja leveydelle maksimi- ja miniarvot. Olen joskus käyttänyt kehyksiä, koska ne toteuttavat sama kuin max-width CSS-ominaisuuden. Kehyksillä on muutamia haittatekijöitä, joiden vuoksi en enää niitä käytä kuin poikkeustapauksissa.
Annan sinulle esimerkin, joka on tarkoitettu käytettäväksi sivulla, jonka BODY-elementin luokka on CssSite
. Perus teksti on DIV-elementin sisällä:
body.CssSite div {max-width:500px;
text-align:justify; font-family: Verdana, Arial, sans-serif;
font-size: x-small; margin-left:auto; margin-right:auto;
border:1px solid #660033; padding:10px;}Sen jälkeen kuin perus layout on määritelty, sivujen tekijä määrittää kaksi sisäkkäistä lohkoa kuten alla olevassa esimerkissä (![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
):
body.CssSite div {max-width:500px;
text-align:justify; font-family: Verdana, Arial, sans-serif;
font-size: x-small; margin-left:auto; margin-right:auto;
border:1px solid #660033;padding:10px;}
body.CssSite div div {border:1px solid #660033;
margin:0 10px 0 0; float:left;
width:70px; height:200px; clear:left;} /* tässä lohkossa, joka on edellisen lohkon sisällä on varattu paikka linkeille; seuraavat lohkot ovat yksinkertaisia kappaleiden kaltaisia lohkoja, sillä päälinkkejä ei ole mielekästä esittää kuin kerran
*/Tällaiset lohkot olisivat monessa suhteessa parempia kuin taulukot, joilla on kiinteät leveysarvot. Kapeissakaan ikkunoissa ei tulisi vaakavierityksiä, mutta tekstin leveys olisi sivujen tekijän hallittavissa.
Selainkohtaisia huomautuksia:
Ominaisuudet float ja clear on toteutettu huonosti Netscape 4.x -selaimissa. Jos useampi elementti on samalla riville selain pistää kaikki elementit samaan "pinoo". Käy lävitse W3C:n CSS1 test suite ominaisuuden float kohdalta.
.MS IE 4.x for Windows ei pysty panemaan suurta määrää kelluvia elementtejä usealle riville. Saattaa olla mielekkäämpää käyttä taulukoita, jos tarkoituksena ei ole luoda vapaasti skaalautuvaa tekstiä. Jos haluat joustavat leveysarvot käytä prosenttiarvoja.
Jos perusrakenne perustuu kelluville elementeille jotkut selaimet laittavat satunnaisesti vaakavierityspalkin. Systeemi pelaa sangen hyvin ainakin Opera 4.x+, MS IE 5.5+ ja Mozilla Gecko Windows-selaimissa (todennäköisesti myös monissa Mac ja Linux -selaimissa).
Jos normaalisti rivinsisäiselementteinä käyttäytyvät elementit määritellään kelluviksi ne tarvitsevat ainakin ominaisuuden width. Muutoin ne näyttävät totaalisen erilaisilta eri selaimissa.
Kelluvien elementtien kokonaiskorkeus saattaa joissakin MS IE -selaimissa kasvattaa emoelementin korkeutta. Asia on korjattu ainakin MS IE 6.0 Windows -selaimessa.
Joissakin selaimissa kelluvat elementit siirtyvät hieman alaspäin eivätkä mene suoraan joko vasemmalle tai oikealle. Kelluvat elementit eivät siten asemoidu kaikissa selaimissa aivan samalla lailla.
Ominaisuus clear ei toimi oikein ainakaan MS IE 5.x Windows
ja Netscape 6.1 -selaimissa. MS IE 4.x Windows -selaimessa ominaisuus clear aiheuttaa ylimääräisiä rivikatkoj (myös ominaisuus float voi niitä satunnaisesti aiheuttaa).
Netscape 4.x ja vanhemmat Netscape-selaimet eivät tue IFRAME elementtejä. Selaimille, jotka eivät tue IFRAME elementtiä tulisi olla vaihtoehtoiset linkit.
Max-width toimii testieni mukaan vain Opera 4.x+, Mozilla Gecko, Konqueror (Linux) -selaimissa (erään kuvakaappauksen perusteella myös Safari-selaimessa (Mac) ).
Koska MS IE ei tue display ominaisuutta (käsittelen sitä edempänä) XML-tasoiseti ainoa keino joustavien sivurakenteiden luomiseksi XML-dokumenteille on ominaisuuden float käyttö. On syytä muistuttaa, että DIV +
float näyttää tyystin toisenlaisilta selaimissa, jotka eivät tue CSS:ää. Nopeasti lataantuvat taulukot
ovat tässä mielessä taaksepäin yhteensopivia, mutta ne toimivat MS IE:ssä vain (X)HTML-dokumenteille. Yleisesti ottaen toinen keino kehysten korvaamiseen on ominaisuuden position käyttö, mitä käsittelen seuraavaksi.
CSS2:ssa on erityinen asemointimalli (position model). Tässä mallissa position:static merkitsee tavanomaista asemointia jos mitään varsinaiseen asemointiin liittyviä ominaisuuksia ei ole annettu. Aino järkevä käyttö tälle arvolle on poikkeustilanteissa ottaa pois käytöstä muut asemointiarvot. Muut asemointityypit (suhteellinen, absoluuttinen ja kiinteä - relative, absolute ja fixed) antavat mahdollisuuden kerrostettujen elementtien käytölle (layered elements). Asemoidut elementit luovat uuden säilytinlohkon (containing block) sisään jääville elementeille.
Jotta kerrostettujen elementtien pinotasoa (stack level) voitaisiin kontrolloida käytetään z-index ominaisuutta. Mitä suurempi numeerinen arvo, sitää korkeammalla tasolla elementti on suhteessa toisiin elementteihin, joilla on myös z-index ominaisuus tai ominaisuutta ei ole määritelty lainkaan (elementit, joilla on z-index:3 asemoidaan korkeammalle kuin elementit, joilla on z-index:1 jne.; jos asemoitu elementti on toisen asemoidun elementille sisällä arvot koskevat vain suhteessa toisiin saman elementin sisällä oleviin elementteihin; suhteessa muihin elementteihin niillä on sama arvo kuin emoelementillä).
, 10
Visual formatting model details![[Pw]](../Kuvat/buttons/Pw.gif)
Kun elementeillä on position:relative asemoidut elementit sijoitetaan suhteessa normaaliin eli staattiseen asemointiin. Yleisimmin käytetty asemointitapa on position:absolute. Tällä tavalla asemoitujen elementtien sijainti lasketaan yleensä alkusäilytinlohkon (initial containing block) peruteella eli juurielementistä käsin. Suhteellisesti ja absoluuttisesti asemoitujen elementtien suhteen esi-isäelementtien asemoinneilla on vaikutusta koska laskeminen aloitetaan lähimmästä asemoidusta esi-isäelementistä käsin. Siksi absoluuttisesti asemoidut elementit eivät ole aina asemoitu juurielementin mukaant. Absoluuttisesti asemoitujen elementtien paikka tulisi laskea säilytinelementin täytenurkista (padding edges), jolloin säilytinelementin margin ja border ominaisuuksilla on vaikutus, mutta padding ominaisuudella ei.
Elementit, jotka asemoidaan position:fixed sijoitetaan suhteessa näyttöporttiin (viewport) eli selainikkunaan, jossa sivu sijaitsee. Koska kiinteästiasemoitujen elementtien laskemiskohdilla on aina samat sijainnin toisin kuin muissa asemointityypeissä muiden elementtien asemoinneilla ei ole vaikutusta kiinteästi asemoitujen elementtien sijainteihin. Kiinteästi asemoidut elementit, jotka ovat kiinteästi asemoitujen elementtien jälkeläiselementtejä aloittavat aina sisään sijoitettavien elementtien asemointipaikkojen laskemisen aivan alusta.
Absoluuttisesti ja kiinteästi asemoidut elementit ovat kokonaan pois elementtien normaalista asettelusta. Siksi tällä tavoin asemoitujen elementtien leveys ja korkeus ei millään tavoin vaikuta muiden elementtien sijainteihin tai mitoituksiin. Absoluuttisesti tai kiinteästi asemoitujen elementtien mitoituksia ei voi määritellä prosentuaalisesti suhteessa staattisesti asemoituihin emoelementteihin.
<body>
<div style="position:static"><div style="position:absolute; height:500px; width:500px; top:0; left:0"</div></div>
<!-- staattisesti asemoidun elementin korkeus on nolla --><div style="position:static; height:500px; width:500px;"><div style="position:absolute; height:100%; width:100%; top:0; left:0"</div></div>
<!-- absoluuttisesti asemoidun elementin korkeus ja leveys tulisi laskeaHTMLelementin perusteella --> -->
Alla on esimerkki tyypillisestä absoluuttisesti asemoidun elementin käyttötavasta (![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
):
...
html, body {margin:0; padding:0; border-width:0}
...
<DIV style="position:absolute; top:10px; left:10px; z-index:5; width:400px;">
...</DIV>
<IMG src="./Taulut/koneet.gif" style="position:absolute; left:20px; top:50px; z-index:3">
<IMG src="../Kuvat/Css/omakuvaIso.gif" style="position:absolute; left:100px; top:20px;z-index:4">
<DIV style="position:absolute; top:290px; left:10px; z-index:5; width:400px;">
<DIV style="border:1px solid black; padding: 5px">...
...</DIV></DIV>
Suositukseni:
Asemoinnit määritellään aina Web-sivun vasemmasta yläkulmasta left ja right ominaisuuksia käyttäen kuten edellä ollessa esimerkissä on toimittu.
Asemoiduille elementeille on aina määritelty ominaisuus z-index ja tarvittaessa myös muille elementeille.
Elementille BODY ja säilytinelementeille ominaisuudet margin-top, margin-left, padding-top, padding-left, border-left-width ja border-top-width on määritelty nollaksi. Käyttämällä padding-right jne. tulee dimensio-ongelmia
. Paras lopputulos saadaan, jos reunukset jne. määritellään ei-asemoiduille jälkeläiselementeille.
Asemoduilla elementeillä on aina pikselimääräiset height ja width ominaisuudet. Samalla varmistetaan, että sisältö mahtuu annettujen arvojen sisään ilman overflow ominaisuuden antamista.
Position:absolute toimii luotettavimmin oikein, jos asemoidut elementit ovat aina BODY-elementin lapsielementtejä. Jos elementtejä sijoitetaan sisäkkäin, sisemmän elementin olisi hyvä pysyä ulomman sisäpuolella.
Absoluuttisesti asemoituja elementtejä ei pitäisi käyttää sivuilla, jotka ovat siten vaakatasossa skaalautuvia, että asemoidut elementit voivat peittää asiasisällön.
Vältä asettamasta asemoituja elementtejä lomakekontrollielementtien ja upotettujen visuaalisten objektien yläpuolelle.
Älä asemoi taulukkosoluja.
Absoluuttisesti asemoituja elementtejä koskevia selainkohtaisia huomautuksia:
Opera Software mukaan sisäkkäiset ratkaisut (esim. <div style="position:absolute; top:50px;left:50px"> ... <div style="position:absolute; top:20px;left:20px"> ... </div></div>) toimivat MS IE 5.0:ssa virheellisesti.
En voinut verifioida tätä Windows-selaimia koskevaa väitettä. Sen sijaan huomasin, että MS IE 5.x Mac ottaa virheellisesti huomioon ei-asemoitujen esi-isäelementtien marginaalit. Havaitsein, että Opera 4.x-5.x laskee joskus sisemmät asemoidut elementit virheellisesti ottamatta huomioon ulompien elementtien asemointeja. Opera 6.x:n kohdalla havaitsin, että position:absolute + sisäkkäin relativiisesti asemoiduista elementeistä asemointi ei toiminut sisimmille elementeille.
Ominaisuus bottom toimii virheellisesti kaikissa selaimissa. Jos mitään säilytinelementtiä ei ole määritelty selaimet määrittelevät asemoinnin vierittämättömän selainikkunan alalaidan perusteella. right ei toimi kaikissa position:absolute tukevissa selaimissa.
MS IE 4.x Windows sisäkkäisen elementin asemointi ei toimi, jos elementti on sijoitettu kokonaan asemoidun säilytinelementin ulkopuolelle.
Selaimet määrittelevät leveyden ja korkeuden eri lailla mikäli niitä ei ole määritelty. Joillakin Opera 7.x -selaimilla leveys ja korkeus ovat nolla, jos niitä ei ole eksplisiittsesti määritelty. Valikot voivat mennä kasaan.
MS IE 5.x Mac ja Mozilla Gecko -selaimet eivät osaa asemoida taulukkosoluja.
Prosenttiarvoiset width ja height ominaisuudet eivät toimi oikein MS IE - ja Opera-selaimissa. MS IE laskee asemoidut elementit emoelementin perusteella vaikka emoelementti olisi staattisesti asemoitu. Jos emoelementillä ei ole tarkkaa korkeusarvo, arvo on yhden tekstirivin korkuinen. Opera ottaa height ominaisuuden staattisesti määritellyltä emoelementiltä (jos emoelementillä ei ole height ominaisuutta korkeus on näyttöportin korkeus vähennettynä vaakavierityspalkille varatun tilan verran). Opera 7.x laskee width oikein HTML elementistä käsin näyttöportin perusteellla tilanteissas, jotka muistuttavat alla olevaa esimerkkiä:
html {width:400px; width:400px}...
<body>
<div style="position:static; height:500px; width:500px;"><div style="position:absolute; height:100%; width:100%; top:0; left:0; background-color:yellow"</div></div>Vain Mozilla Gecko -selaimet laskevat asemoinnit HTML-elementin täyttöreunojen perusteella. MS IE 5.x+ ja Opera 7.0 Beta 1 Windows browsers jättävät huomioimatta marginaalin. MS IE 5.x Mac -selain ottaa toisinaan huomioon HTML-elementille annetut täytteet. Vanhemmat Opera-selaimet hylkäävät sekä marginaalit että reunukset kuten myös MS IE 4.x Windows (jälimmäinen selain hylkää kaikki em. ominaisuudet). Tein asiasta testisarjan
. Tavanomaisissa tilanteissa Opera 4.x-6.x laskee asemoidut elementit reunusten kulmista (border edges) käsin.
Erään s-postin mukaan MS IE 5.0 Mac aloittaa laskemisen toisinaan BODY elementistä käsin. Tapauksessa BODY-elementille oli annettu padding-left:100px absoluuttisesti asemoidut elementit siirtyivät 100px oikealle (testisarja
, jossa valikon pitäisi olla aina sivun vasemmassa yläkulmassa).
Opera tarvitsee asemoiduille elementeille sekä vaaka- että pystyarvot (MS IE käyttää asemoinnin oletuksena vasenta yläkulmaa).
MS IE 5.x+ Windows (paitsi MS IE 6.0 standard-compliant -moodissa
) tarvitsee asemoitujen elementtien siäsällä oleville TD elementeille korkeusarvot. Mozilla Gecko -selaimet tarvitsevat toisinaan ominaisuutta height asemoiduille DIV elementeille. MS IE 4.x Windows näyttää tarvitsevan asemoiduille elementeille aina sekä height että width ominaisuudet.
Asemointi ei aina toimi Netscape 4.x -selaimissa. Tällaisissa tilanteissa täytyy käyttää vastaavia HTML-attribuutteja LAYER tai ILAYER elementeille (ks. esimerkki sivulta, joka käsittelee dynaamisia valikoita
). Jos asemoidut elementit ovat täysleveän taulukon taulukkosolujen sisällä kaikki ominaisuudet eivät toimi oikein.
Melkein kaikissa uusissa selaimissa on ongelmana se, että
z-index ei toimi kunnolla upotettujen lisäosia vaativien objektien kanssa ja/tai lomakekontrollielementtien kanssa. Operan
kohdalla (6.x-sarjaan asti) kyse on mollemista tapauksista ja Konqueror 3.1 kohdalla lomakekontrollielementeistä. MS IE:llä on ongelmaSELECT-elementin kanssa. Uusimissa Mozilla Gecko -selaimissa tätä ongelmaa ei ole. Tosin, jos kerroksilla, jotka on laitettu upotetun elementin
päälle on background-color:transparent upotetun objetin emoelementin
taustaväri kuultaa läpi ja kerrokset leikkaavat palan upotetusta objektista.
Kaikki CSS2:ta tukevat selaimet eivät tue kaikkia overflow ominaisuuden arvoja. Käsittelen ongelmaa edempänä kun mainitsen position:fixed liittyviä ongelmia.
Navigointielementtien
suhteen paras vaihtoehto voisi olla position:fixed, jolla voi emuloida
kehysten käyttöä. Navigoinnin suhteen etuna on se, että pysyy paikoillaan, vaikka
asiakirjan muuta sisältöä rullataan. Mikäli kaikki linkit eivät mahdu samaan
lohkoon niille voi periaatteessa määritellä overflow:auto, jolloin loppuja
linkkejä voi rullata.
Kun systeemin laittaa taulukkosolun (TD)
sisälle, voidaan luoda hyvin taaksepäin yhteensopivia
tiedostoja (esimerkkisivu
). Systeemille on
aina syytä määrittää oma lohko
elementtiä DIV käyttäen, esim. (![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
):
div.jokuLuokka
{overflow:auto;
width:100px; height:150px; position:fixed; left:10px;
top:10px}Jos ajattelemme sivustojen tekemistä
idealistiselta näkökannalta,
BODY-elementin kanssa ei ole
vättämätöntä käyttää
mitään lapsielementtiä dokumentin visuaalisen
perusrakenteen luomiseksi. Sen sijaan että käytetään juurielementtiä
HTML visuaalisena perus rakenne-elementtinä käytetään
elementtiä BODY ja kiinteä
navigointielementti muodostaa oman kerroksen
(layer). Juurielementti HTML toimii
visuaalisena pohjaelementtinä, kuten seuraavassa
esimerkissä:
html {background-color:#603}/* dokumentilla on kaksitasoinen tausta */
body.Class {max-width:600px; margin:auto; background-color: white}/*BODYtoimii visuaalisena perus rakenne-elementtinä */
#one, #one2, one3 {z-index:4; text-align:right; border:1px solid black; background-color:#ffc; font-size:11px; padding:1px 2px 1px 0px;}/* navigointielementtien eri variaatioden yhteiset ominaisuudet */
#one2 {position:fixed; bottom:0px; right:0px; width:102px; height:27px;}/* #one2 käyttääDIVelementtiä kiinteänä navigointielementtinä selaimet, jotka eivät osaa toteuttaa CSS:ää näyttävät sen sivun lopussa alavasemmalla */
Systeemi toimii periaatteessa jopa niin, että määrittää
max-width ominaisuus
elementille HTML, jolloin HTML toimii myös dokumentin perus
rakenne-elementtinä (kuvakaappaus
):
html {padding:0; margin:auto;
max-width:500px; background-color:red}Ratkaisussa
ei tarvita taulukoita, ei kehyksiä eikä
sisäkkäisiä DIV elementtejä,
mutta dokumentin näkyvä rakenne on silti kontrolloitu.
Ajatus käyttää
kiinteää
navigointielementtiä ei ole uusi. Dave Ragget
ehdotti HTML 3.0 Draft:ssa (1995), että
BODY elementin sisällä voitaisiin
käyttää paikallaan pysyvää
BANNER elementtiä (ks.
myös HTML 3.0, elementti BODY
):
The BANNER element is
used for a banner section which appears at the top of the window
and doesn't scroll with window contents. This can be used for
corporate logos, copyright statements and disclaimers, as well as
customized navigation/search controls.Jos haluat antaa kaikille kiinteätä asemointia tukeville selaimille jonkin elementin pysyvän paikoillaan, määrittele vain suhteellisen yksinkertaisia kokonaisuuksia. Varmista, että elementit ovat sopivilla paikoilla selaimilla, jotka eivät tue kiinteätä asemointia.
Jos asemoit kiinteiden elementtien sisällä muita elementtejä, käytä vain asemointityyppiä position:relative.
Jos luot monimutkaisia dynaamisia ratkaisuja käytä niitä vain sellaisten selainten kanssa, jotka pystyvät toteuttamaan monimutkaiset rakenteet. Luo tarvittaessa selainkohtaisia tiedostoja.
Määritä mahdolliset dynaamiset valikot vain vasempaan yläkulmaan suhteellisen kapealle alueelle siten, että päävalikko ei mene asiasisällön päälle.
Selainkohtaisia huomautuksia:
Tuntemistani selaimista position:fixed että overflow:auto toimivat vain
MS IE 5.0+ Mac, Mozilla 0.6+, Netscape 6.1+ ja Opera 7.x+ -selaimissa. Molemmat toimivat todennäköisesti myös Konqueror (Linux) ja Safari-selaimissa (Mac-selain; (en ole niissä testannut overflow-ominaisuutta; Konquerorissa olen testannut position:fixed ja Safari näyttäisi erään kuvakaappauksen perusteella sitä tukevan). MS IE Mac overflow:auto ei toimi kunnolla.
Käsittelen toisessa yhteydessä
visibility ominaisuutta koskevaa ongelmaa. On syytä tiedostaa, että
position:fixed toimii lähes moitteitta vain sangen uusista Mozilla Gecko Opera 7.0
Beta 2 -selaimista lähtien.
MS IE 5.5+ Windows ja Netscape 6.0x tukevat overflow:auto mutta
eivät position:fixed. Sivulla 8
on tähän asiaan liittyvä linkki testisivulle ja toteutuksista annetut kommentit.
Opera 4.x-6.x:ssä ei toimi overflow:auto. Operalla on myös eräitä
pienempiä virheitä, joita käsittelen eräällä lisäsivulla
.
position:fixed ei toimi eräiden upotettujen objektien kanssa
Opera 5.x ja MS IE 5.0 Mac -selaimissa (IFRAME rullautuu sivun mukana; sama
asia koskee ainakin Operan kohdalla myös APPLET, EMBED ja
OBJECT elementtien avulla upotettuja objekteja).
Jos position:fixed asemoitujen elementtien
jälkeläiset on määritelty position:absolute avulla jotkut Mozilla Gecko
selaimet laskevat absoluuttisesti asemoitujen elementtien paikan ikään kuin ne eivät olisi
kiinteästi määriteltyjen elementtien sisällä (käsittelen tätä asiaa
tarkemmin eräällä sivulla
). Konqueror 3.1:llä ongelmana on se, että absoluuttisesti määritellyt elementit jäävät kiinteästi määriteltyjen elementtien alle (z-index ei toimi oikein).
Jos käytetään ominaisuutta bottom on ehdottomasti
määriteltävä ominaisuutta
height, jotta position:fixed toimii Operalla kuten pitäisi.
max-width toimii elementin HTML kanssa
vain CSS2:ta tukevissa Opera-selaimissa. MS IE -selaimilla on koko
dokumenttia ajatellen jonkinlainen width-ominaisuus,
on välttämätöntä lisätä
DIV elementti ja käyttää sitä
dokumentin perusrakenteen luomiseen. MS IE:lle leveys voi olla
kiinteä, mutta Opera 4.x+:lle, Mozilla Gecko, Konqueror ja Safari -selaimilla sen arvo
voi olla joustava, kun määrittelee CSS:n seuraavalla
tavalla:
div.perusRakenne {width:550px;}/* MS IE ei lue tätä sääntöä;
div[class="perusRakenne"] {min-width:200px; max-width:550px; width:auto}width:autoeliminoiwidth:550pxvaikutuksen */
Kiinteästi asemoitujen elementtien sijaan voi käyttää JavaScript-koodauksella toteutettuja "kelluvia" elementtejä, jotka pienellä viivellä asettuvat paikoilleen. Toimivuus on kuitenkin jossakin määrin huonompi kuin kiinteästi asemoiduilla elementeillä.
Käsittelen tällaisia elementterjä eräällä lisäsivulla
.
Eräät Mozilla Gecko -selaimet tulkitsevat katselukanavan eri tavalla. Operassa vierityspalkkeja ei
lasketa katselukanavaan, mutta joissakin Mozilla Gecko -selaimissa ne lasketaan. Tein asiasta myös erityisen mallisivun
, josta minulla on
muutamia
kuvakaappauksia:
-
ok.
- sivu on
madalletussa ikkunassa, jolloin tulee vaakatason
siirtymä (korjattu Mozilla 0.9:ssä).MS IE 5.0 Mac versiossa ei toimi edellisellä esimerkkisivulla
margin:auto, mikä näkyy kuvakaappauksesta
. Mac IE:llä monimutkaiset dynaamiset valikot eivät toimi kiinteästi asemoituina.
Mitä itse tiedän vain Opera 7.x, Mozilla 0.9-1.1 / Netscape 6.1-7.0 Konqueror + todennäköisesti Safari osaa käsitellä kunnolla monimutkaisia dynaamisia valikoita (tällöinkin muistettava, että position:fixed + position:fixed eikä position:fixed + position:absolute ei käytetä).
Mahdolliset
display-ominaisuuden erityisarvot ovat inline , block,
list-item, run-in, compact, marker,
table, inline-table, table-row-group,
table-header-group, table-footer-group, table-row,
table-column-group, table-column, table-cell,
table-caption ja none.
.Kyseessä on CSS:n voimakkain työkalu. Tämän omainaisuuden tarkoituksena on määritellä elementin peruskäyttäytymistapa, esim. käyttäytyykö elementti kuin rivinsisäis- tai lohkoelementti.
Juuri ominaisuus
display on keino muuttaa
HTML-dokumentin luonne XML:n kaltaiseksi merkintäkieleksi. Kaikkia arvoja ei ole kuitenkaan
tarkoitettu käytettäväksi
HTML-dokumenteissa, sillä eräiden taulukkoa koskevien
ominaisuuksien idea on vain siinä, että
CSS-ominaisuuksien avulla voisi luoda XML-asiakirjoille
täydellinen HTML 4.0 taulukkomallin. Spesifikaatio varoittaa
muuttamasta taulukoiden normaalia käyttäytymistä.
Selaimien ei edes tarvitse hyväksyä HTML-taulukoiden
rakenteen muutosyrityksiä.
Periaatteessa se mahdollistaa sopivasti sisäkkäisten elementtien rakenteen muuttamisen esim. listanäytöstä taulukoihin tai päinvastoin. Alla on esimerkkinä taulukkorakenteen luomisesta CSS:n avulla:
*[class~="tables"]{display:table;
border:2px blue solid; padding:2px; margin-bottom:5px;} /*
edellyttää, että kaksi elementtitasoa on
tämän sisällä, jolloin minkä tahansa
elementin voi muuttaa taulukon peruselementiksi */
*[class~="tables-tr"]{display:table-row} /* muuttaa
seuraavan tason elementin taulukkoriviksi */
*[class~="tables-td"]{display:table-cell;
text-align:justify;} /* muuttaa seuraavan tason elementin
taulukkosoluksi */
td p {display:list-item; padding-left:12px; list-style-type:
disc; list-style-image:
url(./Css/Kuvat/pallo-vihrea.gif); list-style-position:
inside; /* mikäli edellä mainitulla tavalla on
luotu taulukko, taulukkosolujen sisällä olevat P
elementit muuttuvat listaelementeiksi
*/}Teoriassa XML-dokumenteille on mahdollista luoda taulukon kaltainen
rakenne luomatta kaikkia taulukkotasoja. Selaimen
tulisi automaattisesti luoda puuttuvat tasot. Taulukkosolut tulee aina
luoda, mutta elementille TABLE ei tarvitse olla
vastinetta. Ilman taulukkoriviä luovaa elementtiä ei
voi käyttää rinnakkaisia taulukkosoluja vaan solut
menevät aina allekkain.
Ainoastaan tyhjät elementit ovat ongelmallisia.
HTML:ssä se ei voi poistaa tyhjien elementtien
muotoiluominaisuuksia muuten kuin poistamalla ne
käytöstä display-ominaisuuden arvon
none avulla. Tällä ominaisuudella voi
muuttaa silti näennäisesti dokumentin elementtien
järjestystä. Elementtien todellinen järjestys ei
muutu, mutta jos jotkut elementit piilotetaan ja toiset
näytetään, tapahtuu ikään kuin
elementtien paikan vaihto (![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
).
Kun laittaa display:none, voi fiksusti toteuttaa tiedotteen CSS:n
käytöstä. Seuraavankaltainen teksti näkyy
vain vanhoille selaimille - miksi uudemman selaimen omistajan
tarvitsisi lukea seuraava teksti:
<DIV style="display: none;">Mikäli tämä teksti näkyy, selaimesi ei tue HTML 4.0 style-määrittelyjä ja CSS-tiedostoja. Et menetä vanhoilla selaimilla mitään olennaista informaatiota, mutta hanki uudempi selain, jos haluat nähdä sivut juuri sellaisina kuin olen ne suunnitellut. Sivuni näkyvät parhaiten MS IE 5.x+, Opera 5.x+, Netscape 6.x+ or vastaavilla muilla selaimilla (kuten Mozilla ja NeoPlanet).</DIV>
Tätä voi verrata HTML-kommenttien
käyttöön. Erona on kuitenkin se, että
kommenttimerkkejä ei tarvitse sijoittaa dokumentin
runko-osaan (kuten esim.<!--
<TD>Tämä on kommenttimerkinnällä
näytöltä poistettu taulukkosolu</TD>
-->) vaan dokumentin osien piilottamisen voi
toteuttaa erillistiedoston kautta. Muutokset voivat olla myös dynaamisia, jolloin saadaan aikaiseksi
visuaalisia efektejä.
Selainkohtaisia huomautuksia:
Vain Opera 4.x+ ja Mozilla Gecko -selaimet pystyvät luomaan XML-dokumenteille taulukot CSS:n avulla. Katso seuraavia sivuja ja mallikuvaa:
![[S]](../Kuvat/buttons/S.gif)
- MS
IE 5.0
näyttää eräässä kohdin sinisen
reunustuksen, mutta ei sen keskellä listaelementtejä,
mutta muu muotoilu toimii).![[S]](../Kuvat/buttons/S.gif)
- MS
IE 5.0 pystyy luomaan
dokumentille vain sangen vaatimattoman struktuurin
(yksikään listakuva ei näy); kuvaa lukuun
ottamatta tiedoston rakenne pitäisi olla HTML-version
kaltainen).![[S]](../Kuvat/buttons/S.gif)
-
MS IE 5.0 pystyy luomaan vain XSL:n avulla XML-dokumenteille
kunnon rakenteen ja esitystavan.![[S]](../Kuvat/buttons/S.gif)
- saat
kuvasta
käsityksen myös siitä, mitä MS IE 5.0 ei pysty
CSS:n avulla näyttämään.Tein myös toisen esimerkin
. MS IE
näyttää sivun vain sekasotkuna, mutta Opera 4.x+
ja Mozilla Gecko -selaimet selkeinä taulukkoina.
Mozilla Gecko -selaimet ja Opera 4.x+ pystyvät toteuttamaan
useimmat
display-arvot. Testaamistani arvoista
display:run-in ja display:compact eivät toimineet Netscape 6.2.1:ssä,
mutta ne toimivat Opera 4.x+:ssa.
MS IE 5.0 pystyy tällä
ominaisuudella vain muuttamaan jonkun elementin
käytöksen joko lohko- ja rivinsisäiselementtien
kaltaiseksi (display:block or
display:inline) sekä piilottamaan jonkin alueen
näyttöruudulta (display:none).
Ne toimivat MS IE 4.x Windows ja Netscape 4.x -selaimissa, mutta display:block ei luo
lohkoa vaan se toimii vain display:none vastakohtana samaan tapaan kuin
display:inline.
MS IE 6.0 Windows tukee kaikkia CSS1-tason näyttötyyppejä + CSS3-tason
display:inline-block, jota muut selaimet eivät tue. Sillä on DTD-riippuvainen
erityiskäyttö, johon viittaan sivulla
.
Display-ominaisuuksilla voi
leikkiä kytkemällä ne dynaamisiin
pseudoluokkiin ja luoda siten visuaalisia muutoksia. Tällöin niillä saa aikaiseksi
samankaltaisia muutoksia kuin skripteillä. Pelleille mallikuvillani, jos sinulla on
käytössä MS IE 4.x+, Mozilla Gecko tai Opera 7.x+ (![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
).
Koska Opera 4.x-6.x eivät tue display-ominaisuuden dynaamisia muutoksia ne eivät
toimi em. Opera-selaimissa.
Uutta CSS2 tasolla on
myös visibility eli
se, näytetäänkö elementin
määrittelemä kohde vai ei
(visibility:hidden; visibility:visible).
Spesifikaation mukaan ero määrittelyyn
display:none, on siinä
visibility:hidden ottaa määritellyn tilan. Arvon hidden avulla
voi luoda piilomuotoiluja. Ominaisuutta voi hyödyntää
käyttämällä dynaamisia
näennäisluokkia ja siten aikaansaada dokumentin rakenteen dynaamisia
muutoksia.
Selainkohtaisia huomautuksia:
Netscape 4.x ei tunnu toteuttavan visibility ominaisuutta aina oikein.
MS IE ja (useimmissa tapauksissa) Mozilla Gecko -selaimet
näyttävät elementit, joilla on visibility:visible vaikka ne olisivat sellaisten
elementtien sisällä, joille on määritelty visibility:hidden, mikä on
oikein. Opera piilottaa virheellisesti tällaiset elementit aina ja Mozilla Gecko, jos
position:fixed on käytetty (engl. testisivu
).
Vertaa keskenään MS IE 5.x+, Mozilla Gecko tai Opera 7.x+ -selaimella ominaisuuksien
display ja
visibility käyttäytymistä (![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
).
Muutokset eivät toimi vanhemmissa Opera-selaimissa.
.Ns. DHTML![[S]](../Kuvat/buttons/S.gif)
:ssä on kyse CSS + JavaScript/ ECMAScript koodauksen avulla
aikaansaaduista dokumentin rakenteen dynaamisista visualisista muutoksista (useimmiten
käytetään ominaisuuden visibility arvojen vaihtamista). Yleisimmin sitä
käytetään dynaamisissa valikoissa. Käytän nykyisin itse niitä ja tein
dynaamisten valikoiden luomisesta liitesivun
.
En käsittele DHTML/DOM:ia laajasti kuten en myöskään
eräitä muita CSS:ään liittyviä asioita, joihin viittaan viimeisellä sivulla. Vertaa
tämän sivun näkökulmia taulukoiden
mahdollisuuksiin.
![Tämän sivun alkuun [Alku]](../Kuvat/buttons/TopImage.gif)
![Edellinen sivu tai jakso [Edell.]](../Kuvat/buttons/leftArrow.gif)
![Seuraava sivu tai jakso [Seur.]](../Kuvat/buttons/rightArrow.gif)
Etusivu
Mitä uutta?
Sanasto
Sisällysluettelo
Kaikki aihepiirit![[Palaute]](../Kuvat/buttons/Email.gif)
![Tulosta tämä sivu! [Tulosta]](../Kuvat/buttons/Print.gif)
![Sivun englanninkielinen versio - The English version of the page [En]](../Kuvat/buttons/En.gif)
![Kopiointioikeudet - Copyrights [Copyr.]](../Kuvat/buttons/copyright.gif)

![Tämän sivun alkuun [Alku]](../Kuvat/buttons/Top.gif)
