@leadersmind:
Google jest akurat znane z notorycznie słabiutkiego kodu. Nie zdarza im się to ZAWSZE, ale często. Niektórzy z ich programistów, mimo że potrafią odpowiedzieć na pytanie "ile piłeczek zmieści się w autobusie?", to jednak zdają się nie mieć zbyt dużej dyscypliny. Kiedyś GMail w Operze nie działał, bo komuś w Google się nie domknęło iframe'a. Usterkę usuwali bodajże tydzień, od momentu łaskawego przyjęcia jej do wiadomości i złożenia obietnicy, że "zostanie to przekazane dalej".
Co do tych divów to chciałbym rozwiać jeden mit. Div praktycznie nie jest bardziej semantyczny niż tabela. CZASEM robi nieco mniej problemów, ale w sumie to na jedno wychodzi. 10 elementów tabelarycznych to praktycznie to samo co 10 divów prezentacyjnych.
Liczbę elementów prezentacyjnych należy redukować, jeśli chcemy mieć ładny podział na warstwy.
Divów w ogóle należy unikać; one nie reprezentują prawie żadnej semantyki ("prawie", bo niektóre programy szukają np. elementu z największą liczbą tekstu na stronie -- może to być div). Tam gdzie się da, lepiej użyć list, nagłówków, blockquote'ów, czy addresssów. A teraz, jak wchodzi HTML5, można już użyć przydatnych, semantycznych elementów (header, footer, article, section, aside...). Divów używamy z musu, gdy nie ma bardziej odpowiedniego, semantycznego elementu. W HTML-u wcześniejszym niż wersja 5 taka sytuacja zdarza się niestety nader często. Trochę pomagają tu mikroformaty, ale tylko trochę.
Jeśli w tym przykładzie będziemy musieli zastosować puste divy, których jedynym zadaniem będzie zasłonięcie tła, to ten kod będzie brzydki i tyle (kod, który powinien określać strukturę, będzie całkowicie związany wyłącznie z prezentacją).
Czasem się nie da/nie opłaca inaczej, ale warto mieć świadomość, że ładne to to nie jest.
EDYCJA:
Nie zauważyłem, że @leadersmind prosił na ostatniej stronie o kod. Rozwiązanie na tych nieszczęsnych divach wydaje mi się dość oczywiste -- zwykłe pozycjonowanie absolutne. No, nie takie zwykłe, bo przy użyciu zarówno top, jak i bottom IE6 wysiada. Ale tego dinozaura olewamy, chyba że klient ładnie poprosi, jak zwykł mówić riddle.
<!DOCTYPE html>
<html>
<head lang="pl">
<meta charset="utf-8">
<title>[html][css] Poziome paski (4programmers.net)</title>
<style>
body {
background: #06F none repeat left top; /* tu można wstawić grafikę */
}
#main {
width: 800px;
margin: 0 auto;
padding: 0 1px; /* 1px na błędy zaokrągleń w IE;
* jak komuś to tu przeszkadza to niech otoczy #main
* jeszcze jednym 'ugly' elementem i umieści to tam
*/
}
#masthead {
height: 140px;
}
#content {
background: #C6C6C6;
height: 400px;
}
#footer {
height: 30px;
}
#ugly_left,
#ugly_right {
position: absolute;
top: 90px;
bottom: 90px;
background: #C6C6C6;
}
#ugly_left {
left: 0;
right: 50%;
margin-right: 400px;
}
#ugly_right {
left: 50%;
right: 0;
margin-left: 400px;
}
</style>
</head>
<body>
<div id="main">
<h1 id="masthead">
[html][css] Poziome paski
</h1><!-- /masthead -->
<div id="content">
Główna zawartość
</div><!-- /content -->
<address id="footer">
Stopka
</address><!-- /footer -->
</div><!-- /main -->
<div id="ugly_left"></div>
<div id="ugly_right"></div>
</body>
</html>
Zamiast obrazka ustawiłem tło strony na czerwone. Jest to ustawione tylko w jednym miejscu, dla jednego elementu -- body. Daje to pewność, że po dodaniu background-image będzie on ładnie wykafelkowany (bo czemu miałby nie być?). To HTML5, ale w wersji minimalistycznej i absolutnie bezpiecznej w każdej przeglądarce.
Za nagłówek i stopkę wstawiłem z przekory inne elementy niż div. Zależnie od zawartości prawdziwej strony prawdopodobnie będzie trzeba to zmienić jednak na ogólniejsze divy (i dopiero tam umieścić ew. nagłówki, czy adresy).