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.

Dziwactwa IE - Listy

12 grudnia 2005

Pionowe przerwy

Najbardziej znany problem - w moim menu pod Internet Explorerem zostają dodane paskudne przerwy. Dlaczego tak się dzieje?

Wszystko przez to, że umieszczamy w nim elementy blokowe. Mogą być to elementy, których blokowość określa DTD, bądź którym zmieniamy kontur przez CSS.

Z tego powodu, wszelkie spacje i tabulatory występujące pomiędzy elementami listy (li) są traktowane zupełnie inaczej niż powinny. Dodana jest przerwa.

Wyjść jest parę:

  1. Zrezygnować z elementów blokowych.
  2. Usunąć białe znaki z listy.
  3. Zmienić zachowanie listy.

Pierwsze rozwiązanie jest podane tylko dla formalności - wiadomo, że jeśli chcemy linki w postaci blokowej, to nie będziemy się ich pozbywać i zmieniać koncepcji.

Usunąć białe znaki możemy w sposób zwyczajny i bardziej elegancki. Pierwszy to po prostu usunęcie wszystkiego pomiędzy </li> a <li>, tworząc jedną długą linijkę kodu. Polecałbym jednak zmianę toku myślenia. Przecież wystarczy zawrzeć wszystkie białe znaki w znaczniku HTML i go tam tak naprawdę nie będzie. A kod poprawny i działający.

No i wreszcie trzecie rozwiązanie. Najlepsze, bo odwołujące się do magicznej własności hasLayout Internet Explorer'a. Czym hasLayout jest, a czym nie, mam zamiar opisać za jakiś czas - na chwilę obecną powinno nam wystarczyć, że elementy które „nie mają layoutu” są bardzo często psute przez przestrzały silnik renderujący Explorer'a.

Aby zmusić listę do przyjęcia layoutu, należy ustawić elementom z zachowaniem blokowym szerokość bądź wysokość. O ile pierwszy sposób może być niedostępny dla kodera, to drugi jest bardzo ciekawy i prosty. Ustawmy height na 1% i przekonajmy się, że odstępy znikają. :)

Znikające markery

Gdy ustawimy szerokość bądź wysokość dla listy (<ol/>, <ul/>), markery pozycji znikają, bądź są umiejscowione w zły sposób. Jak mocno się zastanowić, to widzimy że kolejny problem wyświetlania jest związany z hasLayout. Bo przecież, jak już wspominałem nadajemy layout elementowi, gdy ustawimy jego wymiary.

Wyściem z tej dziwacznej sytuacji jest w większości przypadków dodanie marginesu dla elementów listy.

Numerowane listy i licznik

Uporaliśmy się z jednym problemem, zmierzamy ku następnemu. Gdy przytrafia nam się taka sytuacja, kiedy to jeden z elementów listy nagle zaczyna używać jakby nowego licznika, można wyrywać sobie włosy z głowy garściami. Ale my już się domyślamy, że znowu chodzi o posiadanie layoutu przez element. W tym przypadku jeden z elementów listy dostał określoną wysokość.

Co więcej - gdy będziemy potrzebowali umieścić więcej niż jedną linijkę tekstu w takiej pozycji listy, to marker pojawi się na dole, a nie na górze. Wyjściem z tych sytuacji jest przedefiniowanie tego co chcemy osiągnąć i podejście od drugiej strony. Zawsze znajdzie się wyjście, a nie ma nic gorszego jak dodawanie kolejnych kawałków kodu, żeby uporać się z poprzednimi błędami.

Oczywiście są także inne możliwości zmiany hasLayout na true i wynikające z tego komplikacje i ułatwienia oraz błędy pisania layoutów dla IE, ale jak wspominałem nie będę teraz się w nie wgłębiał. Zrobię to przy innej okazji, mam nadzieję, że dość bliskiej. Wierzę jednak, że coś zaczyna nam już świtać odnośnie problemów z Internet Explorerem i wyświetlaniem nowoczesnych układów stron. ;-)

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 12 grudnia 2005 o 18:32

Kategorie: CSS, HTML & Semantyka, Internet Explorer

Dodaj do:

Wpisy archiwalne

Archiwum miesięczne

  1. Dzięki wielkie, już myślałem, że wina leży po winie mojego kodu i zamierzałem się poddać i nie zważać na użytkowników IE :) Takich problemów się nie spodziewałem…

  2. (Komentarz zmodyfikowany 27.02.2007 o 00:38)

    Witam.
    Mam pytanie jak usunąc niechciany Link z wyszukiwarki Internet Eksplorer.
    Proszę o odpowiedz.
    Z góry dziekuję

  3. Droga Karolino,

    Internet Explorer nie jest wyszukiwarką, ale przeglądarką, podobnie jak Mozilla Firefox, Opera, Safari i Conqueror.

    PS. o jaki link chodzi i na jakiej stronie.
    LInki wstawiają autorzy stron i nie da się ich usuwać.

  4. Tego szukałem, dzięki Riddle :)

  5. Bardzo dobrze ze takie strony instnieja:)

  6. To jest genialne! Wreszcie zamieszcze odjechane menu w projekcie ;))

  7. najs! 1% pomogło :-) dzieki