Zagadka: Co wyczynia Firefox?
Monday, 5. June 2006, 07:28:40
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.
MSIE 6/7, Opera 8/9, Konqueror 3.5, Safari 2 nie odnotowują podobnych problemów.

pbm # 5. June 2006, 08:48
Firefox 1.5.0.3
quiris # 5. June 2006, 09:41
marcoos # 5. June 2006, 10:01
Nie mam natomiast czasu dochodzić, co skaszaniliście w samym menu. ;-)
quiris # 5. June 2006, 10:13
Maciej Chojnacki # 5. June 2006, 10:51
quiris # 5. June 2006, 10:56
Adrianer # 5. June 2006, 12:10
Adrianer # 5. June 2006, 12:12
Teraz pytanie jaka przeglądarka zachowuje się tu poprawnie w stosunku do kodu strony...
quiris # 5. June 2006, 12:24
andk # 5. June 2006, 13:21
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
zbraniecki # 5. June 2006, 13:30
"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...
quiris # 5. June 2006, 13:38
No ciepło, ciepło. Jesteś o krok od rozwiązania zagadki. Przyczynę znalazłeś bezbłędnie
No szkoda, że nie pokusisz się. Mógłbyś zdobyć laur zwycięzcy
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.
quiris # 5. June 2006, 13:44
mwd # 5. June 2006, 15:05
- (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?...
quiris # 5. June 2006, 15:27
[ http://www.w3.org/TR/CSS2/generate.html#q11 ]
zbraniecki # 6. June 2006, 11:12
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.
quiris # 6. June 2006, 11:34
W sumie dobrze, że pojawił się ten post. Jest idealną odpowiedzią do stwierdzenie jakie padło w jednym z komentarzy:
Jak to się mówi? Przyganiał kocioł...? I jeszcze raz powtórzę: punkt widzenia zależy od punktu siedzenia.
mwd # 6. June 2006, 11:58
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_kaba # 6. June 2006, 12:14
quiris # 6. June 2006, 12:19
Ale w innym fragmencie specyfikacji znowu mamy:
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 ]
quiris # 6. June 2006, 12:24
A tu znowu mamy, że specyfikacja nie określa precyzyjnie położenia markera
mwd # 6. June 2006, 14:52
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:
Cóż... Nie ma to jak dokładna specyfikacja. :D
zbraniecki # 6. June 2006, 16:30
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 # 6. June 2006, 16:33
quiris # 7. June 2006, 10:46
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.
neochan # 23. June 2006, 06:13
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.
quiris # 23. June 2006, 06:35
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