2010-01-30 9 views
196

Quale dei seguenti dovrei usare nei miei fogli di stile?È necessario quotare il valore di url()?

/* Example #1: */ background-image: url(image.png); 
/* Example #2: */ background-image: url("image.png"); 
/* Example #3: */ background-image: url('image.png'); 

Che cosa significa il W3C specifica come il modo corretto?

+4

possibile duplicato di [CSS background-image - Qual è l'utilizzo corretto?] (Http://stackoverflow.com/questions/851724/css-background-image-what-is-the-correct-usage) –

+1

Possibile duplicato di [CSS background-image - Qual è l'uso corretto?] (http://stackoverflow.com/questions/851724/css-background-image-what-is-the-correct-usage) –

risposta

207

Il W3C dice che le virgolette sono opzionali, tutte e tre le vie sono legali.

Il preventivo di apertura e chiusura deve essere lo stesso.

Se si dispone di caratteri speciali nel proprio URL, è necessario utilizzare le virgolette o sfuggire ai caratteri (vedere di seguito).

Syntax and basic data types

Il formato di un valore di URI è 'url (' seguito da uno spazio bianco opzionale seguito da un apostrofo (') o doppie virgolette (") seguito dalla URI stesso, seguita con un carattere opzionale di virgoletta singola (') o doppia citazione (") seguito da uno spazio bianco opzionale seguito da') '. I due caratteri di citazione devono essere uguali.

Escaping caratteri speciali:

alcuni personaggi che compaiono in un URI non quotati, come ad esempio parentesi, spazi vuoti, virgolette singole (') e le doppie virgolette ("), devono essere scappati con un backslash in modo che il valore URI risultante è un token URI: '\ (', '\)'

+7

Alcuni browser più vecchi potrebbero avere problemi con gli URL citati vale a dire IE Mac. – mveerman

+3

In aggiunta a quanto detto da bic72, alcuni vecchi browser fanno anche le doppie richieste quando confrontati con gli URL citati in CSS, prima richiedono "myfile.png" poi myfile.png - da qui il motivo per cui evito di usarli. – Pebbl

+0

FWIW la spec a cui si collega sembra essere stata riscritta da quando hai pubblicato la seconda citazione. Ora le virgole non sembrano richiedere la fuga. – Ben

6

Tre modi sono legali secondo il W3C. Se hai caratteri speciali nel nome (come spazio) dovresti usare il secondo o il terzo.

3

Esempio 2 o 3 sono migliori.

From W3C: Il formato di un valore URI è 'url (' seguito da spazio bianco facoltativo seguito da un carattere di virgoletta singola opzionale (') o doppia citazione (") seguito dall'URI stesso, seguito da una virgoletta singola opzionale (') o doppio virgolette (") carattere seguito da spazio bianco opzionale seguito da") ". I due caratteri di citazione devono essere uguali.

Nota dalla stessa spiegazione, l'Esempio 1 è accettabile, se i caratteri appropriati sono sfuggiti.

11

Ecco cosa le specifiche W3 CSS 2.1 dice:

Il formato di un valore di URI è 'url (' seguito da uno spazio opzionale bianco seguito da un apostrofo opzionale (') o doppia virgolette (") carattere seguito dall'URI stesso, seguito da da una virgoletta singola opzionale (') o virgolette doppie (") seguito da spazio bianco facoltativo seguito da') '. I due caratteri di citazione devono essere lo stesso .

Fonte: http://www.w3.org/TR/CSS21/syndata.html#uri

Quindi tutti i 3 esempi proposti sono corrette, ma quello che avrei scelto è il primo, perché si utilizzano meno caratteri e quindi il file CSS risultante sarà più piccolo, con conseguente minor utilizzo della larghezza di banda.

Questo potrebbe non essere importante, ma i siti Web ad alto traffico preferiscono risparmiare larghezza di banda e molti file CSS e riferimenti URL in essi ha senso scegliere l'opzione che rende il file più piccolo ... Even perché non c'è il vantaggio di nel non farlo.

Nota: potrebbe essere necessario caratteri di escape se gli URL contengono parentesi, virgole, caratteri di spazio vuoto, apici singoli o doppi apici. Questo potrebbe rendere l'url più lungo delle semplici virgolette (che richiedono meno escape). Quindi si potrebbe desiderare di servire un file CSS con gli URL senza le virgolette solo quando il sovraccarico di fuga non rende l'url più di un semplice utilizzando citazioni (che è molto raro).

Tuttavia non mi aspetto che nessun essere umano consideri questi casi limite ... Un ottimizzatore Css gestirà questo per voi ... (ma sicuramente dovete sapere tutto di questo se in realtà state scrivendo un css ottimizzatore: P)

+5

Non so perché questo è stato down-votato; per un sito ad alto traffico, idee come questa fanno una grande differenza nel corso di un anno. –

+4

↑ Ne dubito davvero. Quanti URL ci sono per css? Non troppo. E hai appena risparmiato DUE byte (in ascii o utf-8) in ciascuno. Inoltre, potresti effettivamente rendere l'url più lungo, perché potresti dover utilizzare i backslash. Ci sono molti modi migliori per ridurre le dimensioni del web ... – kralyk

+1

Ovviamente non si tratta di un risparmio, ma Andrea e Joisey hanno ancora ragione. Come esempio estremo, Google ha solo bisogno di rimuovere un byte dalla loro homepage per risparmiare un po 'di larghezza di banda;) – Pebbl

1

Secondo Google CSS Coding Style

non utilizzare le virgolette nei valori di URI (url()).

Eccezione: Se si ha bisogno di usare la regola @charset, uso non sono consentiti doppie virgolette-singole virgolette.

+1

Questo documento ha legalizzato molte delle cattive convenzioni. –

+0

@ DávidHorváth: Non sto dicendo che ti sbagli, ma che cattive convenzioni intendi? –

18

Utilizzare le virgolette perché è raccomandato dallo standard più recente e ci sono meno casi limite.

Secondo il più recente progetto del redattore di CSS Values and Modules Level 3 (18 December 2015)

Un URL è un puntatore ad una risorsa ed è una notazione funzionale, indicato con <url>. La sintassi di un <url> è:
<url> = url(<string> <url-modifier>*)

la versione non menzionata è supportato solo per ragioni legacy e necessita regole speciali parsing (per sequenze di escape, ecc), essendo così ingombrante e non sostenere url modificatori .

Ciò significa che la sintassi url(...) dovrebbe essere una notazione funzionale, che accetta una stringa e un modificatore di url come parametri. Utilizzare la notazione di quotazione (che produce un token di stringa) sarebbe più conforme agli standard e introdurre meno complessità.

@ Il commento di SimonMourier nella risposta principale è errato, perché ha cercato la specifica sbagliata. Il tipo url-token viene introdotto solo per le regole di analisi speciali legacy, quindi è per questo che non ha nulla a che fare con le virgolette.

+0

"La versione non quotata è supportata solo per motivi legacy [..]" Sorgente? – Semmel

+3

https://drafts.csswg.org/css-values-3/#ref-for-val-value-7 "Nota: le regole di analisi speciali per la ** sintassi legacy senza limite di citazione ** indicano che ... " – sodatea

+0

Ho letto ma deve aver perso questa parte - grazie! In entrambi i casi - un consiglio molto prezioso. Imho questa dovrebbe essere la risposta accettata! – Semmel

0

ho avuto:

a.pic{ 
    background-image: url(images/img (1).jpg); 
} 

Mi c'è voluto un po 'per capire che il nome del file chiusa parentesi graffa stava rompendo la regola.

Quindi non è obbligatorio ma, anche se il quoting non è così ben compreso dai browser più vecchi, potrebbe farti risparmiare mal di testa in pagine generate dinamicamente abbastanza complesse.

Problemi correlati