hasLayout
Silnik Internet Explorera stara się przedstawić niektóre elementy jako prostokąty i tym sposobem ułatwić sobie ich pozycjonowanie i renderowanie. Elementom, które uważa za nadające się do
uproszczonej obsługi nadaje właściwość hasLayout
(możliwa do sprawdzenia z poziomu JavaScript).
Należy pamiętać, że cecha ta naprawia błędy, ale niekiedy może ich przysparzać.
- elementy z
hasLayout
mają tendencję do „obcinania” wszystkich elementów wystających poza ich granice (pozycjonowanych absolutnie albo z ujemnym marginesem) -
float
jest bardziej przewidywalnie, ale mniej zgodne ze specyfikacją (np. element zfloat
nie może wystawać poza element zhasLayout
) - błędnie działa zapadanie marginesów
- obramowanie elementu wychodzi poza jego tło
Wymuszanie hasLayout
Elementy zyskują „layout”, jeśli:
- nada im się wymiary lub
- nada się właściwość
zoom:1
(zoom
jest eksperymentalnym, słabo zaimplementowanym rozszerzeniem IE) lub - ustawi
position:relative
albooverflow: hidden;
(nie działa w każdym przypadku)
Elementy <table>
, <object>
i kilka innych zawsze mają „layout”.
Ciekawostka
Ten sposób traktowania elementów w IE ma bardzo wiele skutków ubocznych. Niektóre są wręcz dziwaczne. On having layout
pokazuje przykład, w którym hasLayout
potrafi nawet zepsuć licznik listy:
<ol>
<li>
raz</li>
<li>
dwa</li>
<li style="width: 50%">
trzy</li>
<li>
cztery</li>
</ol>
Daje w Explorerze:
1. raz 2. dwa 1. trzy 4. cztery
Zmodyfikowano: 17.02.2007, 05:33