Autor Zpráva
Jisp
Profil
Kód:
<head><style disabled> p {color: blue;}</style></head>
<body><p>TEXT TEXT TEXT</p></body>
otevřený v IE (do verze 11) zobrazí text černě - respektuje atribut "disabled" (případně "disabled='true'"); v ostatních prohlížečích modře - nerespektují disabled (ani "disabled='true'").

Pokud však implementuji atribut javascriptem:
<head><style> p {color: blue;}</style></head>
<body><p>TEXT TEXT TEXT</p>
<script>document.styleSheets[0].disabled = true;</script></body>
zobrazí se text ve všech prohlížečích černě - všechny tedy respektují "disabled".

Mohl by mi někdo vysvětlit důvody takového chování? Děkuji.
mckay
Profil
Jisp:
Děkuji za zajímavý dotaz!

HTML specifikace pro prvek <style> říká:
<!ELEMENT STYLE - - %StyleSheet        -- style info -->
<!ATTLIST STYLE
  %i18n;                               -- lang, dir, for use with title --
  type        %ContentType;  #REQUIRED -- content type of style language --
  media       %MediaDesc;    #IMPLIED  -- designed for use with these media --
  title       %Text;         #IMPLIED  -- advisory title --
  >

Tedy - nezmiňuje žádný atribut disabled. Internet Explorer, jak je u něho již zvykem, se odkloňuje od standardu a tento atribut podporuje a svým způsobem interpretuje, zatímco ostatní prohlížeče standard dodržují a proto neznámý atribut ignorují.

Proč to tedy ale funguje javascriptem? Opět, dle specifikace, HTMLStyleElement (DOM) rozhraní má tuto vlastnost:
interface HTMLStyleElement : HTMLElement {
           attribute boolean         disabled;
           attribute DOMString       media;
           attribute DOMString       type;
};

A proto je ji možné použít. Toto chování je v pořádku.

Edit: Dodáno poděkování.
Chamurappi
Profil
Reaguji na mckaye:
Internet Explorer, jak je u něho již zvykem, se odkloňuje od standardu
Spíš se standard odklonil od Internet Exploreru, jak je již jeho zvykem. Explorer zavedl disabled jako globální atribut dřív, než vyšlo HTML 4.

zatímco ostatní prohlížeče standard dodržují a proto neznámý atribut ignorují
To je příliš povrchní důvod, protože spoustu jiných neznámých věcí neignorují (čím dál víc). Nedá se najít nějaké hlubší zdůvodnění? Nějaký konkrétní argument, proč je atribut disabled nežádoucí?

Opět, dle specifikace, HTMLStyleElement (DOM) rozhraní má tuto vlastnost
Podle HTML 5.1 už ji zase nemá :-)
Je docela matoucí, když vlastnost běžně odvozovaná z atributu nejde vyjádřit atributem. Myslím, že HTML 5 se snažilo tyto divné situace zrušit.
Jisp
Profil
Chamurappi:
Jako výstižný popis situace pokládám tvoji větu: "Je docela matoucí, když vlastnost běžně odvozovaná z atributu nejde vyjádřit atributem."
Ale jak je tedy možné elegantně řešit dynamické přepínání mezi několika stylovými šablonami v jedné stránce bez použití disabled?
Tomášeek
Profil
Jisp:
Ale jak je tedy možné elegantně řešit dynamické přepínání mezi několika stylovými šablonami v jedné stránce bez použití disabled?
Třeba serverovým scriptem posílat ten stylopis, který chceme využít. Dokonce to bude elegantnější, než tvoje řešení (i v případě, kdyby podpora toho, cos zamýšlel, byla stoprocentní).
Jisp
Profil
Tomášeek:
Potřebuji přepínání do aplikace, která neběží na běžném webovém serveru, takže serverové skripty (např. PHP)nepřipadají v úvahu. Neexistuje jiná varianta (CSS, javascript)?
Tomášeek
Profil
Jisp:
Neexistuje jiná varianta (CSS, javascript)?
JavaScript evidentně ano. Zde musíš počítat s eventuální nepodporou při vypnutém JS, jinak by to dle extraktu ze specifikace výše mělo fungovat.
mckay
Profil
Chamurappi:
Spíš se standard odklonil od Internet Exploreru, jak je již jeho zvykem. Explorer zavedl disabled jako globální atribut dřív, než vyšlo HTML 4.
Velmi subjektivně si myslím, že to, že výrobce prohlížeče zavede nějaký globální atribut, by neměl být popud k tomu, aby se okolo toho ohnul standard.

To je příliš povrchní důvod, protože spoustu jiných neznámých věcí neignorují (čím dál víc). Nedá se najít nějaké hlubší zdůvodnění? Nějaký konkrétní argument, proč je atribut disabled nežádoucí?
Já sám jsem povrchní, takže s tímto odůvodněním jsem úplně ok! :-) Ale teď vážně - blokování eventů? Rád se nechám podat.
pcmanik
Profil
mckay:
Velmi subjektivně si myslím, že to, že výrobce prohlížeče zavede nějaký globální atribut, by neměl být popud k tomu, aby se okolo toho ohnul standard.
To je naozaj veľmi subjektívne nakoľko schvalovanie a vytváranie štandartov trvá tak dlho že by sme sa nikam nepohli :) Prakticky každá nová vec je najprv impelmentovaná v prehliadačoch než sa vôbec stihne schváliť v štandarte. Preto aj bolo HTML 5 rozdelené na viacero menších sekcií, aby sa urýchlilo schvalovanie.
mckay
Profil
pcmanik:
Prakticky každá nová vec je najprv impelmentovaná v prehliadačoch než sa vôbec stihne schváliť v štandarte.
Zeptám se tedy takto: HTML5 vymysleli výrobci prohlížečů? Nebo výrobci prohlížeču implementovali podporu dle draftů, které vymyslelo nějaké konsorcium lidí, kteří se pohybují v návrhu a schvalování standardů? Pokud je první možnost správně, pak jsem ochoten změnit svůj postoj k celé záležitosti.
pcmanik
Profil
mckay:
Zeptám se tedy takto: HTML5 vymysleli výrobci prohlížečů?
V podstate áno, v konsorciu W3C má zastúpenie každý veľký hráč na poli prehliadačov. Takže určitý hlas pri smerovaní vývoja tam majú.
Chamurappi
Profil
Reaguji na mckaye:
to, že výrobce prohlížeče zavede nějaký globální atribut, by neměl být popud k tomu, aby se okolo toho ohnul standard
Když se podívám na tuto trojici atributů, které jako globální zavedl Explorer 4: disabled, tabindex, title – první z nich neimplementoval nikdo další a zůstal mimo specifikace, druhý z nich implementovali všichni a byl následně zaveden do HTML 5 a třetí z nich byl zavedený do HTML 4 a následně jej implementovali všichni.
Takže raději bych posuzoval, jestli má inovace (tedy zglobálnění konkrétního atributu) smysl z technického hlediska, než její vztah k dávným standardizačním rituálům.

Ale teď vážně - blokování eventů? Rád se nechám podat.
Sám nevím, proč to ostatní nepodporují. Chtěl jsem tě inspirovat k tomu, abys našel nějakou zajímavou odpověď :-)

Zeptám se tedy takto: HTML5 vymysleli výrobci prohlížečů?
Samozřejmě. Konsorcium jim ustoupilo až pod nátlakem, protože hrozilo, že roli W3C časem stoprocentně převezme jejich nové uskupení WHAT WG (kde HTML 5 původně vzniklo).


Reaguji na Jispa:
Můžeš třeba měnit skriptem třídu na společném rodiči a upravit všechny selektory, které ovlivňují měnitelnou část vzhledu, aby závisely na nějaké konkrétní třídě.
Je samozřejmě otázka, jak moc se mají různé vzhledy lišit. Tento můj postup dává smysl jen v případě nějakého jednoduchého přebarvení, kde je výrazný společný základ pro všechny vzhledy.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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