Ongelmana olisi tällainen simppeli HTML-sivu ja esim. nettiselain, joka tulee iPhone SE:n tai LG Optimus L5 E610:n (Android Webkit browser) mukana. Jostain syystä noiden laitteiden selaimilla taulukon solut eivät CSS:stä huolimatta näy allekkain vaan rinnakkain.
Taulukossa on siis yksi rivi ja siinä kaksi solua, jotka haluaisin CSS:n avulla näkyvän allekkain eikä rinnakkakkain.
Miten saisin solut näkymään allekkain ilman, että muokkaan HTML-koodissa olevan taulukon rakennetta?
<html> <head> <title>test</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="css2.css" type="text/css"> </head> <body> <table> <tr> <td>aaaaa</td> <td>bbbbb</td> </tr> </table> </body> </html>
td {display:block; width:100%; box-sizing:border-box; clear:both;}
Lisäys:
Löysin tällaisen ratkaisun, mutta toki parempi ratkaisu kelpaisi:
Stackoverflow:a löysin mahdollisesti tarkoitukseesi sopivan pätkän.
td, th { text-align: left; display: block; float: left; width: 100%; } thead { display: none; }
<table> <thead> <tr> <th>Name</th> <th>Phone no.</th> <th>Address</th> <th>Wealth</th> </tr> </thead> <tbody> <tr> <th>John Doe</th> <td>00123456789</td> <td>Morgue St. 21</td> <td>$100,000</td> </tr><tr> <th>Mary Sue</th> <td>00987654321</td> <td>Impossible St. 12</td> <td>$999,999,999,999,999</td> </tr><tr> <th>Cpt. Kirk</th> <td>00999999999</td> <td>Enterprise St. 22</td> <td>$100,000,000</td> </tr> </tbody> </table>
Taulukon elementtien display-ominaisuuden muuttaminen on ongelmallista käytettävyyden kannalta, koska taulukko ei enää näy näytönlukijoille taulukkona. Tämän voi korjata lisäämällä jokaiselle display-ominaisuuden vaikuttamalle taulukon elementille sopivan role-määritteen. Esimerkiksi:
<table> <thead> <tr> <th role="columnheader">Name</th> <th role="columnheader">Phone no.</th> <th role="columnheader">Address</th> <th role="columnheader">Wealth</th> </tr> </thead> <tbody> <tr> <th role="cell">John Doe</th> <td role="cell">00123456789</td> <td role="cell">Morgue St. 21</td> <td role="cell">$100,000</td> </tr><tr> <th role="cell">Mary Sue</th> <td role="cell">00987654321</td> <td role="cell">Impossible St. 12</td> <td role="cell">$999,999,999,999,999</td> </tr><tr> <th role="cell">Cpt. Kirk</th> <td role="cell">00999999999</td> <td role="cell">Enterprise St. 22</td> <td role="cell">$100,000,000</td> </tr> </tbody> </table>
Jos tr-elementtien display-ominaisuutta muutetaan, niiden rooliksi tulee laittaa row. Vastaavasti table-elementille tulee laittaa table sekä thead-, tbody- ja tfoot-elementeille rowgroup.
Lisäksi thead pitää piilottaa esim. seuraavasti, koska display: none; piilottaisi sen myös näytönlukijoilta:
thead { position: absolute; left: -9999px; width: 1px; /* ei saa olla 0, koska elementti menee muuten piiloon näytönlukijoilta */ overflow: hidden; }
CSS-spesifikaation mukaan (teksti keltaisella taustalla, ”The display property has no effect – –”) display-ominaisuuden tulee vaikuttaa vain visuaaliseen asetteluun, ei elementtien semanttisiin ominaisuuksiin. Toistaiseksi selaimet siis toimivat väärin – toivottavasti se korjataan mahdollisimman pian.
Aihe on jo aika vanha, joten et voi enää vastata siihen.