ugrás a tartalomhoz

Hagyd el az idézőjelet

Török Gábor · 2010. Júl. 14. (Sze), 10.21

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
Hibát rejtő színkiemelés

Javasolt
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*['"]?(?.+?)['"]?\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*(['"]?)(?.+?)\1\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?

 
1

Aptana

Kevlar · 2010. Júl. 14. (Sze), 11.38
Az Aptana alapbeállítások szerint nem jelzi. Bár igaz, hogy soha nem is használtam ebben az esetben idézőjelet, semmilyen böngészőben nem volt gond miatta. Pedig jelenleg is 7 böngészőben tesztelek.
2

valóban

Dohány Tamás · 2010. Júl. 14. (Sze), 12.28
Valóban nem jelzi az Aptana. Viszont azt is érdemes figyelembe venni, hogy a Zen Coding sem tesz idézőjelet. Mivel én azt használom, ezért az idézőjel nálam is kimarad.
3

Komodo

Poetro · 2010. Júl. 14. (Sze), 12.32
A Komodo alapértelmezetten validálja többek között a CSS fájlokat is, és ott alapból feltűnik a Syntax Checking Status panelen a hiba, de a színezés miatt is látszik.
PSPad alatt pedig látszik a színezés miatt hogy nem lett jól lezárva az elem.
4

notepad++

ironwill · 2010. Júl. 14. (Sze), 12.33
Szerkesztőnek a notepad++ -t használom és emlékeim szerint problémázik, ha csak nyitó idézőjel van. (de biztos, hogy ez csak az általános szabályok miatt van és nem a background miatt)

(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.)
5

Jelentem, a Netbeans jelzi.

sajt · 2010. Júl. 14. (Sze), 13.20
Jelentem, a Netbeans jelzi.
10

jelzi, de van, amikor hibásan

Gixx · 2010. Júl. 14. (Sze), 15.24
pl. a következőre már nem jelez hibát (nincs piros felkiáltójeles ikon, se jobb oldalt piros indikátor csík, amivel a hibás sorhoz lehet ugrani), csak a szintaxis-szakadásból lehet rájönni, hogy valami nem stimmel (mint itt a példában is):

background-image: url('vala'mi.jpg);
bár ha csak átfutja az ember a kódot, könnyű átsiklani felette.
11

Ezt már az Emacs is rosszul

Török Gábor · 2010. Júl. 14. (Sze), 15.27
Ezt már az Emacs is rosszul kezeli. Mondjuk ez nem is az elgépelés esete.
6

Komodo Edit

Cooty13 · 2010. Júl. 14. (Sze), 13.43
background:url("valami.jpg');
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. :)
20

Notepad++ (5.3.1) nálam

inf · 2010. Júl. 20. (K), 06.44
Notepad++ (5.3.1) nálam jelzi...
Te milyen verziót használsz?
7

Vim is

Ustak · 2010. Júl. 14. (Sze), 15.04
jelzi az ilyet :-)
8

MacVim nem

Török Gábor · 2010. Júl. 14. (Sze), 15.08
9

Igazad van

Ustak · 2010. Júl. 14. (Sze), 15.18
Ubuntun sem mutatja! Belevizionáltam :-)
12

Kódolás

Joó Ádám · 2010. Júl. 14. (Sze), 23.49
A hiba a szék és a képernyő között van.

É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.
13

en igy csinalom, meg par

Tyrael · 2010. Júl. 15. (Cs), 00.43
en igy csinalom, meg par ismerosom is.
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
14

IDE

Joó Ádám · 2010. Júl. 15. (Cs), 01.10
Én is. Ezért is nem használok IDE-t. Nem szeretem mikor helyettem gondolkodik egy gép.
16

Én nem abban látom a gondot,

deejayy · 2010. Júl. 15. (Cs), 08.01
Én nem abban látom a gondot, hogy helyettem gondolkodik, mert együttműködni hatékonyabb. Az viszont gond, ha mondjuk egy olyan környezetbe deploy-olok, ahol a módosítás helyben egyszerűbb, és csak egy notepad/vi van, ami nem gondolkodik, és ezért nem kapom meg azokat az automatizmusokat, amit egy fejlettebb szerkesztő megadna.
17

van par dolog amit sokkal

Tyrael · 2010. Júl. 15. (Cs), 09.10
van par dolog amit sokkal nehezkesebbnek erzek a butabb szerkesztokkel:
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
15

Évekkel ezelőtt olvastam,

deejayy · 2010. Júl. 15. (Cs), 07.56
Évekkel ezelőtt olvastam, hogy a css url()-be nem kell idézőjel, nem is használom. A szerkesztőm (mcedit / cooledit) viszont nem jelzi, ha elhagyom, sőt nem is változik a kiemelés ha bármelyik idézőjelet elkezdem, ugyanolyan karakternek tekinti az url()-en belül, mint egy pontot vagy egy 'a' betűt.
18

Természetesen VIM-hez is

yaanno · 2010. Júl. 15. (Cs), 10.57
Természetesen VIM-hez is elérhető számos validátor, csakúgy, mint TextMate-hez (ami szerintem egy vizuálisan felturbózott VIM), amit munkám során egy ideje használok. Tapasztalatom szerint a legjobban testreszabhatók ugyanakkor még mindig az Emacs különböző módjai, ahol a Lint a háttérben fut úgy, ahogy a nagy IDE-k esetében, ezeknél viszont egy horror testreszabni a "plugineket".

É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.
19

Coda

gyoridavid · 2010. Júl. 19. (H), 18.51
A coda remekul jelzi