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 > 10. Miten CSS annetaan taulukkoelementeille > 10. yhtenä isona sivuna |
|---|
Edellinen sivu | Sivun jaksot: | Seuraava sivu![]() |
Tämä sivu on jaettu jaksoihin, jotka sisältävät seuraavia aiheita:
Taulukoita käytetään usein dokumenttien perusstruktuurin luomiseen, mihin ne eivät ole alun perin tarkoitettu. CSS toimii ylipäätänsä paremmin, jos taulukoita ei käytetä perusstruktuurin luomiseen. CSS:n kanssa on paljon helpompi luoda toimivia kehyksiin perustuvia ratkaisuja, jotka toimivat sangen hyvin vanhemmillakin (kuten esim. Netscape 2.x ja MS IE 3.02) selaimilla.

Mikäli et halua käyttää
kehyksiä ja katsot, että vanhojen selainten osuus on
sangen pieni, peruselementtinä kannattaa
käyttää yleistä lohkoelementtiä
DIV. Sille voi antaa helposti CSS-kuvauksen.
Käsittelen taulukon korvaamista CSS-muotoilukeinoilla
sivulla Muotoilut![[S]](../Kuvat/buttons/S.gif)
. Selaimilla on joitakin perusongelmia CSS:n soveltamisessa taulukoihin.
Selainkohtaisia huomautuksia:
Tekstin muotoilu on taulukoissa ongelmallista, sillä
tekstin vaaka-asemointiin tarkoitetut CSS-ominaisuudet, kuten
esim. text-align:justify vaikuttavat MS IE 4.0 Windows-selaimessa virheellisesti myös taulukon paikkaan.
Määrittelyt table {text-align:justify;} ja
table {text-align:left;} siirtävät
taulukon sivun vasempaan reunaan, vaikka taulukko olisi
keskitetty käyttäen elementtiä CENTER
tai vastaavaa attribuuttia elementin TABLE
sisällä. Jos määrität
text-align lapsielementeille (esim.
table.right td {text-align:right}), taulukon
käyttäytyminen on kunnossa.
Netscape 4.x ei osaa periä tekstiin liittyviä ominaisuuksia emoelementeiltä taulukoihin. Jopa MS IE 5.x:llä ja ainakin joillakin Opera 5x -selaimilla on osittain sama ongelma. Ongelmasta selviää siten, että määrittelee tekstin
elementille TD. Koska Opera 3.6x ei tue
elementtiä TD, taulukkomääreet on
tarpeellista määritellä myös elementille
TABLE, mikäli ne poikkeavat BODY
elementin ominaisuuksista.
Helpoimmalla pääset, kun toimit seuraavan esimerkin mukaisesti:
body, table, th, td, p, ol, li,
blockquote/* määrittelemällä
nämä yhtenä ryhmänä selvitään
Netscape 4.x ja MS IE 4.0/5.0 perintäongelmista; sinun
täytyy ehkä lisätä myös joitakin muita
elementtejä tähän ryhmään, sillä en
ole käyttänyt asiakirjoissani läheskään
kaikkia mahdollisia elementtejä */
{font-size: small;
font-family: Verdana, Arial, Helvetica; /* Opera perii
sen muille elementeille; määrittele jotkin
näistä uudelleen, mikäli tarvitset joillekin
elementeille poikkeavia arvoja */}
body {background: #dcd2d3 url(taustakuva.gif); /* vain body
elementtiä koskevat määreet */
text-align:justify;} /* text-align annetaan
BODY-elementeille ja tarvittaessa eräille alielementeille
*/
Taulukkoelementteihin voi soveltaa kaikkia
aikaisemmin esille tulleita ominaisuuksia kuten erilaisia
reunuksia, taustamääreitä ja
tekstimääreitä - katso vaikka aiemmin
esittämäni esimerkki![[S]](../Kuvat/buttons/S.gif)
. Periaatteessa CSS-ominaisuudet voi
sovittaa kaikille HTML 4.0 taulukkoelementeille (TABLE,
CAPTION, THEAD, TBODY, TFOOT,
COL, COLGROUP, TH, TR ja
TD). Suosittelen vain elementtien TABLE, TH ja
TD
määrittämistä, sillä yleisesti ottaen selaimet
tukevat vain osittain HTML 4.0:n taulukkomallia.
Tosin mitä useampaa elementtiä
käytetään, sen useampitasoisia taustoja voi luoda (seuraavan mallin![[S]](../Kuvat/buttons/S.gif)
vasemmassa alalaidassa on pieni esimerkki
myös tästä).
.Taulukon otsikossa (CAPTION) toimivat useimmat ominaisuudet.
CSS2 tarjoaa mahdollisuuden myös vaihtaa sen sijaintipaikkaa caption-side ominaisuuden
avulla (![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
).
Taulukoissa solut ovat taulukkorivien
jälkeläisiä, mutta CSS2 tarjoaa mahdollisuuden
vaikuttaa myös taulukkosarakkeiden sisältöön
ns. sarakevalitsimien (column selectors) avulla. Ne
liitetään elementtiin COL, joka tulee
välittömästi elementin TABLE
perään. Alla yksi esimerkki niiden käyttämisestä (![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
- oikealla
alimpana oleva malli
koskee sarakevalitsimien toimintaa):
*#col1 { border: 3px solid black;}
*#col2 { border: 3px solid red;}
*#col3 { border: 3px solid olive;}...
<TABLE>
<COL id="col1"><COL id="col2"><COL
id="col3">...On myös rivivalitsimia (row
selectors). Niihin voi liittää
first-child-näennäisluokan. Seuraavassa on
esimerkki, jonka mukaan taulukkorivit saavat eri
värisiä reunuksia ja taustavärejä (![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
):
tr:first-child {background-color:
white; border-top: solid black 3px;}
tr {background-color: aqua; color:black;border:yellow 3px
solid;}
*#row1 {border: 3px green solid; background-color:aqua;}
*#row2 {border: 3px solid green; background-color:white;}
*#row3 {border: 3px solid blue; background-color:lime;}
*#row4 {border: 3px solid blue; background-color:yellow;}
*#row5 {border: 3px solid blue;
background-color:green;}Selainkohtaisia huomautuksia:
Opera 3.x ja Netscape 4.x tukevat rajoitetusti perustaulukkoelementtejä
(TABLE, TH ja TD). Esim. CSS-reunukset eivät toimi
em. elementeille.
Elementti CAPTION on toteutettu HTML 4.0 spesifikaation mukaisesti Operassa ja
Netscapessa. MS IE toteuttaa sen ikään kuin erityisenä taulukkosoluna. Erilaiset toteutukset
tekevät sen käytön ongelmalliseksi.
Elementin CAPTION paikan muuttaminen
toimii vain Opera 4.x+ ja Mozilla Gecko -selaimissa (![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
).
Jos käytetään TFOOT elementtiä, Opera 4.x-6.x eivät toimi
oikein ja lopputulos on sekava (korjattu Opera 7.x:ssä).
Elementin COL tuki on sangen rajoittunutta. Aiemmin esittämäni mallisivu
(![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
),
jossa oikealla alimpana oleva malli
koskee sarakevalitsimia toimii Operassa ja Mozilla Gecko -selaimissa, mutta ei MS IE:ssä.
Testeissäni kävi ilmi, että
padding ei toimi Operassa elementille
COL, mutta MS IE 5.5+:ssa toimii.
Elementti
COLGROUP on heikoimmin tuettu. Testeissäni MS IE
5.x osaa keskittää mallidokumentin![[S]](../Kuvat/buttons/S.gif)
tekstin ja Mozilla 1.1 osaa antaa sille reunusominaisuudet.
Opera 4.x+ toteuttaa erään mallisivun![[S]](../Kuvat/buttons/S.gif)
reunusvärit oikein. MS IE näyttää taustavärit oikein ensimmäistä
riviä
lukuun ottamatta.
Vain Mozilla Gecko ja Opera 7.x+ -selaimet toteuttavat :first-child edellisessä
listakohdassa mainitun mallisivun näennäisluokan. Täten nämä selaimet osaavat
parhaiten taulukoihin liittyvät säännöt.
CSS2 tarjoaa taulukkosolujen reunojen
määrittelemiseen kaksi mallia, joissa annetut arvot
periytyviä taulukon lapsielementeille. Seuraavassa kaksi
esimerkkiä näistä (![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
):
table {border-collapse: separate;
border-spacing: 15pt} /* reunukset eivät mene
päällekkäin; border-spacing
(vastaa HTML-attribuuttia cellspacing
) */
table {border-collapse: collapse;} /* reunukset
menevät päällekkäin; CSS2:ssa on tietyt
säännöt konfliktien sattuessa, mitkä
ominaisuudet valitaan eli näilläkin ominaisuuksilla on
porrastettu valintajärjestys */
W3C: CSS2: 17 Tables, 17.6 Borders
.Taulukkosolut erottavassa reunusmallissa
(border-collapse:separate) voi kontrolloida
myös tyhjien solujen käyttäytymistä
ominaisuudella empty-cells (mahdolliset erityisarvot ovat
show (CSS2:n mukaan oletusarvo) ja hide). Jos käytetään border-collapse:separate,
elementtiä TR ei huomioida, koska
tämä malli toimii vain elementeille TABLE
ja TD/ TH.
Elementti TR kuten moni muukin elementti toimii vain border-collapse:collapse mallin kanssa. CSS2-spesifikaation mukaan selainten, jotka toteuttavat
reunusmallit, oletusarvona (initial value) tulisi
olla border-collapse:collapse.
Selainkohtaisia huomautuksia:
Erillisten reunojen malli toimii ainakin Opera 4.x+ ja Mozilla Gecko -selaimissa. Opera piilottaa oletusarvoisesti tyhjät solut. Mozilla Gecko -selaimissa tämä asia on DTD-riippuvainen
.
MS IE 5.x+ ei tue border-spacing ja empty-cells ominaisuuksia. Border-collapse:separate toimii vain vastakohtana border-collapse:collapse määrittelylle, mutta erottava reunusmalli ei ole kokonaisuudessaan tuettu. Soluvälit täytyy määritellä cellspacing HTML-attribuutilla.
Yhdistävä reunusmalli toimii ainakin MS IE 5.x+, Opera 4.x+ ja erään s-postin mukaan Mozilla 0.9.9+ -selaimissa. Netscape-selaimista sitä tukevat ensimmäisenä Netscape 7.0. Uusimmat Mozilla Gecko -selaimet eivät aina näytä kaikkia reunuksia ainakaan taulukoissa, joissa solun jokaiselle sivulla ei ole määritelty reunuksia. Myös Operalla ja MS IE:llä on toisinaan samoja ongelmia. Opera 4.x-6.x on ongelmana myös se, että taulukkosolujen välit tulisi keskittää (![[M]](../Kuvat/buttons/M.gif)
![[S]](../Kuvat/buttons/S.gif)
). MS IE ja Opera 7.x toteuttavat yhdistävän reunusmallin monimutkaisissa tapauksissa siisteimmin.
Mozilla Gecko -selaimet käyttävät oletusarvonaan border-collapse:separate; border-spacing:2px. Se on sama lähtöarvo kuin yleisesti ottaen kaikilla selaimilla, kun CSS:ää ei ole käytetty. Se vastaa samaa kuin oletusarvo cellspacing="2". Mikään selain ei käytä oletusarvona border-collapse:collapse koska selaimet, jotka eivät ymmärrä mitään CSS2:n taulukoiden reunusmalleista käyttäytyvät samoin kuin taulukot, joilla on border-collapse:separate.
CSS-reunukset eivät toimi taulukoissa Opera 3.6x ja Netscape 4.x -selaimilla.
MS IE 4.0 Windows ei tue reunusmalleja, mutta reunusten ominaisuudet voi muuten määritellä CSS:llä.
Elementin TABLE attribuuttia border käsitellään ikään kuin joukkona esimääriteltyjä CSS-ominaisuuksia. Tämä on reunusten käsittelyn yleisperiaatteen
johdonmukaista toteuttamista. Esim.
<TABLE border="10"> -määritystä vastaa seuraavaa CSS:
table {border-collapse:separate} /* ei välttämätön, koska selaimet käyttävät tätä oletuksena *//* Elementin
table {border:10px solid; border-color: #bbb #7e7e7e #7e7e7e #bbb} /* HTML:llä määriteltyjen reunusten väri vaihtelee selainkohtaisesti. Tämä vastaa MS IE -selaimissa HTML-attribuutin värejä. Kokeilemalla voi löytää vastineen HTML:llä määritellyn reunuksen värille muissa selaimissa. Ks. enemmän reunustyyleistä sivulta 8*/
th, td {border:1px solid; border-color: #7e7e7e #bbb #bbb #7e7e7e}TABLEattribuuttibordermäärittää soluille aina yhden pikselin levyisen reunuksen ja vain ulkoreunalla voi olla paksu reunus */
Mikäli haluat yhden pikselin tai reunuksettomat
taulukkosolut, jotkut selaimet vaativat border="0"
ja cellspacing="0" attribuutit. Yritä laatia reunukset systemaattisesti ja
siten ettei vanhemmillakaan CSS:ää tukevilla selaimilla
tule kaksinkertaisia reunuksia.
th, td {border: solid black;}/* yhteiset ominaisuudet */
td.left,th.left {border-width: 1px 1px 0px 1px;}/* vasemmanpuoleisimmat solut */
td.right, th.right {border-width: 1px 1px 0px 0px;}/* muut */
.leftLast {border-width: 1px 1px 1px 1px;}/* viimeinen solu vasemmalla */
.rightLast{border-width: 1px 1px 1px 0px;}/* muut viimeisen rivin solut */
...<table cellspacing="0"...>
<tr>
<td class="left">...</td><td class="right">...</td>...
...
<td class="leftLast">...</td>...<td class="rightLast"></td>
</tr>
</table>
Tällä tavoin saat paremman ulkoasun Netscape 4.x -selaimille ja yhtäläisen reunusten esitystavan MS IE 4.x+ Windows -selaimille. Uusimmat selaimet (esim. Opera 6.x+) eivät tarvitse yhtään HTML-attribuuttia taulukon esitysasun määrittelemiseen, mutta vielä toistaiseksi ei ole mielekästä toteuttaa taulukoiden laatimista niiden ehdoilla.
Raunusmallien lisäksi CSS2 antaa mahdollisuuden
muuttaa table-layout:fixed sitä, millä
perusperiaatteella selain käsittelee taulukoita.
(Oletusarvona on auto. Mikäli käytät
ryhmitettyjä sääntöjä, voit kumota
muutoksen joltakin tietyltä taulukolta tekemällä
lisäsäännön. Ominaisuus ei automaattisesti
periydy lapsitaulukoille.)
Selain ei etukäteen lue koko taulukkoa, mutta se tarvitsee
välttämättä taulukon
kokonaisleveysarvon, jonka se voi saada joko elementin TABLE avulla or
sitten yksittäisten taulukkosolujen kautta. Taataksesi ongelmattoman toiminnan, sinun voi tarvita
joissakin tilanteissa määritellä leveys sekä
taulukolle että elementeille TH ja
TD. Selain laskee niin pian kuin mahdollista
taulukkosarakkeiden lukumäärän ja
määrittelee sitten sarakeleveyden. Sarakkeiden leveys
ei riipu lainkaan solujen sisällöstä vaan
yksinomaan annetuista leveysarvoista sekä mahdollisista
reunoista ja soluväleistä. Alla on yksinkertainen määrittelyesimerkki:
table.someClass {width:600px;
table-layout:fixed;}
table.someClass th, table.someClass td {width:150px} /* mikäli taulukolle annettu arvo
on pienempi kuin soluleveyksien kautta saatu kokonaisarvo, taulukon leveyttä kasvatetaan
*/Tämä menetelmä vähentää
modeemiyhteyksillä merkittävästi sitä aikaa,
jolloin selain ei näytä tietokoneen
näyttöruudulla yhtään mitään. Sivun
kokonaislatausaika ei juuri muutu, mutta sivujen selaajan ei
tarvitse odotella sitä, että selain lukee ensin koko
taulukon ja vasta sen jälkeen näyttää sen.
Selain pyrkii näyttämään mahdollisimman pian
ensimmäisen ikkuna-alan. Menetelmä on hyvin käyttökelpoinen
paljon tekstiä sisältävissä isoissa
taulukoissa (esimerkkitaulukko
).
Jos haluat leveän taulukkosolun muiden solujen yläpuolelle, määrittele ennen pitkää riviä piilorivi:
.piiloA {width:200px; font-size:0px; line-height:0}
.piiloB {width:250px; font-size:0px; line-height:0}
.piiloC {width:100px; font-size:0px; line-height:0}
...
<table>Pitkä rivi
<tr>
<td class="piiloA"> </td>
<td class="piiloB"> </td>
<td class="piiloC"> </td>
</tr>
<tr>
<td colspan="3"></td>
</tr>
...
</table>
Nopealla taulukonlaskentamenetelmällä on eräitä haittapuolia. Jos taulukon lopussa on enemmän taulukkosarakkeita ja siten myös soluja kuin taulukon alussa, näitä ylimääräisiä soluja ei huomioida. Jos taulukossa on leveitä kuvia, ne eivät välttämättä mahdu taulukkosoluun.
Nopean taulukonkasaamismenetelmän käyttäminen on perustavalaatuinen suunnittelukysymys. Jokaisen projektin alussa pitää miettiä, käytetäänkö sitä vai ei. Jotta sivut latautuisivat nopeasti, on syytä välttää sisäkkäisiä taulukoita.
Nopean taulukkoluontimallin toimivuus kannattaa kuitenkin
testata
mahdollisimman monessa selaimessa. Periaatteessa mitä
tarkemmat ohjeet selain saa, sitä paremmin systeemi
toimii. Niiden sijasta tulisi
käyttää DIV-elementtejä.
Tämän mallin vaihtoehtona on rakentaa sivujen
perusrakenne vain DIV-elementtien varaan.
Käsittelen tätä mallia seuraavalla sivulla.
Selainkohtaisia huomautuksia:
Table-layout:fixed toimii hyvin MS IE 5.5+, Opera 4.x+ ja Mozilla Gecko -selaimissa.
Yleistoimivuus on paras Opera 4.x+ -selaimissa, sillä ne antavat mahdollisuuden
rullata vain osittain luettua taulukkoa. MS IE 5.5+:ssa selaimen täytyy ensin kokonaan lukea taulukko
ennen kuin sitä voi rullata.
Operassa 4.x:ssä on pieni bugi.
Vaikka periaatteessa on tarpeetonta määritellä
ensimmäisten solujen (elementit TH or
TD) leveys, Opera tarvitsee niille toisinaan
width ominaisuuden, vaikka taulukon kokonaisleveys
on annettu.
Opera 4.x-6.x -selaimet leikkaavat ylimääräisen solun pois, jos jatkoriveillä on enemmän sarakkeita kuin mitä on ensimmäisellä taulukkorivillä. MS IE tekee niin pitkissä taulukoissa. Opera 7.x ja Mozilla Gecko -selaimet näyttävät aina kaikki taulukkosolut.
MS IE leikkaa liian leveät kuvat. Opera 4.x+
ja Mozilla Gecko -selaimet näyttää kuvan
loppuosat viereisissä soluissa. Tosin
määrittelemällä overflow:hidden,
Opera ja Mozilla käyttäytyvät samoin kuin MS IE.
MS IE 5.5:ssä, Mozilla Gecko ja Opera 7.x+ -selaimissa tilannetta
voi auttaa laittamalla jonkun kuvan ympärille elementti
DIV ja sille esim. overflow:auto;
width:150px. Jos kuvan leveys on tätä suurempi,
kuvaa voidaan rullata. Haittana on se, että esillä on
aina vähintään yksi vierityspalkki.
Mozilla Gecko -selaimet vaativat matalille taulukkoriveille line-height ominaisuuden
(Operalle riittäisi pieni fonttikoko).
CSS2 on jättänyt avoimeksi, miten ominaisuus
height tulisi tulkita taulukoissa, joten selaimet
voivat tulkita sen haluamallaan tavalla. Mielestäni se
merkitsee taulukoissakin sisällön korkeutta (se on myös Opera Softwaren
tulkinta).
Periaatteessa omainaisuus width tarkoittaa myös taulukoissa
sisällön leveyttä (content width; width-ominaisuus on leveys,
joka tulee varata konkreettiselle sisällölle, esim. tietyn levyiselle kuvalle). Koska
elementillä TABLE ei ole
välitöntä asiasisältöä (varsinaisen asiasisällön
välissä on vähintään elementti TR), normaalisti vain mahdolliset
reunukset kasvattavat taulukon muodostaman lohkolaatikon kokonaisleveyttä.
Ongelmia tuottaa
kuitenkin se tosiasia, että elementin TABLE HTML-attribuutin width
arvon laskemisessa ei noudateta samaa laskentakaavaa kuin CSS-ominaisuuden width
laskennassa. HTML 4.01 spesifikaatiossa sanotaan attribuutista width
seuraavaa:
This attribute specifies the desired width of the entire table...
Tuon pohjalta siihen lasketaan reunukset eikä kyse ole sisältöleveydestä kuten CSS:ssä.
Suorittaessaan taulukoiden dimensioiden laskentaa selainten on otettava huomioon seuraavat seikat:
border-attribuutti että CSS:n
border-omaisuudet vaikuttavat taulukon sisältö- ja kokonaisleveyteen, selaimen joka
ymmärtää CSS:ää, tulee huomioda molemmat reunusten
määrittelytavat sekä kaikki mahdolliset täytteet, jotta width attribuutti
tai ominaisuus voitaisiin laskea oikein. Tämän asian ei pitäisi olla ongelma
moderneille selaimille, sillä niiden tulisi pystyä käsittelemään
border-attribuuttia ikään kuin joukkona esimääriteltyjä
CSS-ominaisuuksia.width-attribuutti että
width-ominaisuus on määritelty, seurataan width-ominaisuuden
antamia arvoja ja laskentatapaa.Opera 5.1x - ja MS IE Windows -selaimet tulkitsevat reunuksellisten taulukkoelementtien leveyden lähes aina eri lailla - jopa HTML-attribuutteja käytettäessä:
border="2" width="600" tai border="2"
style="width:600px" tai style="border:2px solid black; width:600px;" = 604
pikseliä Operalla.border="2" width="600" tai border="2"
style="width:600px" tai style="border:2px solid black; width:600px;" = 600
pikseliä MS IE Windowsilla.Esimerkkitapauksessa Opera toimii väärin HTML:n ja MS IE CSS:n suhteen.
Mozilla Gecko - sekä MS IE 6.0 Windows -selaimet seuraavat ns. standard-compliant -moodissa
elementin TABLE suhteen MS IE 5.x Windowsia, kun ne yleensä
toimivat width-ominaisuuden suhteen samoin kuin Opera.
Myös MS IE 5.0 Mac käytös on DTD-riippuvainen
. Toimintamuodolla on suurempi merkitys taulukkoelementtien leveysarvojen tulkintaan kuin MS
IE 6.0 Windowsissa.
Tein Mozilla Gecko -selainten toteutuseroja käsittelevän sivuparin, jossa on käytetty
kahta eri DTD:tä (HTML 4.0 Transitional
ja HTML 4.01 Strict
). Mozilla Gecko -selainten käyttäytymisen DTD-riippuvuus vaikuttaa
siinä hieman yhden taulukon leveyteen, mutta enemmän siihen, miten taustaväri
näytetään. Sivupari antaa seuraavat tulokset (linkit viittaavat
kuvakaappauksiin):
: cellspacing luo Mozilla 0.9:ssä BODY-elementin
värisiä alueita. Vrt. Opera 5.12
. Huomautus. TABLE C leveys on HTML 4.01 spesifikaation
pohjalta eri, mitä Opera näyttää.
TABLE G on täysin oikein, sillä jos taulukko ei mahdu DIV-elementin
laatikkoon, sen tulee mennä sen ylitse eikä DIV-elementin tule kasvaa taulukon
leveyteen (vain elementin TABLE kohdalla sisällön leveyden tulee kasvattaa
elementille annettua kokonaisleveyttä).
+ uudemmat spesifikaatiot:
background-color tulee Mozilla 0.9:ssä koko taulukkoon aivan kuten Operalla ja MS
IE:llä. Taulukoiden leveys toimii saman kaltaisesti kuin IE 6.0:sta otetussa editoidussa kuvakaappauksessa
.width-ominaisuutta taulukolle. Mikäli cellspacing
attribuutin arvo on suurempi kuin 0 (oletusarvo on 2), sille saa siistin
lopputuloksen vain määrittelemällä taulukon ulkopuolelle DIV or
CENTER elementti, jonka reunuksella on sama väri kuin taulukon emoelementin taustalla
sekä itse lohkolla on sama taustaväri kuin taulukolla. Tästä tilannetta demonstroi
mallidokumentissa TABLE F.Tein HTML 4.01 Strict
dokumenttityyppiä käyttävän testisarjan
. Sain siihen liittyen s-postia selainten Mac-versioiden toteutuksesta. Tein taulukon, jossa
tarkoittaa oikeata toteutusta ja
tarkoittaa virheellistä toteutusta
silloin, kun toteutuksia arvioidaan HTML 4.01 ja CSS2 spesifikaatioiden pohjalta:
| Testit | Windows | Mac | ||||||
|---|---|---|---|---|---|---|---|---|
| Microsoft | Netscape | Opera | Microsoft | Netscape | Opera | |||
| 5.5 | 6.0 | 6.2 | 5.12, 6.x | 7.0 Beta1 | 5.0 | 6.0 | 5.0 Beta 4 | |
Test 0a![]() | ||||||||
Test 0b![]() | ||||||||
Test 0c![]() |
||||||||
Test 0d![]() |
||||||||
Test 1![]() |
||||||||
| Test 1 Fixed ![]() |
||||||||
Test 2![]() |
||||||||
Test 3![]() |
||||||||
Test 4![]() |
||||||||
| Test 4 Fixed ![]() | ||||||||
| Oikein | 5/10 | 6/10 | 5/10 | 6/10 | 6/10 | 6/10 | 5/ 10 | 6/10 |
Selainkohtaisia huomautuksia:
MS IE 6.0 Windows-version toteutus tulisi olla DTD-riippuvainen ja annetulla DTD:llä sen tulisi esittää Test 1-4 samalla lailla kuin Mac-versio.
MS IE:n Mac-versiossa annetut
/
kääntyvät
viimeistä testiä lukuun ottamatta päinvastaisiksi, mikäli DTD poistetaan. Jos
Mac-versio toteuttaisi Test 0-0d DTD-riippumattomasti, se toimisi sangen
johdonmukaisesti.
Käymieni keskustelujen pohjalta eräs Mozilla org. työntekijä sanoi, että Mozilla Gecko -selainten tulisi toimia annetulla DTD:llä sillä tavoin kuin olen esittänyt. Tulevissa Mozilla Gecko -selaimissa saattaa olla erilainen käytös. Periaatteessa uuden Mozillan pitäisi käyttäytyä määrittämälläni DTD:llä Test 1-4 suhteen samalla tavalla kuin MS IE 5.0 Mac.
Opera 5.0:n Mac-versio toimii johdonmukaisemmin kuin 5.x-6.x Windows-versiot. Se toimii samalla
lailla kuin MS IE 5.0:n Mac-versio kun käytetään testissä mainittua DTD:tä. Jos
HTML width-attribuutti toimisi HTML 4.01 spesifikaation mukaisesti, selaimen
käytöksessä ei olisi moitittavaa. Operan käytös ei ole DTD-riippuvainen.
Mielestäni Operan Mac-versio ja Opera 7.x Windows ovat testin johdonmukaisimmin toimivia
selaimia.
Operan 5.x-6.x Windows-versiot toimivat kaikista epäjohdonmukaisimmin, sillä selainten
käytös on riippuvainen annetusta width-attribuutin/ ominaisuuden arvosta. Opera
käyttää outoa "width-kytkintä", joka on riippuvainen siitä, mikä on
todellisen ja laskennallisen sisällön välinen suhde, kun noudatetaan
width-attribuutin mukaista laskentakaavaa. HTML:n laskentakaava on päällä
silloin, kun todellinen sisältö on suurempi kuin laskennallinen sisältö. CSS:n
laskentakaava kytkeytyy tilanteessa, jossa todellinen sisältö on yhtä suuri tai pienempi kuin
laskennallinen sisältö. Lopputulos on joko HTML 4.01 tai CSS2 spesifikaation mukaisesti.
CSS3 antaa järkevämmän tavan muuttaa leveyden laskentakaavaa kuin
"DTD-kytkimen", jota käsittelen spesifikaation
ongelmissa
.
Kun määritellään leveys taulukkosoluille, saadaan helpommin sama lopputulos
eri selaimilla (Test 4 Fixed
).
Periaatteessa dokumenttien perusrakenteita olisi helpompi luoda ilman taulukoita. Käsittelen vaihtoehtoisia sivurakennustapoja seuraavalla sivulla. Taulukoita tarvitaan kuitenkin aina sellaisen datan kanssa, jonka esittäminen vaatii taulukoita. Siksi mahdolliset ongelmatilanteet on syytä tuntea.
Sivujen tekijä voi määritellä CSS:n siten, että syntyy konfliktitilanteita, jotka selaimet selvittävät eri lailla. Sivujen tekijä on voinut vahingossa aiheuttaa konfliktitilanteen koko taulukkoleveyden ja yksittäisten solujen muodostaman kokonaisleveyden välille.
Hän
on voinut myös määritellä ominaisuuksia, jotka eivät sovellu tietyille
taulukkoelementeille, esim. table {padding:...} ja tr {margin:...;
padding:...}.
Selaimissa on myös erinäisiä pikku virheitä, jotka aiheuttavat ongelmia. Muutamia tällaisia ongelmamahdollisuuksia on vielä syytä vielä luetella.
Selainkohtaisia huomautuksia:
Opera 5.x+ ja MS IE ratkaisevat joissakin tilanteissa
taulukon kokonaisleveyden ja yksittäisten solujen leveysristiriidan eri tavalla. Opera laskee taulukon
kokonaisleveyden aina soluille määriteltyjen
width ominaisuuksien perusteella, mutta MS IE normaalitapauksissa
(table-layout:auto)
elementille TABLE annetun width
ominaisuuden mukaan. Esim. seuraava määrittely saattaa
luoda vakavan ongelman:
td {width:200px; border:2px solid
black}
table {width:400px; border:1px solid black}
Eräissä internetiin tehdyissä taulukoissa oli
kolme taulukkopalstaa. Opera esitti taulukon vähän yli
600 pikseliä leveänä ja MS IE noin 400 pikselin
levyisenä. Mielestäni Opera toimii oikein, sillä taulukon tulee kasvaa soluille
määriteltyjen leveyksien mukaisesti.
Ominaisuudet width ja height luovat
sisältölaatikon (content box) eli
eräänlaisen kuvitteellisen lohkon tai pikemminkin
varauslaatikon. Vaikka taulukolla olisi erityisen suuri prioriteetti (esim
table#special {width:400px}) solujen kokonaisleveyttä ei tulisi pienentää.
CSS2 spesifikaation antaa toki selaimille oikeuden näyttää taulukon sisältö
parhaaksi katsomallaan tavalla kun normaali taululukonmuodostusalgoritmi on käytössä,
mutta mielestäni MS IE ottaa "ylimääräisiä vapauksia". MS IE toimii kuitenkin
kiinteällä taulukkoalgoritmilla (table-layout:fixed) yleensä samoin kuin
Opera.
Jos sivujen tekijä asettaa kiinteätä
taulukkosommittelua käyttävän TABLE elementin width
ominaisuuden arvon suuremmaksi kuin mitä saadaan laskemalla yhteen ensimmäisen taulukkorivin
kokonaisleveyteen vaikuttavien ominaisuuksien yhteissumma, MS IE 6.0 Windows laskee parhaiten sekä
koko taulukon että yksittäisten taulukkosolujen leveydet. Opera 6.04 ja Mozilla 1.1a virheistä
saa käsityksen testisivulla
, jota tulee verrata MS IE 6.0 Windows -selaimen käytökseen. Koska
taulukoiden luomisessa on selainten välillä
tulkintaeroja, leveysarvojen määrittelyssä kannattaa olla hyvin huolellinen ja
välttää konflikteja niin paljon kuin mahdollista.
Selaimet hyväksyvät vaihtelevassa määrin
table {padding:...} jne. oudot määrittelyt, mutta osa tulkinnoista on todella outoja ja
ne aiheuttavat ongelmia taulukoiden reunusmalleille. Kun
määritellään ryhmiä, olisi oltava huolellinen ja varottava
määrittelemästä edellä mainittuja sääntöjä
(tämä koskee myös thead, tfoot, tbody {margin:...;
padding:...}).
Taulukkosolujen leveyksien laskennassa on muistettava yleiset dimensioiden määrittelyn
ongelmat joita olen käsitelly sivulla 8
). Jotta
dimensio-ongelmat vähenisivät, kannattaa noudattaa neuvoa
, jonka olen antanut
käsitellessäni yleisesti lohkojen dimensioihin
liittyviä ongelmia.
Havaitsin, että se ei aina toimi Opera-selaimissa (koskee ainakin versioon 6.01 asti) taulukkosoluissa. Olen siksi käyttänyt joissakin tilanteissa täytekuvia ja niille linkitettyjä leveysarvoja (Netscape 4.x -selaimet käyttäytyvät oudosti eräistä kuville annetuista CSS-ominaisuuksista). Asettamalla leveyden mille tahansa solujen sisällä olevalle elementille ajaisi saman asian.
![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)
