Dodaj do ulubionych

Problem z "Position: fixed" w Internet Explorer

07.05.07, 23:46
Tworzę właśnie stronę o tematyce weksylologicznej. Chciałbym, żeby layout
wyglądał mniej więcej tak, jak poniżej, no może kolory będą nieco inne (może
kilka skórek), ale tym się zajmę później:

toya.net.pl/~marek_ju/niemcy.html

Ale tu pojawił się pewien problem. Chciałbym, żeby w jednej z kolumn (miała to
być kolumna prawa) znalazły się "kotwice" (anchors) do poszczególnych części
długich przecież artykułów. Ale co mi po kotwicy, jeśli przewinę stronę w dół
i linki znikną z ekranu? W takim razie dobrze by było, gdyby kolumna z
kotwicami podczas przewijania strony w dół pozostawała w tym samym miejscu. W
Firefoksie nie ma problemu, ale niestety ponad połowa internautów korzysta z
pseudoprzeglądarki Internet Explorer, a ta niewłaściwie interpretuje
"position: fixed". Długo szukałem, wreszcie znalazłem jakiś sposób na
rozwiązanie tego problemu. No właśnie - jakiś. Link podam poniżej, ale
najpierw wyjaśnię co to za sposób i na jakie napotkałem problemy (dodam że nie
znam się na języku javascript, więc sam nic nie stworzę):


* html #rightnavigation { height: 100px; position: absolute; top:
expression(parseInt((document.body.scrollTop||documentElement.scrollTop))+'px') }



Niby rzeczywiście, kolumna zatrzymuje się w tym samym miejscu na ekranie, ale
jakby "miga" podczas przesuwania. Na stronie, na której to znalazłem, podane
jest rozwiązanie tego problemu, autor tejże strony używa określenia
"sluggishness":

www.gunlaug.no/contents/wd_additions_15.html

A rozwiązaniem jest nieruchome tło obrazkowe dla strony. To mi się spodobało,
ale napokrałem kolejne problemy. Całość wygląda mniej więcej tak (na pewno
ktoś z Was ma IE, więc zobaczy, jak to wygląda):

toya.net.pl/~marek_ju/test.html

No ale niestety:

1) W Firefoksie kolumna znajduje się cały czas zaraz poniżej nagłówka (czyli
tak, jak być powinno), w IE - przy górnej krawędzi, a więc "wchodzi" na nagłówek.

2) Ku mojemu zaskoczeniu, również Opera 9.10 nie wyświetla strony poprawnie -
prawa kolumna jest po lewej stronie, nachodzi na lewą kolumnę.

3) Kolumna środkowa będzie miała zmienną szerokość, zmienną w pewnym
przedziale (szerokość ekranu od 800 do 1024 pikseli, na razie mniej, żebym w
rozdzielczości 1024x768 widział tło). Czyli prawa kolumna nie może mieć stałej
odległości od lewej krawędzi strony (tylko od górnej, a od lewej już nie).

2. i 3. problem mógłbym rozwiązać, gdyby (chociaż trochę to może skomplikować
nawigację) to lewa kolumna była nieruchoma i zawierała kotwice, a większość
linków umieściłbym na prawej.

Sporo czasu spędziłem na szukaniu rozwiązania problemu na 1, a więc zupełnie
nowego skryptu.

meddle.dzygn.com/tests/fixed_ie/

No i tu jest niby lepiej, bo jest javascript, który pozwala dodać jakąś tam
ilość pikseli odległości od górnej krawędzi, ale nie jest tak do końca dobrze:

toya.net.pl/~marek_ju/test-f.html

1) Znów pojawia się "sluggishness", ale tym razem podłożenie nierichomego tła
obrazkowego nic nie daje

2) Znów ten sam problem w Operze, ale i tak chyba lewą kolumnę będę musiał
"unieruchomić", a nie prawą

3) W Internet Explorerze (testuję wersją 6, a WebSite Pro ma podgląd w IE5 - i
chwała mu za to) prawa kolumna rzeczywiście daje się ustawić na określonej w
skrypcie wysokości, ale nie od razu po wczytaniu strony. Trzeba wpierw ją
przewinąć nieco w dół i dopiero wtedy "wskakuje" na swoje miejsce.

Doradźcie proszę co zrobić. Czy gdybym coś poprawił, strona wyjdzie tak,
jakbym tego chciał? Czy warto męczyć się dalej, szukając kolejnych skryptów? A
może w ogóle dać sobie spokój z "kotwicami"? Artykuły, jakie na stronie się
znajdą, mogą być naprawdę długie, po kilka części, ale może tego rodzaju
ułatwienie nie jest warte aż takiego wysiłku i straty aż takiej ilości czasu?
Obserwuj wątek
    • tommy_from_cracow Re: Problem z "Position: fixed" w Internet Explor 08.05.07, 10:56
      Hej,
      Wybacz bo odpowiedz nie bedzie zbyt precyzyjna.

      Jesli chodzi o "miganie", to a) albo szukaj skryptu JS, ktory bedzie plynniej to obslugiwal, albo zostaw jak jest. Kalkulacja pixeli pozostawia wiele do zyczenia i niestety tez mocno rozni sie w tych "slusznych" przegladarkach. Teraz jesli chodzi o Opere. Position fixed wedlug mnie wymaga okreslenia parametrow podobnie jak absolute. tzn wzgledem elementu nadrzednego ktory sam ma zdefiniowana pozycje. Nie jestem pewien ale chyba tak wlasnie jest w specyfikacji CSS. W takim przypadku, podgladajac Twoj CSS widac ze podajesz dla prawej kolumny tylko odstep od gory i wysokosc, pomijajac marginesy boczne. Jesli srodkowa kolumna sie skaluje probuj tez na tej z\asadzie (wartosci procentowe) doskalowac prawa i zdefiniowac brakujace marginesy. Tak jak pisalem nie jestem pewien czy mam racje ale nie wydaje mi sie zeby to byl bug Opery.

      Opera&Safari-4-ever

      Pozdrawiam!
      • markus.kembi Re: Problem z "Position: fixed" w Internet Explor 08.05.07, 13:09
        Dzięki za odpowiedź, ale niestety, okazuje się, że problem jest dokładnie taki,
        jak myślałem.
        ___________________________________________________________________

        tommy_from_cracow napisał:

        > (...) Position fixed wedlug mnie wymaga okreslenia parametrow podo
        > bnie jak absolute. tzn wzgledem elementu nadrzednego ktory sam ma zdefiniowana
        > pozycje. Nie jestem pewien ale chyba tak wlasnie jest w specyfikacji CSS.
        > W takim przypadku, podgladajac Twoj CSS widac ze podajesz dla prawej kolumny
        > tylko odstep od gory i wysokosc, pomijajac marginesy boczne.

        A no właśnie, i tu jest, jak to się mówi, pies pogrzebany - jeśli wpiszę:

        #rightnavigation {background-color: #e0d3ef;
        position:fixed; top:70px;}

        To Firefox interpretuje podane wielkości jako: "odległość od górnej krawędzi
        strony = 70px, położenie w poziomie = wewnątrz elementu nadrzędnego
        'container'", a więc według Firefoksa prawa kolumna ma przylegać lewą krawędzią
        do kolumny środkowej.

        Opera to samo interpretuje tak: "odległość: 70 pikseli od górnej krawędzi
        strony, 0px od lewej krawędzi strony" a więc prawa kolumna w Operze jest w tym
        wypadku "przyklejona" lewą krawędzią do lewej krawędzi strony. A więc to nie
        bug, tylko "roznieżność interpretacji".

        Teraz jeśli do "top:70px;" dodam "right:1px;", to Firefox zrozumie to tak:
        "odległość od lewej krawędzi strony = 1px". I prawa kolumna znajdzie się przy
        prawej krawędzi, a pomiędzy nią, a kolumną środkową zrobi się "dziura". Tyle że
        akurat Internet Explorer bierze pod uwagę nie krawędź strony, a krawędź elementu
        obejmującego (prawa strona "container"), czyli akurat w IE "dziury" nie będzie,
        ale marna to pociecha. Oczywiście mogę się tym nie przejmować jeśli to lewą
        kolumną "przykleję", ale wtedy też nie będzie idealnie dobrze. Ale może dałoby
        się coś zrobić, dopisać, żeby javascript reagował na podłożenie nieruchomego tła?
        ______________________________________________________________


        Wspomniałem też wcześniej, że chciałbym, aby prawa i lewa kolumna miały stałą
        szerokość, a środkowa - zmienną, ale tylko w pewnym przedziale. Nie mogę więc
        podać wartości względnych. Na razie szerokość jest taka:

        toya.net.pl/~marek_ju/niemcy.html


        #container { width: auto;
        min-width: 770px;
        max-width: 980px;
        }

        I do tego warunkowy komentarz dla IE, dzięki któremu wszystko działa bez
        zarzutu. Po co to wszystko? Zgodnie ze statystykami stat4u, na pierwszej stronie
        mojego autorstwa (link w sygnaturce) internauci z rozdzielczością ekranu 800x600
        stanowią tylko 6% wszystkich odwiedzających, ale podejrzewam, że w ogóle takich
        osób może być więcej, zresztą właścicielka strony jest jedną z nich. A
        uciążliwość paska do przewijania w poziomie jest znacznie większa, niż w
        przypadku, gdy rozdzielczość jest za duża. Najlepiej dostosować stronę do
        najpopularniejszej rozdziejczości 1024x768, ale w 800x600 zamiast przewijania,
        lepiej żeby tekst był trochę bardziej "ściśnięty", dopiero przy mniejszej
        szerokości ekranu pojawi się pasek. Mam w Firefoksie takie fajne narzędzie do
        skalowania okna, jest naprawdę pomocne.
        ________________________________________________________________

        Uff, tworzenie strony to naprawdę ciężka sprawa, wyrazy podziwu dla osób, które
        zajmują się tym zawodowo - to musi być naprawdę ciężki kawałek chleba.
        • tommy_from_cracow Re: Problem z "Position: fixed" w Internet Explor 08.05.07, 14:35
          No ktoras interpretacja musi byc bugiem...

          Sprobuj jeszcze ustawic wlasciwosc position dla content i zobacz jak opera i ff zareaguja.

          Pozdrawiam!
          • tommy_from_cracow Re: Problem z "Position: fixed" w Internet Explor 08.05.07, 14:42
            Hmm, to jednak bug Firefoxa, Opera interpretuje position fixed wedlug specyfikacji CSS, w Twoim przypadku niestety prawidlowo=niewygodnie...

            Wiec obejscie pozostaje skryptami albo poprostu zmienisz layout i poustawiasz wartosciami procentowymi.

            Pozdrawiam!
            • markus.kembi Re: Problem z "Position: fixed" w Internet Explor 08.05.07, 16:23
              Dzięki za przyjrzenie się temu problemowi.

              Zrobiłem tak, jak zapowiadałem wcześniej, czyli nieruchoma lewa kolumna. Może w
              ogóle zrobię tak, żeby boczne kolumny różniły się wyglądem, może prawa będzie
              miała przezroczyste tło, albo obie kolumny-menu będą obok siebie - zobaczę
              później. Na razie jest tak, jak to wygląda pod linkiem, który podałem jako
              pierwszy, czyli /niemcy.html - oczywiście to jest zupełnie inny layout, więc
              efekt widać tylko w Internet Explorerze.

              Wygląd dla różnych przeglądarek można zobaczyć tu:

              toya.net.pl/~marek_ju/test-l.html

              I jest całkiem nieźle. Zastosowałem hack z "!important" i dzięki temu udało mi
              się ominąć explorerowego buga. W Operze wszystko OK, masz rację, że pod względem
              technicznym to najlepsza przeglądarka. Firefox "przesunął" kolumnę o kilka
              pikseli za bardzo w lewo, ale to też nic wielkiego.
              • markus.kembi Re: Problem z "Position: fixed" w Internet Explor 08.05.07, 16:56
                A jednak się myliłem. Ten skrypt mógłbym zastosować, ale tylko w starym layoucie
                (/niemcy.html), który będę musiał zmienić na podpatrzony na stronie Fox Software
                boxmodel. Stary model strony uniemożliwiał mi przedstawienie linków w bocznych
                kolumnach jako elementy blokowe, bo wszystko się zaczynało sypać i rozwalać.
                Nowy (/test-l.html) jest lepszy, ale "position:fixed" spowoduje, że odległość od
                lewej krawędzi będzie stała, a wiec przy większej rozdzielczości (np. 1280x960)
                z lewej strony zrobi się więcej wolnego miejsca i lewa koluna "wylezie" na
                zewnątrz. No nie wiem, już mam tego dosyć.
                • infonet.waw.pl Re: Problem z "Position: fixed" w Internet Explor 09.05.07, 19:07
                  Wejdź na stronkę którą robiłem morskierejsy.pl - Zastosowałem tu skrypt
                  ktory jest przerobka tego
                  www.dynamicdrive.com/dynamicindex1/staticmenu.htm. Dziala identyko w
                  kazdej przegladarce
                  • markus.kembi Re: Problem z "Position: fixed" w Internet Explor 09.05.07, 21:48
                    Fajne menu. To też jest jakieś rozwiązanie, ale nie wiem jak się zachowuje gdy
                    nie jest przyklejone do krawędzi strony. Będę musiał przetestować. Ale chyba
                    znalazłem sposób na nieuchomą kolumnę - pierwszy ze skryptów, o których pisałem
                    (ten, który nie "miga" w IE, pod warunkiem, że strona ma nieruchome, obrazkowe
                    tło), tyle że w stylu dla lewej kolumny wpisałem:

                    position: fixed; left: auto !important; left: 0; top: 70px;

                    Bo IE bierze pod uwagę lewą krawędź elementu obejmującego (czyli zero pikseli),
                    a Opera - lewą krawędź strony, ale jak da się "auto", to wskoczy tam gdzie
                    trzeba (float: left).

                    W tym próbnym layoucie działa prawidłowo, w Operze też, ale pod warunkiem, że
                    nieruchoma jest lewa kolumna, z prawą nie za bardzo, nie wiem dlaczego, ale to
                    chyba znowu to, o czym Tommy pisał: "prawidłowo=niewygodnie".

Nie masz jeszcze konta? Zarejestruj się


Nakarm Pajacyka