pondělí 11. srpna 2008

Proč v HTML5 není univerzální odkaz

Eric Meyer již nějaký čas navrhuje začlenění univerzálního odkazu do HTML5. Tedy aby přidáním atributu href se mohla jakákoliv značka stát odkazem. Myšlenka to není nijak nová, její první návrh jsem našel již z roku 1994. Eric přistupuje k problému zodpovědně, sepsal use cases pro jednotlivé případy a naposledy vytvořil i zajímavé demo.

Nicméně tato vlastnost se do HTML5 s největší pravděpodobností nedostane.

Odpovědí na otázku: "Proč tomu tak je?" není (jak někdo posledně napsal v komentářích) neochota podobat se XHTML2, které univerzální odkaz obsahuje, ale zpětná vazba implementátorů.

Ian Hickson k tomu poznamenal:
Otázka globálního atributu href="" se objevuje znovu a znovu. Existuje pro něj řada oprávněných use case, např. možnost udělat odkaz ze všech buněk řádků tabulky nebo vytvořit banerovou reklamu jako jeden blokový odkaz.

Bohužel implementátoři mi znovu a znovu opakují, že globální href="" je špatný nápad a oni jsou těmi, kdo má poslední slovo, a proto se nedá svítit.
Ian Hickson kdysi pravdivě (a trochu smutně) prohlásil, že jeho moc jako editora specifikace HTML5 sahá jen tak daleko, dokud specifikuje to, co by implementátoři jinak stejně implementovali. Zamyslete se nad tím a pochopíte nejen tento příklad, ale i řadu dalších věcí okolo vývoje HTML5.

A pokud v (X)HTML univerzální odkaz opravdu chcete, zeptejte se vývojářů vašeho prohlížeče, proč jej v něm nelze implementovat? Ať vám pěkně vysvětlí proč.

20 komentářů:

  1. Čili specifikace se vytváří podle toho co implementátoři chtějí a dovolí?! Paráda, tak to opravdu specifikace bude kličkování mezi možným a reálným. Bohužel svět je takový, specifikace už se nepíší na zelené louce :o/

    Přitom HTML mohlo být tak jednoduché, jen pár elementů (kdo jich víc používá?) a pár jasných pravidel...

    OdpovědětVymazat
  2. Univerzalny odkaz nie je podla mna zla ani dobra myslienka. Moze byt ako vsetko nespravne vyuzivane, no viem si to presne predstavit ako Eric Meyer, ze to by to malo mat specificke vyuzitie.

    Inak odbocim mimo temy. Nedavno som cital pekne porovnanie XHTML 2 a HTML 5 a vyslo mi, ze HTML je technologicky o krok pozadu a XHTML nebol vobec strasiak, pretoze HTML5 zavadza podobne veci jednoducho menej kompatibilne a neohybne. (atribut ROLE vs HTML5 tagy na urcenie sekcie, content, footer, article, content atd). Zavadzat znacky, ked to mohol riesit atribut ROLE, ktory sa da navyse pouzit na casti ako role="breadcrumbs", role="entertainment" a dalsich kopec napadov. Mi to cele pripada, ako keby si tvorcovia HTML5 chceli ulahcit pracu pri inplementovani a nemysleli tym na cistotu navrhu.

    Sam Ian Hickson povedal, ze znacku FONT ponechava kvoli WYSIWIG editorom. To si uz myslim fakt svoje.

    OdpovědětVymazat
  3. Zabudol som na ten odkaz. Ach jo

    http://xhtml.com/en/future/x-html-5-versus-xhtml-2/

    OdpovědětVymazat
  4. Anonymní: Ianovo chovani je nanejvys pragmaticke a strizlive. Nac mit ve specifikaci neco, co stejne nikdo neimplementuje?

    Jinak univerzalni odkaz by se mi opravdu libil, skoda ...

    OdpovědětVymazat
  5. Anonym: Pravidla W3C si přímo vyžadují, aby specifikace zohledňovala implementace. Pro každou specifikovanou vlastnost musí vzniknout alespoň dvě nezávislé interoperabilní implementace.

    Je ztrátou času specifikovat něco, co nikdo nebude implementovat, následkem čehož to bude ze specifikace vyškrtnuto. BTW tohle je také důvod, proč z CSS2 jsou některé části vyšrtnuty a zařazeny do CSS3. Nebyly tu implementace.

    Specifikace (X)HTML se nemohou psát na zelené louce, máme tu nějakých už patnáct let historie, se kterou se musí vypořádat.

    OdpovědětVymazat
  6. Radovan: Průnik HTML5 a XHTML2 je relativně malý. Srovnání zda je jedna specifikace pozadu za druhou nelze dost dobře použít. Obor působnosti i cílová základna obou jsou totiž různé, byť se v jistých bodech překrývají.

    OdpovědětVymazat
  7. Martin Hassman:

    Z casoveho hladiska HTML5 silne zaostava za tym co XHTML 2 navrhovalo uz roky predtym bez zavadzania minimom novych znaciek, hlavne tie sematicke veci. Atributove rozsirenie je z jednoducheho pohladu viac kompatibilne s predchadzajucimi verziami, pretoze vyuziva stavajuce bezrozmerne znacky ako je DIV, SPAN a pridava im semanticku hodnotu prave vtedy ak je potreba. Nic sa nemusi obalovat do novej znacky. V tom vidim velku vyhodu.

    Iste HTML5 pridava niektore super vychytavky, ale v ostatnych prinasa zmatok. Pri XHTML2 je sporne nativne pouzitie XForms, urcite je to vyhoda, ale explicitne by som nerusil stare formulare. XForms maju vyhodu, ze su pouzitelne v hocijakom XML (priklad google earth)

    Kazdopadne uplne zavrhnutie XHTML 2 bola velka chyba. Ak by ho zdokonalili a obohatili o niektore prvky HTML5 mali by sme tu konecne pouzitelne HTML,ktore by vydrzalo niekolko rokov.

    OdpovědětVymazat
  8. Radovan: Jak jsem psal, tohle srovnání je a bude vždy nepřesné (ideální pro bulvár!), jedná se o tolik odlišné světy. Já mohu říct (podobně nepřesně) že XHTML2 zcela zaostává za HTML5, protože nemalá část HTML5 již byla implementována (chvíli jsem chtěl napsat většina, ale to asi není ještě pravda) a některé novinky používají i velcí hráči (např. canvas s Yahoo!), zatímco XHTML2 se pokud vím ani pořádně implementovat nezačalo.

    Dále se držme prosím tématu příspěvku nahoře, další komentáře mimo téma budu mazat.

    OdpovědětVymazat
  9. Nedokážu si představit, jaký technický problém může mít univerzální href, když univerzální style="cursor:pointer" onclick="window.location='http://example.com'" funguje všude a bez problémů...

    OdpovědětVymazat
  10. > jaký technický problém může mít univerzální href

    jednak je tu menší problém se zanořováním takových aktivních prvků, ale dejme tomu, že by menší prvek měl přednost, to se dá udělat.

    Větší problém přinášejí prvky, které už nějak reagují na klikání. Formulářová pole (má být input odkazem?), video, flash.

    Pak je tu ještě drobná problematika kontextového menu. Všem prvkům uvnitř univerzálního odkazu by bylo potřeba do kontextového menu přidat Otevřít do nového okna, stáhnout cíl apod. To se dá udělat.

    Následuje problematika výběru textu. Chci vybrat kus textu a šup, už jsem jako kliknul na odkaz. Nebo výběr zakázat? Hm, asi ne.

    OdpovědětVymazat
  11. @Yuhů: Nemůžu si pomoci, ale žádný z Tebou zmíněných problémů na ukázkové demo stránce nevidím. Text vybrat lze, s kontextovým menu problém nemám a zanoření také funguje… (Opera)

    OdpovědětVymazat
  12. Timy, ona ta emulace JavaScriptem není dokonalá a některé z Yuhůem popsaných věcí se v ní neprojeví, ačkoliv při nativní podpoře prohlížečem by se projevily. (Možná jsou všechny řešitelné, otázka je jak snadno.)

    OdpovědětVymazat
  13. Yuhu:

    Ad Zanorovanie: to by fungovalo jednoducho. Prvok ktory je hlbsie zanoreny je prednostny, ak jeho velkost je mensia ako prvku vyssie, tak plati samozrejme mimo velkosti zanoreneho prvku ten vyssi. Priklad:

    -------------|
    | odkaz 1 |
    | --------- |
    | |odkaz 2| |
    | --------- |
    --------------

    Ad formularove prvky: to ze by sa dal aplikovat na kazdu znacku neznamena, ze sa tam aj bude pouzivat. Flash je zanoreny prvok, nieco ako odkaz z rovnakymi rozmermi samotneho bloku, problem nenastava.

    Ad kontextove menu: len sa zmeni podmienka, kde je teraz kontextove menu pre znacku A. Pouzije sa filter kde sa kontextove menu bude vysuvat pre atribut HREF. Niz tazke

    Ad problematika vyberu textu: bude to take iste ako vyber textu z terajsieho anchoru. Rovnaky princip v tom ktorom prehliadaci.

    OdpovědětVymazat
  14. > Flash je zanoreny prvok, nieco ako odkaz ... problem nenastava.

    Problém nastává. Flash je typický příklad prvku, který si řeší sám, co se bude dít s myší. Pokud na flashi bude v HTML navázaný href, pak už to nebude záležitost implementátora prohlížeče, ale záležitost implementátora flashe. Představte si, jak se bude flash koukat kolem sebe a hledat v celém (!) předcházejícím dokumentu nějaký href a pak počítat, jestli náhodou není někde uzavřený. To chci vidět.

    A podobně se to týká všech prvků, které se do stránky vkládají jako autonomní objekt, kde logika velí vyčlenit jim místo a nechat je, ať se starají o sebe. Čím méně logiky ovládání se na ně bude přenášet, tím lépe to bude fungovat. Odkaz logika ovládání je.

    Samozřejmě by se dalo říct: href je univerzální ... kromě ... objektů. Aha. Jenomže co je na tom potom za univerzalitu?

    Já si mimochodem myslím, že je velmi dobře, že odkaz má svou vlastní značku. Myslím si to z úplně jiného důvodu, než je implementace v prohlížečích. Je to kvůli tomu, že uživatel na stránce odkaz jako samostatný prvek chápe.

    OdpovědětVymazat
  15. Osobně tam vidím víc potenciálních problémů než přínosů. Ty možnosti použití takové věci jsou natolik různorodé a specifické, že mi taky nepřijde jako dobrý nápad to zakotvit ve specifikaci jako obecný požadavek a nutit implementátory se vypořádat se sovkami opravdu tristních nepříjemných kolizí - které stejně skoro nikdy nikdo nepoužije, ale browser s nimi musí počítat. Pro speciality jako tahle jsou tu nadstavby jako Javascript, specifiakce nemůže řešit každý realizovatelný nápad.

    OdpovědětVymazat
  16. Yuhu:

    hladas v tom len problemy a vobec si neuvedomujes, ze takto to je od zaciatku. Do znacky mozes uzavriet odkaz. A co tym docielis ? Zobrazi sa presne vtedy ak sa flash nenacita, co je logicke. Ano flash si veci riesi sam, pretoze to je vec mimo samotneho HTML, kde mu len vyclenujes miesto kde sa bude zobrazovat. Takto to ide so vsetkym, ktore nie je nativne definovane ako HTML technologia. Preto netreba vymyslat problemy, ktore neexistuju. Tymto sa dalej netreba o tom dalej bavit. Vyhadzovat na oci nieco co sa v beznej praxi normalne pouziva a univerzalnym odkazom sa funkcionalita samotnej znacky OBJECT meni len ked sa flash NENACITA a tym padom ide na rad ovladanie HTML a nie samotneho Flashu.

    OdpovědětVymazat
  17. Radovan: Mám pocit, že špatně chápeš Yuhůův komentář i chování objectu obecně (atributy přímo u značky jsou obsah nikoliv jen fallback obsah), on by to u něj byl skutečně problém a stejně k tomu ve svém seznamu dospěl i Eric Meyer (viz sekce Possibly Unsuitable Elements). Hodnocení formulářových prvků se Eric zdá se vyhnul, tam by dopadlo podobně. Pro mně překvapivě zahrnul i značku video, tak by se rovněž musel řešit konflikt fungování odkazu a interakce prvku.

    OdpovědětVymazat
  18. Martin:

    Chapem ho dobre. Len vazne nevidim problem tam kde juhu. Nehovorili sme o znacke OBJECT ako takej, ale prave o Flash obsahu. Samozrejme, ked do znacky objekt nasukas samotny flash, tak je logicke, ze prebera "nadvladu" nad blokom, v ktorom bolo vyvolane. To je vlastnost flashu a nikoho to uz dlho roky netankuje. Ze v tejto kombinacii "nepojde" pouzit atribut href nie je chybou. Je mi jasne, ze OBJECT nie je len pre flash ale je to vseobecny tag pre externy(interny) obsah. Ze sa najviac vyuziva pre flash je dane tym, ze obrazky funguju cez znacku IMG a video a audio obsah dostal vlastne znacky.

    Existuju dva stavy:
    1. flash sa nacita a prebera zodpovednost za odkazy v nom zahrnute.

    2. flash sa nenacital a zostal "prazdny" blok znacky OBJECT a vtedy je odkaz plne pod nadvladou samotneho HTML.

    Osobne v tom nevidim ziaden problem a ani zadrhel. Je to strasne kocurkovo dane HTML 5. Hadaju sa o blbostiach a nedokazu vyprodukovat zhodu. Eric Meyer ako odbornik na webove technologie moze vypisovat svoje poziadavky na implementaciu uz zabudnutych vymozenosti (naschval zabudnutych) ale pokial budu mat vyvoj HTML pod taktovkov cisto tvorcovia prehliadacov tak sa nejakych prevratnych noviniek nedockame, kvoli neochote ich implmenentovat. To je cisto moj hlad.

    OdpovědětVymazat
  19. Radovan: Ach jo, tak tedy znovu a pomalu.

    Fallback content je jakýsi záchranný obsah pokud vše nefunguje podle předpokladů nejmodernější techniky. Jeho příkladem atribut alt u obrázku nebo vnitřní obsah značek object, canvas nebo video. Tento vnitřní obsah je ignorován, pokud prohlížeč umí tyto značky zpracovat. Pokud by v případě Flashe bylo zapotřebí vložit fallback obsah, čili obsah, který bude fungovat POUZE, pokud nelze spustit daný flash objekt, pak se vloží odkaz dovnitř značky object (lze tam vložit jakýkoliv další HTML kód).

    Na druhou stranu atributy vlastní značky object se projeví vždy, tedy ať již se její obsah nahraje či nikoliv. Takhle to funguje u všech replaced značek (typicky např. u obrázku). Značka href u objectu by se opravdu musela projevit vždy.

    OdpovědětVymazat
  20. >"pokial budu mat vyvoj HTML pod taktovkov cisto tvorcovia prehliadacov"

    Vývoj VŠECH specifikací W3C je vázán implementacemi. Specifikaci, která nebude mít alespoň dvě implementace pro každou svou vlastnost W3C nevydá.

    On by snad někdo chtěl šuplíkové specifikace, které se nikdy nerealizují?

    OdpovědětVymazat

Poznámka: Komentáře mohou přidávat pouze členové tohoto blogu.