Hagyd el az idézőjelet
Dani fordult hozzám azzal a panasszal, hogy már órák óta kerget egy hibát mind hiába. Minden böngészőben a hozzáfűzőtt reményeknek megfelelően jelent meg a CSS, de az egyik böngésző mintha csak egy félbeharapott stíluslapot kapna meg. Hosszas kutakodás után végül a Firefox beépített hibakonzolában derült rá fény, hogy egy url()
jelölésben megadott útvonal végéről hiányzott a záró idézőjel. Nem értettem, hogy egy ennyire triviális hibát hogy nem szúrt ki a Dani, hiszen már az editorban is látszódna a színkiemelés miatt. Igen, az én editoromban látszódik, Daniéban viszont nem.
Hibát rejtő színkiemelés
Javasolt színkiemelés az editorban
A kérdés az, hogy valóban ez az elvárt viselkedés? A szóban forgó kódrészletre a CSS validator Value Error-t dob, de lássuk, mit mond a spec:
The format of a URI value is
url(
followed by optional white space followed by an optional single quote (') or double quote (") character followed by the URI itself, followed by an optional single quote (') or double quote (") character followed by optional white space followed by)
. The two quote characters must be the same.Some characters appearing in an unquoted URI, such as parentheses, commas, white space characters, single quotes (') and double quotes ("), must be escaped with a backslash so that the resulting URI value is a URI token:
\(
,\)
,\,
.
Ha az első bekezdés alapján leképezzük a reguláris kifejezést, akkor url\(\s*['"]?(?
mintát kapunk. Viszont az a kitétel, hogy az idézőjeleknek egyező típusúaknak kell lenniök, sugallhatja azt, hogy backreference-et használjunk a szimmetria biztosításához: url\(\s*(['"]?)(?
. Dani editorának CSS-re kidolgozott szintaxis elemzője vélhetően tehát az előbbi mintára appellált. Kérdés, hogy érdemes egyáltalán idézőjelet használni, ha az az ajánlás szerint is elhagyható? A válasz az, hogy felesleges, a piacon elérhető böngészők sem követelik meg, egy hibalehetőséggel kevesebb, ha mellőzzük az idézőjelek használatát az url()
-en belül. (Egyedül a fennebbi idézet második paragrafusában jelzett karakterek esetén kell ügyelnünk azok kivédésére.)
A te editorod jelzi a hiányzó idézőjel zárást?
■
Aptana
valóban
Komodo
PSPad alatt pedig látszik a színezés miatt hogy nem lett jól lezárva az elem.
notepad++
(Annó valami probléma miatta elhagytam a background url()-ből az idézőjeleket, akkor és azóta sem okozott gondot egyetlen böngészőnek és validátornak sem, szóval én sem erőltetem.)
Jelentem, a Netbeans jelzi.
jelzi, de van, amikor hibásan
Ezt már az Emacs is rosszul
Komodo Edit
A Notepad++ valóban nem jelzi, a Komodo Edit viszont jelzi színezéssel és spell check figyelmeztetéssel is ("Error in parsing value for property 'background'"), hogy itt valami nem stimmel.
Egyébként soha az életben nem használtam semmilyen idézőjelet az url()-nél CSS-ben, sokszor láttam már más emberek kódjában és sokáig azt gondoltam hogy ez lenne a követendő példa, de nem szoktattam rá magam és most már, hogy ezt elolvastam nem is fogom. :)
Notepad++ (5.3.1) nálam
Te milyen verziót használsz?
Vim is
MacVim nem
Igazad van
Kódolás
Én egyébként mindig használok kettős idézőjelet, mert az ott nekem egy sztring. Gedit amúgy nem jelzi. Az efféle hibákat azonban nagyon egyszerűen el lehet kerülni: ha páros határolójellel kell valamit körülvenni, akkor nyitáskor már írom is a záró párját, aztán eggyel vissza. Nincsenek is lezáratlan blokkjaim. Ehhez képest nem sokaknál látom ugyanezt a stílust.
en igy csinalom, meg par
viszont szoktam szivni nehany intelligens IDE-vel, mig rabeszelem, hogy ne akarja helyettem zarni a zaro/idezojeleket, vagy eppen elnyeli a lezaro taget, mert azt hiszi hogy veletlenul nyomtam duplat.
Tyrael
IDE
Én nem abban látom a gondot,
van par dolog amit sokkal
kodkiegeszites, ctrl+click-re ugras az adott fuggveny/osztaly definiciojara, etc.
ezek miatt igazabol kicsit a ket vilag kozott mozgok, feladattol fuggoen hol pspad/notepad++, hol eclipse.
Tyrael
Évekkel ezelőtt olvastam,
Természetesen VIM-hez is
Én jó ideje elhagyok mindent a CSS-ből, ami opcionális, legyen hatékony, kompakt és valid (lehetőség szerint). A HTML esetében ezt egyelőre nem tudom megtenni, bár érdemes lenne forgalomcsökkentés érdekében ezt megtenni. JavaScript-ben igyekszem Crockford-osra fazonírozni, hasonló okokból, mint a CSS-t.
Coda