Nie tylko o przeglądarkach...

Zagadka: Co wyczynia Firefox?

Proszę zajrzeć na stronę Opera PL i powiedzieć mi, co też najlepszego usiłuje wykonać przeglądarka Firefox z menu na tej stronie? No i co to za dziwny biały plac znajduje się na samym dole strony?

MSIE 6/7, Opera 8/9, Konqueror 3.5, Safari 2 nie odnotowują podobnych problemów.

Opera 9.0 build 8455Consolas do pobrania

Comments

Paweł Szubertpbm Monday, June 5, 2006 8:48:38 AM

U mnie menu troszke rozjechane ale bialej plamy brak..
Firefox 1.5.0.3

Robert Błautquiris Monday, June 5, 2006 9:41:00 AM

U mnie menu troszke rozjechane ale bialej plamy brak.

Sprawdzałem przeglądarkę Camino i tam białej plamy nie ma. Natomiast rozjechane menu jest.

Marek Stępieńmarcoos Monday, June 5, 2006 10:01:20 AM

Biała plama to skutek height: 100% i rozwalonego menu (najedź myszą na część białej plamy pod menu).

Nie mam natomiast czasu dochodzić, co skaszaniliście w samym menu. ;-)

Robert Błautquiris Monday, June 5, 2006 10:13:31 AM

Nie mam natomiast czasu dochodzić, co skaszaniliście w samym menu. ;-)

A może coś zostało skaszanione w samym Firefoksie? Nie dopuszczasz takiej możliwości? wink

Maciej Chojnacki Monday, June 5, 2006 10:51:37 AM

Może jestem jakiś dziwny, ale pod moim FF ta strona wygląda dokładnie tak samo, jak pod Operą. Żadnych błędów.

Robert Błautquiris Monday, June 5, 2006 10:56:03 AM

Może jestem jakiś dziwny, ale pod moim FF ta strona wygląda dokładnie tak samo, jak pod Operą.

Poproszę o podanie wersji systemu, wersji przeglądarki, no i zrzut ekranu przedałby się wink

Adrian KallaAdrianer Monday, June 5, 2006 12:10:45 PM

SeaMonkey 1.0.1 (Gecko 1.8.0.2) - strona wygląda jak na screenshocie...

Adrian KallaAdrianer Monday, June 5, 2006 12:12:22 PM

Bon Echo 2.0a3 to samo...

Teraz pytanie jaka przeglądarka zachowuje się tu poprawnie w stosunku do kodu strony...

Robert Błautquiris Monday, June 5, 2006 12:24:46 PM

Teraz pytanie jaka przeglądarka zachowuje się tu poprawnie w stosunku do kodu strony...

Uhm. Bardzo dobre pytanie.

Andrzej Kaczmarekandk Monday, June 5, 2006 1:21:10 PM

Na tyle na ile ja rozumiem specyfikację CSS2:

list-style-position: inside; powoduje wygenerowanie wewnątrz elementu listy elementu inline dla markera.
http://www.w3.org/TR/CSS2/generate.html#propdef-list-style-position

Jeżeli teraz A będzie display: block; to ten element inline (marker) zostanie zamknięty w element blokowy zgodnie z http://www.w3.org/TR/CSS2/visuren.html#anonymous-block-level

Czyli Fx wyświetla to poprawnie. Przy czym jest to moja - niekoniecznie poprawna - interpretacja tego smile

zbraniecki Monday, June 5, 2006 1:30:23 PM

quiris:
"Nie dopuszczasz takiej możliwości? "

Dziwne pytanie z ust kogos, kto przed chwila napisal caly post nie dopuszczajac mozliwosci, ze to nie jest wina Fx-a. "Co wyczynia Firefox?" - to jest neutralne zdanie swiadczace o tym, ze dopuszczasz mozliwosc, ze zle dziala tu Opera? Heh... To jak tam z ta drzazga w oku?

Pierwsze przypuszczenia (jak ja uwielbiam WebDeveloper extension - czas jaki zajelo znalezienie tego, ponizej minuty):

ul#menu li {list-style-position:inside;}
ul#menu a, ul#navmenu a { display: block; }

Nie pokusze sie jeszcze o wniosek czyja to wina, ale ustawienie tych dwoch wartosci powoduje, ze blokowy anchor przeskakuje do nowego wiersza jesli element listy jest wewnatrz jej pol.

"MSIE 6/7, Opera 8/9, Konqueror 3.5, Safari 2 nie odnotowują podobnych problemów. "

Na bugzilli mamy mnostwo bledow tego typu w ktorych na koncu okazywalo sie, ze to wyzej wymienione zgodnie popelniaja ten sam blad. Chocby dlatego, ze zarowno panowie z Opery jak i z KHTML-a podczas swoich prac (i mozesz to sprawdzic w bugzilli KDE) wybierali zachowanie zgodne z IE, a nie ze specyfikacja...

Robert Błautquiris Monday, June 5, 2006 1:38:53 PM

"Co wyczynia Firefox?" - to jest neutralne zdanie swiadczace o tym, ze dopuszczasz mozliwosc, ze zle dziala tu Opera? Heh... To jak tam z ta drzazga w oku?

Akurat tak się złożyło, że we wszystkich testowanych przeglądarkach, tylko w Gecko jest inaczej, więc to mnie uprawniło do zatytułowania postu tak, jak właśnie jest zatytułowany.

Pierwsze przypuszczenia (jak ja uwielbiam WebDeveloper extension - czas jaki zajelo znalezienie tego, ponizej minuty):
ul#menu li {list-style-position:inside;}
ul#menu a, ul#navmenu a { display: block; }


No ciepło, ciepło. Jesteś o krok od rozwiązania zagadki. Przyczynę znalazłeś bezbłędnie smile

Nie pokusze sie jeszcze o wniosek czyja to wina, ale ustawienie tych dwoch wartosci powoduje, ze blokowy anchor przeskakuje do nowego wiersza jesli element listy jest wewnatrz jej pol.

No szkoda, że nie pokusisz się. Mógłbyś zdobyć laur zwycięzcy wink

Na bugzilli mamy mnostwo bledow tego typu w ktorych na koncu okazywalo sie, ze to wyzej wymienione zgodnie popelniaja ten sam blad. Chocby dlatego, ze zarowno panowie z Opery jak i z KHTML-a podczas swoich prac (i mozesz to sprawdzic w bugzilli KDE) wybierali zachowanie zgodne z IE, a nie ze specyfikacja...


Na tej samej bugzilli jest więcej błędów, które wskazują na odwrotne zachowanie. Wbrew pozorom, czy też przeróżnym sugestiom, jakie miałem nieprzyjemność ostatnio słyszeć developerzy Gecko nie mają monopolu na prawdę. I dobrze.

Robert Błautquiris Monday, June 5, 2006 1:44:28 PM

Na tyle na ile ja rozumiem specyfikację CSS2:

list-style-position: inside; powoduje wygenerowanie wewnątrz elementu listy elementu inline dla markera.
http://www.w3.org/TR/CSS2/generate.html#propdef-list-style-position

Jeżeli teraz A będzie display: block; to ten element inline (marker) zostanie zamknięty w element blokowy zgodnie z http://www.w3.org/TR/CSS2/visuren.html#anonymous-block-level

Czyli Fx wyświetla to poprawnie. Przy czym jest to moja - niekoniecznie poprawna - interpretacja tego

Bardzo dobre odwołanie do specyfikacji smile Choć wnioski ostateczne nie są do końca poprawne.

Marcin W. Dąbrowskimwd Monday, June 5, 2006 3:05:44 PM

Hmm... Czemu błędne wnioski? Mamy elementy: (li], [{marker}], [a]. Układ jest: (li][{marker}/][a][/a](/li]

- (li][/li] jest "display: block"
- [a][/a] jest "display: block"

Wobec tego [{marker}] będzie zawinięty w anonimowy element z "display: block".

In other words: if a block box has another block box inside it, then we force it to have only block boxes inside it, by wrapping any inline boxes in an anonymous block box.

Czyli końcowy układ powinien być:

(li]
[anonymous style="display: block;"][{marker}/][/anonymous]
(a][/a]
(/li]

Czy jednak inaczej?...

Robert Błautquiris Monday, June 5, 2006 3:27:28 PM

Czy jednak inaczej?...

A co powiesz na:

Most block-level elements in CSS generate one principal block box. In this section, we discuss two CSS mechanisms that cause an element to generate two boxes: one principal block box (for the element's content) and one separate marker box (for decoration such as a bullet, image, or number). The marker box may be positioned inside or outside the principal box. Unlike :before and :after content, the marker box does not affect the position of the principal box, whatever the positioning scheme.


[ http://www.w3.org/TR/CSS2/generate.html#q11 ]

zbraniecki Tuesday, June 6, 2006 11:12:19 AM

> No szkoda, że nie pokusisz się. Mógłbyś zdobyć laur zwycięzcy

Jak bedzie mi sie nudzilo, powalcze o laury, na razie slepo zalozylem, ze pytasz, bo odpowiedzi nie znasz, zas nie przewidzialem, ze mozesz pytac aby zrobic show...

Ciesze sie, ze znalazles blok w dokumentacji, szkoda, ze nie dodales go do znalezionego bledu, ktory nadal oznaczony jest jako "niekoniecznie blad".

> Na tej samej bugzilli jest więcej błędów, które wskazują na odwrotne zachowanie.

To naprawde zaskakujace... Na Bugzilli Mozilli sa bledy jej dotyczace? Szok, warto o tym napisac kolejny post.

> Wbrew pozorom, czy też przeróżnym sugestiom, jakie miałem nieprzyjemność ostatnio słyszeć developerzy Gecko nie mają monopolu na prawdę.

Przeroznym sugestiom, ktorych oczywiscie nie wymienisz, oraz pozorom, ktorych nie podasz. Wszak wystarczy takie zdanie jakie napisales - brzmi dobrze, zarzutow udowadniac nie musisz.

Co do mnie zas - zalozylem, ze skoro pytasz o rozwiazanie, to go nie znasz. Skoro zas go nie znasz, to stawianie zarzutow jest co najmniej niewlasciwe. Patrzac jednak na Twoja reakcje wnioskuje, ze odpowiedz znales/znalazles, ale dla samej radosci publicznej dyskusji ciagniesz to dalej. Gratuluje.

Robert Błautquiris Tuesday, June 6, 2006 11:34:19 AM

Co do mnie zas - zalozylem, ze skoro pytasz o rozwiazanie, to go nie znasz. Skoro zas go nie znasz, to stawianie zarzutow jest co najmniej niewlasciwe. Patrzac jednak na Twoja reakcje wnioskuje, ze odpowiedz znales/znalazles, ale dla samej radosci publicznej dyskusji ciagniesz to dalej. Gratuluje.

Nie zamierzam wdawać się po raz kolejny w czczą pyskówkę. W chwili pisania postu odpowiedzi nie znałem. To, że napisałem post nie oznacza, że siedziałem z założonymi rękami. Sam szukałem rozwiązania. Znalazłem go wcześniej, jednak nic nie pisałem na ten temat, bo po prostu ciekaw byłem opinii. Zacytowany przeze mnie fragment specyfikacji, który bardzo dobrze wyjaśnia, że zachowanie Gecko jest błędne przesłał mi pablO. Jeśli on nie dopisze nowych informacji do tego błędu, to ja to uczynię przy najbliższej okazji.

W sumie dobrze, że pojawił się ten post. Jest idealną odpowiedzią do stwierdzenie jakie padło w jednym z komentarzy:

Opera ma swoje sposoby, „lepsze i dokładniejsze” rozumowanie niektórych standardów i to się odbija na stronach.


Jak to się mówi? Przyganiał kocioł...? I jeszcze raz powtórzę: punkt widzenia zależy od punktu siedzenia.

Marcin W. Dąbrowskimwd Tuesday, June 6, 2006 11:58:09 AM

Most block-level elements in CSS generate one principal block box. In this section, we discuss two CSS mechanisms that cause an element to generate two boxes: one principal block box (for the element's content) and one separate marker box (for decoration such as a bullet, image, or number). The marker box may be positioned inside or outside the principal box. Unlike :before and :after content, the marker box does not affect the position of the principal box, whatever the positioning scheme.


The principal block box establishes the containing block for descendant boxes and generated content and is also the box involved in any positioning scheme.


Czyli w ukłdzie (li)(marker)(/marker) content (/li) marker nie ma wpyłwu na pozycjonowanie (li), a na content raczej na pewno nie.

Ale gdy mamy element blokowy jako treść tego (li), to:
- pozycjonowanie (li) się nie zmieni - li jest jako principal box,
- ale sam (marker) zgodnie z poprzednio wspomnianą regułą będzie jako "dislay: block" (...wrapping any inline boxes in an anonymous block box...),
- czyli chyba jednak gecko to renderuje poprawnie...

Oczywiście nadal mogę się mylić. :) Czytanie specyfikacji to jednak ciężka robota.

Radek Kabacińskiradek_kaba Tuesday, June 6, 2006 12:14:39 PM

A najciekawsze jest to, że w drafcie CSS2.1 punkt 12.6 jeszcze nie występuje, więc jak to będzie w przyszłości nie wiadomo...

Robert Błautquiris Tuesday, June 6, 2006 12:19:48 PM

Ale gdy mamy element blokowy jako treść tego (li), to:
- pozycjonowanie (li) się nie zmieni - li jest jako principal box,
- ale sam (marker) zgodnie z poprzednio wspomnianą regułą będzie jako "dislay: block" (...wrapping any inline boxes in an anonymous block box...),
- czyli chyba jednak gecko to renderuje poprawnie...


Ale w innym fragmencie specyfikacji znowu mamy:

inside - The marker box is the first inline box in the principal block box, after which the element's content flows.

Czyli zawartość elementu powinna opływać markera, a tego nie czyni. Mowa jest również bloku liniowym. [ http://www.w3.org/TR/CSS2/generate.html#propdef-list-style-position ]

Robert Błautquiris Tuesday, June 6, 2006 12:24:03 PM

A najciekawsze jest to, że w drafcie CSS2.1 punkt 12.6 jeszcze nie występuje, więc jak to będzie w przyszłości nie wiadomo...

W CSS 2.1 nie ma bo najpewniej ten punkt wyleciał z tej specyfikacji. Dlatego odnosząc się do CSS 2.1 musimy przede wszystkim analizować: http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position

inside
The marker box is the first inline box in the principal block box, after which the element's content flows. CSS 2.1 does not specify the precise location of the marker box.

A tu znowu mamy, że specyfikacja nie określa precyzyjnie położenia markera faint Co jest moim zdaniem totalnym pogłębieniem niejasności.

Marcin W. Dąbrowskimwd Tuesday, June 6, 2006 2:52:27 PM

Ale w innym fragmencie specyfikacji znowu mamy:

inside - The marker box is the first inline box in the principal block box, after which the element's content flows.

Czyli zawartość elementu powinna opływać markera, a tego nie czyni.



No i marker jest inline, ale skoro li jest block, i a jest block, to marker jest owijany w anonymous block. (Rrrany, ale język! :D)

Czyli drzewko jest:
1. li:block
1.1. anonymous:block
1.1.1. marker:inline
1.2. a:block

PS: Chyba zakończymy tak:

(outside) CSS1 did not specify the precise location of the marker box and for reasons of compatibility, CSS2 remains equally ambiguous.



Cóż... Nie ma to jak dokładna specyfikacja. :D

zbraniecki Tuesday, June 6, 2006 4:30:53 PM

> Nie zamierzam wdawać się po raz kolejny w czczą pyskówkę.

Uhh... Zatem jesli Ty z ironicznym usmieszkiem bawisz sie tym, ze ludzie poswiecaja Ci swoj czas, aby zlokalizowac zrodlo problemu, to jest ok. Kiedy stawiasz zarzuty zanim poznasz odpowiedz tez, ale kiedy ktos sugeruje, ze takie zachowanie jest niewlasciwe, to to jest "czcza pyskowka"... Pewnie jestem tez czescia ukladu, jak kazdy kto sie nie zgadza... naprawde, taki sposob komunikacji jest dzis chyba modny.

> To, że napisałem post nie oznacza, że siedziałem z założonymi rękami.

Jasne, ale zarzut postawiles wczesniej. A odpowiedz poznales zanim pare osob poswiecilo czas na jego rozwiazanie.

> W sumie dobrze, że pojawił się ten post.

Nie ma to jak samodzielnie siebie pochwalic za swoja wlasna decyzje. Umocniles mnie w przekonaniu, ze masz racje, skoro sam ze soba sie zgadzasz.

> I jeszcze raz powtórzę

A to ja spytam jeszcze raz: Czy bazujac na tym przykladzie uznajesz, ze jesli kiedykolwiek nie zrozumiesz zachowania Gecko, to jest OK nadac taki tytul, zanim pozna sie odpowiedz?
> Jak to się mówi? Przyganiał kocioł...?

Czy powyzszy cytat to ze mnie? Nie przypominam sobie takiej wypowiedzi...

zbraniecki Tuesday, June 6, 2006 4:33:29 PM

quiris: czy bazujac na tej analizie mozna rozumowac, ze zachowanie Gecko jest zgodne (albo, nie jest niezgodne) z CSS 2.1? (przyjmujac jednoczesnie, ze faktycznie jest niezgodne z CSS 2.0)

Robert Błautquiris Wednesday, June 7, 2006 10:46:50 AM

Czy powyzszy cytat to ze mnie? Nie przypominam sobie takiej wypowiedzi...

Nie. To nie ty to powiedziałeś.

quiris: czy bazujac na tej analizie mozna rozumowac, ze zachowanie Gecko jest zgodne (albo, nie jest niezgodne) z CSS 2.1? (przyjmujac jednoczesnie, ze faktycznie jest niezgodne z CSS 2.0)

W świetle tego co jest napisane w CSS 2.1 jednoznacznego rozstrzygnięcia wskazać nie można. A skoro nie można orzec, trzeba bazować na tym jak to rozwiązali inni i który rodzaj implementacji jest hmm... użyteczny. Znakomita większość (jeśli nie wszystkie) implementacji wyświetla marker inaczej niż Gecko. Dodatkowo sposób wyświetlania Gecko co tu dużo mówić psuje listy. Jakoś nie mogę wyobrazić sobie zastosowania praktycznego sposobu wyświetlania Gecko. Taka jest moja opinia. Mniej więcej podobny tok rozumowania przyjęli developerzy wymieniając uwagi na ten temat we wspomnianym błędzie.

Co tu dużo mówić, jedno jest pewne - zachowanie Gecko jest inne niż w pozostałych przeglądarkach, a potrzeba zachowania interoperacyjności w standardzie CSS 2.1 - to co próbuje uzyskać grupa robocza CSS wymaga, żeby było spójne.

Podobne zachownie. Opera do wersji 8.5 dla elementu body ustawiała domyślnie 8px dopełnienie, zamiast powszechnie ustawianego w innych przeglądarkach marginesu 8px. Podstawą takiego zachowania był zapis: http://www.w3.org/TR/CSS2/sample.html Oczywiście nie można było powiedzieć, że pozostałe przeglądarki nieprawidłowo działają w tym względzie, bo przytoczony artykuł jest informacyjny, a nie normatywny. Czyli znowu, na dwoje babka wróżyła. Ja jednak z ulgą i radością powitałem zmianę tego zachowania w Operze 9 właśnie w imię zachowania interoperacyjności z innymi przeglądarkami.

Maciek Korsanneochan Friday, June 23, 2006 6:13:49 AM

na
Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
wszystko działa elegancko, nic sie nie rozjezdza.

Robert Błautquiris Friday, June 23, 2006 6:35:45 AM

na Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4 wszystko działa elegancko, nic sie nie rozjezdza.

Neochan: Błędu już dawno nie ma na tej stronie. Zmieniłem po prostu style, tak żeby działało to sensownie w Fireofoksie. Poczytaj: http://my.opera.com/quiris/blog/show.dml/286303

Write a comment

You must be logged in to write a comment. If you're not a registered member, please sign up.