float i clear

Archived under Browsers, Webstandards on August 16th, 2004 with no comments

Niedawno kumpel z roku napisał, że Firefox wyświetla mu stronę inaczej niż IE i Opera. Konkretnie: warstwa zawierająca główną część strony chowała się za menu.

W kodzie były dwie główne warstwy:

<div id="menu"></div>
<div id="content"></div>

Dodatkowo menu miało zdefiniowaną regułę CSS:

#menu {
   float: left;
}

Okazało się, że warstwa z treścią (#content) rozszerza się w Firefoksie i Mozilli tak, że obejmuje też menu, a tekst umieszcza zaraz za nim. W przybliżeniu wyglądało to tak:

float w Gecko
float w Gecko

Opera i IE pokazywały treść zgodnie z jego oczekiwaniami, czyli poniżej menu:

float w Operze i IE
float w Operze i IE

W 99.9% przypadków w wypadku różnic w interpretacji CSS przez IE i FF, rację ma ten ostatni. Ale ponieważ tym razem Opera 7.5 zachowała się jak przeglądarka Microsoftu, można było nabrać wątpliwości. Zapytałem wyroczni. Aby określić pozycjonowanie bloków znajdujących się za elementami z własnością float, trzeba skorzystać z reguły clear. Ponieważ #content nie miał przypisanej takiej reguły, przeglądarki przyjmowały wartość domyślną, czyli none. Jak należy wyświetlić warstwę z taką regułą? Wyrocznia mówi:

No constraint on the box’s position with respect to floats.

Mówiąc po ludzku, każdy program może dowolnie rozmieszczać warstwy bez własności clear, co widać na załączonych obrazkach. Pawłowi należą się więc gratulacje za znalezienie luki w specyfikacji.

Moim skromnym zdaniem interpretacja Opery i IE jest bardziej naturalna. Dzięki temu można swobodnie korzystać z float, bez obawy że następne warstwy zostaną rozmieszczone i rozciągnięte w jakiś nieprzewidywalny sposób. Nie znam Mozilli na tyle, żeby wiedzieć czym sugerowali się jej programiści wybierając inne rozwiązanie (chociaż pewnie mieli jakiś powód).

Na koniec rozwiązanie działające we wszystkim:

#content {
    clear: left;
}

W Operze i IE nie zmieni to niczego, a w przeglądarkach opartych na silniku Gecko, zachowanie wróci do normy.

Zeldman napisał ostatnio, że niektórzy entuzjaści standardów dyskutują o bzdurach i detalach nie mających wiele wspólnego z praktycznym zastosowaniem tych standardów. Zajmują się drobiazgami, podczas gdy mało uwagi poświęca się projektowaniu, dostępności czy treści. Ponieważ zgadzam się z nim całkowicie i czuję się jak skończony hipokryta pisząc ten wykład dla maniaków (takich jak ja), pozwolę sobie już zakończyć.

Comments are closed