Perfection or Vanity

Project: Terminated

Blog nie jest już dalej prowadzony ani aktualizowany. Mimo tego, wpisy i komentarze są dalej dostępne. Możesz przeczytać pożegnalny wpis albo przejść do archiwum.

W Internecie można często natknąć się na strony, które zostały złożone przy pomocy CSS-a, a ich wspólnym motywem jest stała szerokość, wycentrowanie i dwie kolumny. Z powodu niesamowitej popularności takich układów od lat, przypadkowi oglądający biorą wypełnienia kolorem kolumn za pewien standard projektowania (co nie jest niczym złym, ponadto wspomniane układy są zwykle estetyczne) i próbują zaaplikować u siebie taki efekt. Z różnym skutkiem.

Wśród takich twórców stron nierzadko mamy do czynienia z początkującymi w kaskadowych arkuszach stylów, którzy wychowali się na tabelkach i no cóż - nie do końca umieją się przestawić na nowoczesne układy. Pierwsze zderzenie z rzeczywistością to zrozumienie, że elementy blokowe, takie jak div nie rozciągają się jak tabele, tylko w zależności od ilości zawartości. Uniemożliwia to wypełnienie kolorem sidebara i głównego kontenera, jak kiedyś wypełniano komórki tabelki.

Istnieją sprytne sztuczki pozwalające obejść „problem”, niektórzy modyfikują wysokość kolumn JavaScriptem, niektórzy rozciągają kolumny do nieprawdopodobnych wysokości i potem je przycinają marginesami, lecz większość używa techniki zwanej Faux Columns dla wspomnianych layoutów o stałej szerokości, opisanej dawno temu w A List Apart.

I okej, nie ma nic niepoprawnego w takiej technice, jeśli stosujący ją ma lekkie pojęcie co robi.

Dodając tło dla kontenera tych kolumn musisz pamiętać o mechanizmie wybijania elementów z przepływu tekstu w dokumencie pozycjonując je, albo aplikując float. W tamtym artykule opisałem sposób radzenia sobie ze znikaniem tła przez dodanie elementu z clear: both poniżej kolumn. Jest to prawie zawsze złe rozwiązanie.

Wyobraźmy sobie, że na stronie w menu umieszczasz masę linków, przycisków (oraz animowanych flashowych zegarków ;-)). Wyświetlanie się tych elementów spowalnia załadowanie wszystkiego poniżej nich w kodzie - także elementu z clear. Nic nie rozciąga kontenera dla kolumn i tło nie pokaże się dopóki nie zostanie wczytana (zazwyczaj) stopka.

Gdy operujemy kontrastującymi kolorami teł, to jest całkiem możliwe, że gość nie będzie w stanie odczytać tekstu dopóki nie wczyta mu się cała strona. Nie o to nam chyba chodziło. Przykładowo u Rafiego widzimy jak strona się zachowuje przed załadowaniem:

Złe zastosowanie Faux Columns

Istnieje właściwość CSS, która pozwala kontenerowi rozciągać się samoczynnie w miarę jak przybywa w niej zawartości, nawet tej pływającej. Mowa o overflow. Ustawiony na hidden nie spowoduje wielkich problemów (Firefox 1.0 miał problemy z auto), Internet Explorer zaakceptuje taki styl, jeśli blok będzie miał włączony hasLayout (zwykłe nadanie szerokości wystarczy - bo przecież o takich szablonach mówimy).

Gdybym u siebie na blogu korzystał z clear to dopóki nie załadowałyby się wszystkie wpisy, komentarze oraz menu boczne, to część strony przesłaniałaby trawka. Także jeśli mimo wszystko używasz mechanizmu resetowania pływania kolumn, zastanów się czy zawsze Twoja strona będzie wyglądała okej - nawet jeśli jeszcze nie jest cała załadowana.

Informacje i hiperłącza

Blog o projektowaniu zgodnych ze standardami stron internetowych.

Praktyczne przykłady, sztuczki CSS, sposoby obchodzenia błędów przeglądarek, lekki i nieinwazyjny JavaScript, użyteczny design, dostępność i skrypty użytkownika.

Informacje o wpisie

Napisał riddle 08 sierpnia 2006 o 09:52

Kategorie: CSS, Design, Użyteczność, Web 2.0

Dodaj do:

Wpisy archiwalne

Archiwum miesięczne

  1. Było już o tym na http://blog.olicio.us/ ;) Przydałoby się też height:100% włączyć jak juz sie włączy overflow:hidden , bo któraś z przeglądarek sobie z tym nie radzi.

  2. Nie jest tak różowo, jakby się wydawało.
    Ostatnio mój klient zażyczył sobie, żeby strona działała pod Mozillą. I mimo, że strona wyglądała tak samo w trzech (!) przeglądarkach (MSIE, Firefox, Opera), to pod Mozillą się posypała. Po kilku godzinach męczenia kodu winowajcą okazał się właśnie 'overflow: hidden'.
    Z tego powodu powróciłem do stosowania rozwiązania PIE:
    http://www.positioniseverything.net/easyclearing.html

  3. Tylko czy jakieś znaczenie ma jak wygląda strona podczas ładowania ?

  4. Jeżeli chcesz szybko dojść do jakiejś informacji to ma, bo nie musisz czekać na załadowanie się całej strony.

  5. Jeśli strona ma tyle zawartości, że ładuje się 10 sekund, to musisz 10 sekund czekać aż zaczniesz coś czytać.

  6. nawiązując do akapitu o divach rozciąganych jak tabelki:
    Na kilku forach internetowych rozpętałem rozmowę na temat własnie dwóch równych kolumn... nawet na webhelpie, gdzie i Ty się udzieliłeś i dałeś mi kilka linków Riddle'u drogi :).

    Ale w sumie najciekawsza dyskusja rozwineła się na http://www.forum.kasart98.com/viewtopic.php?t=17454
    napisałem tam miedzy innymi dlaczego rozwiazanie z a list apart nie zawsze jest takie dobre...

  7. A co z tymi, ktorzy przegladaja strony www z wylaczona grafika/flashem?
    Jak wtedy zachowa sie taka strona?

  8. endryou, przecież ff i mozilla (teraz seamonkey) to ten sam silnik - Gecko. może poprostu starą wersję miałeś?

  9. @bela:
    gecko gecko nierówne :)
    - firefox 1.5.0.6 - gecko/20060728
    - seamonkey 1.0.2 - gecko/20060516
    - mozilla 1.7.12 - gecko/20050915
    i stąd pewnie wynikały moje trudności.

    W każdym razie wnioski są takie, że:
    a) nawet przeglądarka spod stajni mozilla może źle interpretować kod
    b) należy zachęcać użytkowników mozilli do sięgnięcia po seamonkey, co nie jest łatwe, bo oni uważają, że mozilla = gecko = firefox - z powyższego widać, że tak nie jest

  10. Zupełnie nie odpowiada mi podpieranie się obrazkami w tle, jeśli chodzi po prostu o kolor tła. Po co inwestować w nową technologię, która już na starcie wymaga przeróżnych poprawek i łatania dziur? Nie wiem, czy projektujący standard CSS mieli jakieś racjonalne argumenty za nie wprowadzeniem tej funkcjonalności; ale wydaje mi się, że to po prostu niedopatrzenie (jeśli się mylę - będę wdzięczny za wyprowadzenie mnie z błędu).

    Nie orientuję się za bardzo w formalnych procesach powstawania standardów w W3C, więc tutaj przy okazji zapytam... Ktoś może mi powiedzieć, czy można liczyć na jakąś nową wersję CSSa z uzupełnioną funkcjonalnością, której brak powszechnie daje się we znaki?

  11. Papa-Razzi 11 10 sierpnia 2006, 15:11

    Ridel, czy mamy rok 1995 i wszyscy jadą na modemach o przepustowości 9600 kbps? Kto teraz nie ładuje obrazków? Kto czeka na obrazki minutami? Przesadzasz, czepiasz się człowieku, może przez to, że Rafi pojechał z tobą ostatnio u siebie na blogu, jak z taboretami.

  12. Jesteś typowym człowiekiem o zamkniętym umyśle, ewentualnie mogę to określić jako brak empatii czy zrozumienia. I nie jest to przytyk, tylko wytłumaczenie czemu nie będę się z Tobą sprzeczał. Podlinkowanie Rafiego miało miejsce tylko dlatego, że ma ładnego bloga, nie chciałem robić skrinszota jakiegoś Kubricka. EoT.

  13. Papa-Razzi - a o urzadzeniach mobilnych slyszales? internet przez komorke?

  14. Riddle, świetny tekst :) jestem pod wrażeniem Twojej znajomości css :) Na moim blogu występuje dokładnie ten problem co opisałeś - mam w body gradientowe tło i zanim wszystko się nie załaduje tło kontenera się nie rozciąga. Zmieniłem w klasie footera 'clear: both' na 'overflow: hidden'. No i tu się pojawiły problemy. W Operze stopka wyświetla się uniesiona w górę o jakieś 20px przez co zachodzi na treść ostatniego wpisu. Z kolei pod firefoxem layout się rozjeżdża zupełnie... Co robię źle?

    Dzięki za pomoc :)

  15. Nie ustawiaj overflow dla footera tylko kontenera w którym masz content i sidebar i na który aplikujesz tło.

  16. Dzięki za błyskawiczną pomoc :) teraz co prawda się nie rozsypuje, ale z jakiś nieznanych mi powodów górny border footera jest widocznyzaraz ponad główną kolumną z treścią (tak jakby stał się jej górnym borderem). Czytam Twojego bloga i dochodzę do wniosku, że muszę od zera napisać arkusz styli, żeby to się wszystko lepiej kupy trzymało :)

    Dzięki za pomoc :)

  17. Ale nie rezygnuj z clear: both dla niego, to co opisałem w tekście tyczy się tylko tła… footer wjedzie „pod” floatowane kolumny, bo wybiłeś je z document flow. ;-)

    PS: Odpowiadam szybko bo mam bota który mnie o komentarzach na Jabberze powiadamia. ;-)

  18. Póki co zostawie tak jak jest :) Podoba mi się Twój blog - mnóstwo wartościowych uwag zebranych w jednym miejscu :) właśnie sobie ustawiłem :focus dla pola tekstowego komentarza :) będę tu regularnie wpadał :)

  19. Dzięki, miłego czytania. ;-)

  20. Ciekawa sprawa.. =) na (nie)szczescie klienci nie patrzą na to jak sie strona laduje ale na to czy po zaladowaniu wszystko dobrze wyglada pod wazniejszymi przegladarkami. Jeszcze troche poczekamy na wymagajacych klientow =].

    Pozdrawiam und keep up teh good work bijacz
    >:=8)

  21. @Riddle pominąłeś pewne miłe rozwiązanie w postaci

    kontener:after { display: block; content: ""; clear: both; }

    sprawdzałeś może, czy ono także sprawia kłopoty?

  22. - 'czepianie sie' mode on -
    a wiesz, ze jak twoja strona sie laduje to trawka jest przycieta? buuu, poskarze sie w3c ;(
    - 'czepianie sie' mode off -