Na IEblogu byl včera představen vendor prefix Internet Exploreru. Je obsažen v přicházející verzi IE8, začíná na „-ms-“, např. „-ms-filter“. A já volám: „Konečně je to tady!“
Vendor prefixy již dávno mají jak Mozilla (-moz-), Opera (-o-), WebKit (-webkit-) nebo některé mobilní prohlížeče (-wap-) a lze je dnes již považovat za nutnost. Je to jakýsi jmenný prostor kaskádových stylů, ve kterém si výrobce prohlížeče může téměř dělat co chce. Typicky vkládat svá vlastní rozšíření (pokud jsou s vendor prefixem, proč ne, třeba se časem ujmou i u sousedů) nebo uvolňovat nehotové či dosud nevyřešené implementace (viz CSS proměnné ve WebKitu).
Vendor prefix zajišťuje, že CSS vlastnosti výrobce nebudou v konfliktu se standardizovanými CSS vlastnostmi a předejte tak případným problémům do budoucna. Specifikace CSS2 vendor prefixy sice nezná, ovšem její revize CSS2.1 již ano (CSS2.1 dosud není Final Recommendation, nicméně je již dnes všeobecně chápána jako náhrada původní specifikace CSS2). Validátor by měl vlastnosti s vendor prefixy správně přeskakovat (nezná je a nedokáže je zvalidovat), ovšem zatím je hlásí jako chybu. Nezkoumal jsem proč.
Vendor prefixy v IE dostaly dnes již hojně známé IE-only vlastnosti jakými jsou scrollbar-base-color, filter, behaviour a dále některé CSS3 vlastnosti, které IE8 podporuje (CSS3 se stále mění a je dobře předejít opakování historického faux pas s boxmodelem), např. text-justify, text-align-last apod.
Nezapomeňme na zobrazovací módy IE8 (má tři!). Nový standardní mód IE8 rozumí, jak -ms- vlastnostem, tak jejich původním podobám (zpětná kompatibilita, nebudete muset své weby předělávat), oba dva starší módy prohlížeče rozumí jen původní syntaxi a vendor prefix neznají (chovají se stejně jako předchozí verze IE).
U vlastnost filter musel být navíc pozměněn formát hodnoty (část za dvojtečkou), aby byl kompatibilní s CSS2.1. Proto místo původní syntaxe:
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80, FinishOpacity=70, Style=2);
ve standardním módu IE8 použijte (má navíc uvozovky):
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80, FinishOpacity=70, Style=2)";
Plný přehled -ms- vlastností najdete na Microsoft CSS Vendor Extensions.
Pokračování:
Zatimco ty tady naivne oslavujes, tak ja si ihned uvedomil, ze tyto prefixy M$ ponecha i pote, co budou vsechny browsery zvladat nativne CSS3, coz bude dalsi obrovska nekompatibilita, kterou marketing M$ bude nazyvat "zpetna kompatibilita s IE8" a tim vazne porusovat standard, ve kterem zadne prefixy nejsou.
Pro veschny browsery bude fungovat napr. word-wrap, ale pouze M$IE nebude reagovat na nic jineho, nez ms-wordwrap !
Fuck M$ !
[1] "tyto prefixy M$ ponecha i pote"
Prefixové vlastnosti můžou zůstat natrvalo a nejspíš i zůstanou, viz případ Gecka, které je má také pořád a není důvod je rušit. S tím počítá, než že by to byl nějaký rafinovaný trik.
"porusovat standard, ve kterem zadne prefixy nejsou"
Jsou, viz CSS 2.1, odkazovaný odstavec 4.1.2.1
"Pro veschny browsery bude fungovat napr. word-wrap, ale pouze M$IE nebude reagovat na nic jineho, nez ms-wordwrap"
I když by to tak dopadlo, jakože dnes opravdu není důvod, aby to tak dopadlo, následky by byly řádově menší než v opačném případě, kdy stejně zapsaná vlastnost (např. width) znamenala v různých prohlížečích něco jiného.
Opravdu nevidím racionální důvod, proč tenhle krok, na který se nejen čekalo, ale po kterém W3C a webdesigneři sami volali, chápat špatně.
a ja mel za to, ze OPRAVDOVY designer umi udelat CSS bez pouziti hacku i techto nesmyslu. to bylo asi naivni si to myslet, ze??? tento krok povazuji za berlicku pro trolly, kteri pisi stranky ve FrontPage - nic pro me... navic - misto tvoreni standardu pro vsechny najednou, bude mit kazdy prohlizec vlastni cssko? hurray, navrat do minuleho stoleti, kdy kazdy web obsahoval nejaky ten IF-IF-IF a podle toho se poslalo "spravne" CSSko... opravdu hnus... muj nazor... (do webu delam 10 let)
[3] Wdolku (to oslovení se mi líbí, musel jsem ho použít 8-), jaké "hacky" máš na mysli? Tento článek ani vendor prefixy totiž o žádných nejsou.
Vzpomeň si, kolik let trápení způsobil webdesignerům dvojí boxmodel a nediv se, že jak prohlížeče, tak W3C chtějí předejít opakování stejné situace. Jiná cesta, než používání vendor prefixů neexistuje. Jinak se bude historie opakovat.
[4] Tedy s CSS si zrovna netykám, ale věta: jiná cesta než používání vendor prefixů neexistuje mi nějak nahání husí kůži. Jestli to dobře chápu, tak chcete říct, že neexistuje cesta jak udělat něco standardem pro všechny prohlížeče a že jediná cesta je udělat to pro každý zvlášť?
To si asi začnu psát vlastní prohlížeč s vlastními prefixy.
(ale možná to celé nechápu)
[5] Nechápeš a vnímáš mimo kontext. Ono tvrzení z [4] převyprávěno znamená "Pokud si nechceme zopakovat minulost s více boxmodely, potřebujeme vendor prefixy."
Proč je k tomu potřebujeme, vědí ti, kdo pamatují, jak problém s boxmodely vznikl. Jednalo se o implementaci nedokončené specifikace, která se pak změnila. Stejné implementace se dějí dnes a denně a problému lze předejít, pokud se implementovaným vlastnostem, jejichž specifikaci nelze považovat za stabilní, přiřadí vendor prefix, který se odstraní až když je specifikace stabilizovaná.
Prohlížeče k tomu přistupují různě, IE si nyní pro tu mez stability označil stav Candidate Recommendation specifikace (cokoliv dosud nedosáhlo tento stav, to IE implementuje výhradně s vendor prefixem). Což pro něj docela rozumné. Další prohlížeče jsou odvážnější, ale protože mají kratší vývojové cykly, mohou si to snad dovolit.
[2] GECKO ma vendor prefixy pouze pro zadnym standardem nespecifikovane veci, coz je naprosto normalni, zatimco M$IE ma vendor prefixy pred kazdym atributem CSS3, cimz standard CSS3 velice zavazne porusuje jeste drive, nez jej v W3C vubec stacili vydat. Kde jsou v CSS3 specifikaci podle vas prefixy typu "ms-" pred atributy jako je word-wrap ?
Ja jsem si jist, ze to tak dopadne a nasledky budou obrovske, navic stejne v M$ CSS3 bude vetsina atributu znamenat neco jineho, nebo delat neco jineho, nez standard urcuje, jelikoz se jedna o M$ CSS3, kde standardem jsou interni doporuceni Micro$oftu.
"Opravdu nevidím racionální důvod, proč tenhle krok, na který se nejen čekalo, ale po kterém W3C a webdesigneři sami volali, chápat špatně."
nikdo po implementaci CSS3 s ms- prefixem nevolal, kazdy developer vcetne me by uvital atributy jako je napr. ms-margin-top, kterym bych pridaval dalsi margin pro M$IE, aby renderoval box na spravnem miste, nebo ms-hide-horizontal-scrollbar, pripadne ms-hide-vertical-scrollbar a dalsi veci pro opravu M$IE-specific bugu, kterymi zadny jiny browser nikdy netrpel a trpet nebude.
[9] Docházíte ke špatný závěrům, protože vycházíte z nepravdivých předpokladů.
"GECKO ma vendor prefixy pouze pro zadnym standardem nespecifikovane veci"
Není pravda, i Mozilla je má a z dobrého důvodu, nemá se za co stydět, viz zdroják http://mxr.mozilla.org/mozilla/source/layout/style/nsCSSPropList.h nebo MDC http://developer.mozilla.org/en/CSS_Reference/Mozilla_Extensions
namátkou některé column-* a background-* vlastnosti jsou součástí CSS3 a mají -moz prefix (ze stejného důvodu jako v případě -ms- , jejich specifikace prostě není stabilní) a najdeme i pozůstatky z minulosti (např. -moz-left).
"zatimco M$IE ma vendor prefixy pred kazdym atributem CSS3"
Správně řečeno před každou vlastností CSS3, která je ve specifikaci, jenž dosud nedosáhla stavu Recommendation, tudíž může být během noci prakticky přepsána.
To, že vývojáři takové vlastnosti nevydají do prohlížeče, který bude možná vévodit desktopům několik let, je to od nich rozhodnutí moudré a s ohledem na webové standardy skutečně prozíravé. Jinak by mohli nevědomky zapříčinit přesně to, pře čím varujete - stejné vlastnosti by v odlišných prohlížečích znamenali něco jiného. Tady má vendor prefixy ochrannou funkci. Odsuzovat galantní krok "nepřítele" je hloupé. Za tohle si vývojáři IE zaslouží potlesk. Za některé jiné věci pro změnu ne, ale zrovna zde webovým standardům vyšli vstříc.
"cimz standard CSS3 velice zavazne porusuje"
Není pravda. Vendor prefix není v rozporu s CSS3 (zároveň to ale není ani splnění CSS3 - a v tom je ten trik).
Není mým cílem obhajovat IE, ale vyvrátit nepravdivá tvrzení, plynoucí nejspíše ze zapomenutých zkreslujících anti-IE brýlí na nose. Sundejte si je, máme tu rok 2008!
Zkusil jsem to rozepsat podrobněji. Je vidět, že vendor prefixům víc lidí nerozumí http://met.blog.root.cz/2008/09/10/k-cemu-jsou-v-css-potreba-vendor-prefixy/
Martin Hassman ex-biochemik, umělecký programátor a publicista. Spoluzakladatel CZilly, zakladatel Zdrojáku, správce HTML5.cz, organizátor hackathonů, čekovacích muzejních nocí aj. akcí.
Přečteno 24 507×
Přečteno 24 033×
Přečteno 20 754×
Přečteno 19 839×
Přečteno 19 810×