AcidLog je experiment. Nadesignuj a naprogramuj si ho podľa vlastných predstáv. viac »

Setkal jsem se s tím, když jsem psal rozsáhlejší dokument, ve kterém jsem tu a tam míchal češtinu a angličtinu. Vytvořil jsem si sadu tříd pro stylování, ale i tak jsem zjistil, že některé elementy spadající do stejné třídy, chci stylovat jinak, když je jejich obsah česky, a jinak, když je anglicky. Samozřejmě mě napadlo použít pro mě jinak stále trochu záhadný atribut lang.

Trochu mě překvapilo, že mi emacs toto nedovolil, žádná záhada se však nekonala – dokument jsem psal v XHTML 1.1, kde byl již tento atribut zrušen ve prospěch atributu xml:lang. Použil jsem tedy tento a vrhl se do stylování (pomocí pseudotřídy :lang). Byl jsem však poněkud překvapen, že se mi změny neprojevily, vyzkoušel jsem tedy i jiný prohlížeč než Operu, konkrétně Firefox, a vida, vše bylo tak, jak mělo být.

Rozhodl jsem se tedy problém prozkoumat pořádněji a zjistil jsem, že problém není v tom, že by Opera neuměla pseudotřídu :lang, ale v tom, že si ji nespojí s atributem xml:lang. Když totiž člověk použije atribut lang, už je vše v pořádku. Protože jsem chtěl zachovat validitu dokumentu, ale zároveň jsem potřeboval oněch vizuálních efektů docílit, downgradoval jsem nakonec jazyk dokumentu na XHTML 1.0 Strict. Musím říct, že je to po delší době nějaký větší bug v implementaci CSS v Opeře, který jsem objevil.

Nakonec jsem se ještě rozhodl vytvořit jakousi souhrnnou ukázku, na které lze vyzkoušet, jak si prohlížeče v této problematice stojí. Přijde mi skoro zbytečné zmiňovat, že Internet Explorer je v tomto směru naprosto nepoužitelný.

Komentáre

Ukážka mi nejde.

 

V jakém smyslu nejde? Mně ano. Teda teď mi taky docela dlouho trvalo, než se to načetlo, ale spíš mi přijde, že mi tu momentálně zpomalila celá síť.

 
Oswald 3 Dec, 1:22

Ve verzi 7.60 3. preview je tech chyb v implementaci CSS az az… Hlavne co se tyce pozicovani a z-indexu.

 

mne ide, vo firefoxe, ale asi nie je čomu sa divit :)

 

KKL2401: No vzhľadom na to, že selektor div[xml:lang=„cs“] je nevalidný tak sa tomu moc nedivím. Na xml:lang ako aj lang atribút sa vzťahuje pseudotrieda :lang() a v Opere to funguje bez problémov. Moja Mozilla a Firefox k tejto pseudotriedie nesprávne nepriraďuje xml:lang atribút. Takže bod pre Operu.

Čiže výsledok je presne opačný. Opera sa chová správne a Mozilla nie.

 

johno: (1) Z ceho presne cerpas, ze ten selektor je nevalidni?
(2) Te druhe casti tak uplne nerozumim. Muzes napsat verze prohlizecu, na kterych jsi to zkousel? Protoze mne proste :lang() pro atribut xml:lang v Opere 7.60P3 nezabralo, kdezto ve Firefoxu 1.0 zabralo. Kdyz mi podas presneji informace, doplnim to tam.

 

KKL2401: Takže, za prvé gramatika CSS a validátor.

No a tú druhú časť vysvetlím po kúskoch. Atribúty lang a xml:lang sa v CSS štandarde pristupujú cez :lang() pseudotriedu. Čiže keď dáš div:lang(cs) tak sa to vzťahuje na všetky divy, ktoré majú lang=„cs“ alebo xml:lang=„cs“. Takže suma sumárum, keď Mozilla a Firefox neaplikujú na div, ktorý má iba xml:lang=„cs“ štýl div:lang(cs){font-style:italic;} tak to právom považujem za chybné správanie a nesúľad so špecifikáciou.

 
humbucker 3 Dec, 21:08

myslím, že použití jmenných prostorů řeší až CSS 3, takže žádný div, že text není podtržený

 

HUMBUCKER: To je tiež pravda, ale nebude sa to robiť cez div[xml:lang=„cs“] tak či tak.

 

johno: Ad 1: priznam se, ze v techto formalnich zapisech gramatik nejsem zbehly. Myslim, ze jsem nasel to spravne misto, totiz tam, kde se pravi, ze attrib zacina hranatou zavorkou a pokracuje S* IDENT S* (a pak zase necim pokracuje, ale to uz pro nas myslim neni vyznamne). Bohuzel nevim, co to S* IDENT S* znamena, muzes to nejak priblizit?
Ad 2: Nerozumime si. Mne to Mozilla a Firefox aplikuji. Proto se Te ptam, jakou verzi pouzivas, ze to Tobe neaplikuji.
humbucker: Vsak ja jsem to taky nenamital jako nejakou zasadni pripominku, spis jenom na okraj.
johno: Jisteze v tomto pripade dava jediny dobry smysl pouzit tu pseudotridu, kdyz uz ji mame, to ale neznamena, ze pokud reseni NS v CSS3 bude vypadat element[ns:at­tribute=„valu­e“], tak ze by to na xml:lang nemelo reagovat, kdyz uz nekoho neco vede k tomu to pouzit, ne?

 

KKL2401: Takže k tej gramatike. S je whitespace. Nájdeš to dole pri tokenoch. Tá hviezdička znamená 0 až N opakovaní. IDENT je další token, ktorý sa začína {nmstart} a pokračuje 0 až N opakovaniami {nmchar}. Ani v jednom z nich sa však nenachádza dvojbodka.

No a teraz keď vylúčime to posledné pravidlo, ktoré je neplatné tak podľa mňa by tá tvoja ukážka mala vyzerať takto.
1. riadok – tučne a kurzíva
2. riadok – kurzíva
3. riadok – tučne a kurzíva

Mozilla má však problém s tým druhým riadkom lebo na neho neaplikuje selektor div:lang(cs), pričom by mala. Opera to zvláda.

Čo sa CSS3 týka tak namespaces sa moc nerozumiem, ale zdá sa mi, že sa to plánuje robiť nejako úplne inak. Nejaké div[xml|lang=„cs“], ale niesom si istý.

 

johno: Diky za objasneni, zapomnel jsem si u ty gramatiky precist i tu nasledujici kapitolu. V tom pripade je to jasne, dvojtecka tam byt zatim nesmi.
Nicmene sdelis mi uz prosim ty verze prohlizecu, ktere pouzivas? :-) Protoze ja ve Firefoxu 1.0 mam vsechny tri radky presne, jak pises, a v Opere 7.60P3 mam druhy bez kurzivy, coz je presne to, co celou dobu tvrdim. Proto by me zajimalo, jak se nase konfigurace lisi.

 

KKL2401: Ah, sorry.

Mozilla – Mozilla 1.7 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040616
Firefox – Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041109 Firefox/1.0 (MOOX M3)
Opera – Version 7.51 Build 3798 – to bude chcieť upgrade

Inak teraz som si všimol, že Opera dáva druhý riadok tučne. Vyzerá to tak, že pre ňu je xml:lang a lang to isté.

 

Pridaj komentár

Komentáre môžu pridávať iba prihlásení užívatelia.