Autor Zpráva
Leo
Profil
Nedávno mě napadlo jestli je možné donutit prohlížeč, aby ostyloval značku, která v html neexistuje, a zkoušel jsem v DOCTYPE uvést odkaz na vlastní DTD soubor, kde byla uvedená. K mému překvapení ji Firefox ostyloval i bez ohledu na to, jestli DOCTYPE v souboru existoval, zatimco IE7 ji neostyloval ani s vlozenym DOCTYPE. Vypadá to, že

1, prohlížeče se neobtěžují stahovat DTD soubor, a k ničemu ho nepoužívají (kromě přepínání do quirku apod. pro účely CSS formátování)

2, FF styluje i značku, kterou nezná, což mě dost mate - myslel jsem, že prohlížeč má značky, které nezná, ignorovat...

Leo
Chamurappi
Profil
Reaguji na Lea:
Nepoužívá. V HTML kašlou prohlížeče na DTD zcela a v XML se většina prohlížečů obtěžuje rozebírat jen interní podsadu DTD (tzn. jen to, co mají uvnitř souboru, nic dalšího tedy nestahují).

zkoušel jsem v DOCTYPE uvést odkaz na vlastní DTD soubor, kde byla uvedená
To, jestli značka je či není uvedená v DTD, neovlivňuje ani teoreticky to, zda by ji prohlížeč měl stylovat nebo ne. I kdyby prohlížeče DTD četly, nemělo by to mít žádný efekt, protože i nedovolený element je pořád element, byť způsobuje nevaliditu (která prohlížeče nemá zajímat). Nikdy nerozhoduje, zda je element dovolený či nedovolený, podstatné je, zda je známý či neznámý. Proto také nezávisí funkčnost určitých HTML konstrukcí (třeba <font face>) na tom, jakou z dostupných DTD od konsorcia si autor stránky vybere.

k ničemu ho nepoužívají (kromě přepínání do quirku apod. pro účely CSS formátování)
Však také už žádná budoucí verze (X)HTML už s tou nesmyslnou „hrou na DTD“ nepočítá. V návrhu HTML 5 je požadován <!doctype html> jen proto, že přepíná režim. (Při čemž jeho neuvedení, či uvedení jiného <!doctype> nevyvlékne autora stránky z pravomocí HTML 5.)

FF styluje i značku, kterou nezná
Všechny prohlížeče si s neznámými elementy nějak poradí. Explorer je sice odmítá nastylovat, ale v DOMu jsou. Většinou.
Mimochodem, Microsoft kdysi dávno (když ještě kontury XML nebyly tak jasné) implementoval do svého HTML parseru podporu jmenných prostorů XML, je z dnešního pohledu dost divná, ale zajímavé na ní je, že pokud je neznámý element v nějakém jmenném prostoru, dokáže ho nastylovat i Explorer.
Leo
Profil
Chamurappi

"Nikdy nerozhoduje, zda je element dovolený či nedovolený, podstatné je, zda je známý či neznámý. Proto také nezávisí funkčnost určitých HTML konstrukcí (třeba <font face>) na tom, jakou z dostupných DTD od konsorcia si autor stránky vybere."

Tomu nejak nerozumím. Co to znamená známý nebo neznámý? Pokud použiji vlastní značku <odstavec> a FF ji ostyluje pokud v CSS mam selektor typu, konkrétně

odstavec {color: red}

mám to chápat tak, že ji odněkud zná?

"Mimochodem, Microsoft kdysi dávno (když ještě kontury XML nebyly tak jasné) implementoval do svého HTML parseru podporu jmenných prostorů XML, je z dnešního pohledu dost divná, ale zajímavé na ní je, že pokud je neznámý element v nějakém jmenném prostoru, dokáže ho nastylovat i Explorer."

To mě zajímá. Nějaký příklad?

Leo
Joker
Profil
Leo:
Pokud použiji vlastní značku <odstavec> a FF ji ostyluje pokud v CSS mam selektor typu
Opera taky. A i IE ho zařadí do DOMu, jak píše Chamurappi.

Mimochodem:
Nedávno mě napadlo jestli je možné donutit prohlížeč, aby ostyloval značku, která v html neexistuje
A k čemu to, když v samotném HTML máme dostatek nepotřebných značek, které se v případě nutnosti dají zneužít?
Trejpa
Profil
Leo
Co to znamená známý nebo neznámý?
Prohlížeč má interní seznam značek, které umí vykreslit (s nějakým předefinovaným stylem). Vykreslí je vždy stejně* nezávisle na použité DTD (například značku <font color=red>červené</font> vždy vykreslí červeně bez ohledu na to, zda je značka nebo její atribut v odkázané DTD).

* samozřejmě v závislosti na vykreslovacím režimu

Pokud použiji vlastní značku <odstavec> a FF ji ostyluje [...] mám to chápat tak, že ji odněkud zná?
Ne. Stylování neznámých elementů žádné doporučení neřeší, jde tedy o libovůli konkrétního prohlížeče. Podle pravidla „co neznám to ignoruji“ je všechny prohlížeče považují za neznámý (bez stylů) řádkový element.

To mě zajímá. Nějaký příklad?
Zobraz si zdroj: http://www.webylon.info/K.32 (EDIT: Příklad se týká XML parseru.)
EDIT: Přehlédl jsem, že Chamurappi psal o jmenných prostorech nikoliv v XML, ale v HTML parseru Internet Exploreru. V XML podporuje Internet Explorer stylování všech neznámých značek, v HTML pouze těch prefixovaných jmenným prostorem, tedy viz Chamurappiho příklad v dalším příspěvku.
Chamurappi
Profil
Reaguji na Lea:
Co to znamená známý nebo neznámý?
Chtěl jsem tím zejména říct, že není podstatné, co je v DTD a co je validní, ale že záleží na cílené podpoře konkrétního elementu v konkrétním prohlížeči. Tvůrce stránky se sortimentem elementů a atributů nemůže hnout.


To, že prohlížeč nějaký element zná, se může projevovat mnoha různými způsoby a někdy jsou projevy těžko zjistitelné či zanedbatelné. Pár příkladů:

• Zrovna ten <odstavec> půjde v Mozille nastylovat stejně jako <p>, ale jeho reprezentace v DOMu bude stavěná na HTMLUnknownElementu místo na HTMLParagraphElementu — což prakticky znamená jen to, že nebude mít vlastnost „align“, ale i to je rozdíl. Z pohledu HTML parseru také bude platit, že neznámý <odstavec> nemůže způsobit zavření kteréhokoliv dosud neuzavřeného elementu (zatímco řada jiných elementů může způsobit zavření otevřeného <p>).

• Explorer zná element <blink>, ale nebliká. Dokáže ho nastylovat.

• Explorer 6 nezná <abbr>, nedokáže ho nastylovat, nehledě na to, zda je v deklarované DTD.

• Žádný prohlížeč kromě Exploreru nezná element <comment>. Znalost se v tomto případě projevuje tím, že je obsah zcela ignorován, což je vlastnost nenapodobitelná pomocí stylů. V Mozille jde <comment> nanejvýš skrýt, ale tím se nezabrání tomu, aby se vykonávaly skripty v něm. Pro ni to bude jen další HTMLUnknownElement.

• V Opeře jde vypnout podpora pro element <iframe>, ona se pak na první pohled chová, jako by ho neznala (zobrazuje a vykonává alternativu uvnitř), ale podvědomě v DOMu tuší, že to je HTMLIFrameElement.

• Víceméně všechny prohlížeče znají elementy <xmp>, <embed> a <nobr>, které se nikdy neobjevily v žádné DTD.


To mě zajímá. Nějaký příklad?
<html xmlns:pokus>
  <style>
    pokus\:hokus { border: 1px solid blue }
  </style>
  <body>
    <pokus:hokus style="color: red">
      Červený hokus s modrým rámečkem.
    </pokus:hokus>
  </body>
</html>
À propos, nejde jen o styly, bez této xmlns-finty nefungují v Exploreru ani další obecné atributy, např. title nebo contenteditable. S ní fungují.


Reaguji na Trejpu:
Zobraz si zdroj
To asi není dobrý příklad. Odkázaný článek užívá XHTML, jede přes XML parser, tam platí trochu jiné zákonitosti. Elementy z HTML jsou schopné v Exploreřím pojetí XML fungovat jako (X)HTML, pokud jejich jmenný prostor užívá prefix „html“. Všechny ostatní elementy (s prefixy i bez) ovšem jdou snadno stylovat. Naproti tomu v HTML je k úspěšnému stylování nutný jakýkoliv prefix napodobující jmenné prostory.
Leo
Profil
Diky za odpovedi, beru to jako teoretickou zajimavost, prispevek k pochopeni toho, jak prohlizece funguji, a vidim, ze je to misty docela zmatene. Puvodne jsem si proste myslel, ze se neznama znacka ignoruje uplne, jako by v html nebyla a ze prohlizec alespon za urcitych okolnosti nacita externi DTD. Leo
Trejpa
Profil
Chamurappi
To asi není dobrý příklad.
Uznávám. Přehlédl jsem, že’s psal o prefixech v HTML, nikoliv XML parseru.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: