Przedstawmy zatem zarys tego sposobu: za pomocą podstawowych metod DOM, wkleimy tabele tam, gdzie są potrzebne. W naszym przypadku, dla zobrazowania tej metody, skorzystamy z tego przykładu.
Najpierw, tworzymy kod strukturalny:
<div id="Page"><h1 class="Title">Nazwa firmy</h1><ul class="Tools"><li><a href="#">Home</a></li><li><a href="#">Site Map</a></li><li><a href="#">Szukaj</a></li><li><a href="#">Kontakt</a></li></ul><div class="Content"><p></p></div><ul class="Links"><li><a href="#">Link</a></li><li><a href="#">Jakiś Link</a></li><li><a href="#">Inny Link</a></li><li><a href="#">Link, po prostu Link</a></li></ul></div>Następnie, wklejamy naszą tabelę:
var page = document.getElementById("Page");var pageItems = new ClassNameBag(page);var pageTable = new LayoutTable(2, 2);pageTable.appendChild(1, 1, pageItems.Title);pageTable.appendChild(2, 1, pageItems.Tools);pageTable.appendChild(1, 2, pageItems.Content);pageTable.appendChild(2, 2, pageItems.Links);page.appendChild(pageTable.node);A na koniec, korzystamy z CSS by uzupełnić kompozycję. Wygląda prosto?
Prześledźmy zatem, punkt po punkcie, co robimy. Linia 1 kodu jest chyba dość oczywista: wydobywamy z kodu element o id “Page”.
Linia 2 to tworzenie ClassNameBag, które tak naprawdę nie ma znaczącego wpływu na przedstawianą technikę ale jest użyteczne i ułatwia panowanie nad wszystkim. Tworzy obiekt dla każdego elementu potomnego, który następnie można łatwo wywołać. Dajmy na to, możemy dostać się do <ul class="Links"> za pomocą wskaźnika pageItems.Links.
Linia 3 to linia gdzie zaczyna się magia: inicjowany jest nowy obiekt nazwany LayoutTable. LayoutTable “zawiera” tabelę “do wstrzyknięcia”. Jego składnia wygląda następująco: LayoutTable(ilośćKolumn, ilośćWierszy [, nazwaKlasy]). ilośćKolumn i ilośćWierszy jest oczywiste - ustala, ile wierszy i kolumn będzie w naszej “tabeli”. nazwaKlasy to parametr opcjonalny, który pozwala na dodanie dodatkowej klasy dla tworzonej tabeli (domyślnie ma “Layout”).
appendChild(kolumna, wiersz, wskaźnik) jest podobne do typowej metody element.appendChild z wyjątkiem tego, że ustala dokładne położenie elementu w tabeli. Linie od 4 do 7 rozkładają elementy na swoich pozycjach w dwuwymiarowej siatce.
Na końcu, w linii 8, “doklejamy” naszą wirtualną tabelę z powrotem do elementu Page. Element LayoutTable zawiera jeden wskaźnik, który jest zarazem wkaźnikiem DOM tabeli zbudowanej z powyższego kodu. W tym miejscu wklejanie tabeli jest zakończone, staje się ona częścią DOM strony.
By ułatwić stylowanie, każdy wiersz posiada nazwę klasy “ry”, gdzie r = row a y to pozycja w wierszu (”r1″ i “r2″ w naszym przykładzie), każda kolumna posiada podobną klasę “cy” (”c1″ i “c2″ u nas). Ta prosta sztuczka ułatwia nam kontrolę nad prezentacją naszej tabeli. Na przykład, “table.Layout tr.r1″ wybierze cały wiersz “r1″, “table.Layout td.c2″ wybierze całą kolumnę 1 a “table.Layout tr.r1 td.c2″ wybierze tylko drugą kolumnę pierwszego wiersza.
Nagle CSS i tabele znów są przyjaciółmi. Nemezys strukturalnego kodu przechodzi na stronę dobra i ratuje dzień. Granic nie ma, problemy są rozwiązane, czas na happy end - łzy wzruszenia spływają po policzkach co bardziej emocjonalnych czytelników.
Tak jak każda metoda, która wydaje się być zbyt genialna by była prawdziwa, ta posiada swoje słabe strony:
No dobrze, może z wyjątkiem tego ostatniego.
Nazywam się Tomasz Staniak, zajmuję się prowadzeniem/tworzeniem projektów internetowych. Na blogu przeczytasz o tym, co mnie interesuje a także z czym jestem związany zawodowo.
6 Responses for "[XHTML] Umarły tabele, niech żyją tabele! część 2."
Habemus Genius!
Sprytne. Ale to takie oszustwo jak "marquee zgodna z XHTML 1.0 Strict":
<div id="mq">Marquee</div>
<script type="text/javascript">
//<![CDATA[
divmq=document.getElementById("mq").
divmq.innerHTML="<marquee>"+divmq.innerHTML+"</marquee>";
//]]>
</script>
Jak już stosować tabele, to na całego, a nie wstydliwie je chować za JS.
Dziwi mnie to umiłowanie do dwu - lub więcej - kolumnowego składu dokumentu HTML. To jest chyba nielogiczne z założenia. Dokument jest przeznaczony do czytania od góry do dołu. Nawigację można umieścić u góry i u dołu lub gdzieś w małym bloczku na boku np. prawy górny róg i jakoś zgrabnie oblać to tekstem. W takich tabelach to potem jest dużo niewykorzystanego miejsca na stronie. Nie po to robi się stronę na blokach, by emulować tabele. Ale to oczywiście jest tylko moje zdanie.
plaster: widziałeś http://linuxnews.pl? Aż tak źle jest?
A ja wiem…Nie jest źle, nawet mi się podoba. Nawet w3 ma kolumny… Taka moda
Można jeszcze skorzystać z display: table, display: table-row i display: table-cell, ale chyba IE sobie z tym nie poradzi.
Leave a reply