¿Es realmente necesario citar el valor de url ()?


¿Cuál de las siguientes opciones debo usar en mis hojas de estilo?

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

¿Qué especifica el W3C como la manera correcta?

 208
Author: sshow, 2010-01-30

7 answers

El W3C dice que las citas son opcionales, las tres formas son legales.

Las comillas de apertura y cierre solo necesitan tener el mismo carácter.

Si tiene caracteres especiales en su URL, debe usar comillas o escapar de los caracteres (ver más abajo).

Sintaxis y tipos de datos básicos

El formato de un valor URI es' url ('seguido de un espacio en blanco opcional seguido de un carácter opcional de comilla simple (') o comilla doble (") seguido del URI seguido de un carácter opcional de comilla simple ( ') o comilla doble ( ") seguido de un espacio en blanco opcional seguido de')'. Las dos comillas deben ser iguales.

Caracteres especiales de escape:

Algunos caracteres que aparecen en un URI sin comillas, como paréntesis, espacios en blanco, comillas simples (') y comillas dobles ( " ), deben escaparse con una barra invertida para que el valor del URI resultante sea un token de URI: '\(', '\)'.

 221
Author: Pekka 웃,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-30 02:42:26

Es mejor usar comillas porque es recomendado por el estándar más reciente y hay menos casos extremos.

De acuerdo con el Borrador del Editor más reciente de Valores y Módulos CSS Nivel 3 (18 de diciembre 2015)

Una URL es un puntero a un recurso y es una notación funcional denotada por <url>. La sintaxis de un <url> es:
<url> = url( <string> <url-modifier>* )

La versión sin comillas solo se admite por razones heredadas y necesita reglas de análisis especiales (para secuencias de escape, sucesivamente.), siendo así engorroso y no soportando modificadores de url.

Eso significa que la sintaxis url(...) se supone que es una notación funcional, que toma una cadena y un modificador de url como parámetros. Usar la notación de comillas (que produce un token de cadena) sería más compatible con el estándar e introduciría menos complejidad.

El comentario de@SimonMourier en la respuesta superior es incorrecto, porque buscó la especificación incorrecta. El tipo url-token solo se introduce para las reglas de análisis especiales heredadas, por lo que es por eso que no tiene nada que ver con las citas.

 24
Author: sodatea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-20 16:31:51

Esto es lo que dice la especificación W3 CSS 2.1:

El formato de un valor URI es'url (' seguido de espacio en blanco opcional seguido de una comilla simple opcional (') o comilla doble (") seguido por el propio URI, seguido por comilla simple opcional ( ' ) o comilla doble ( " ) seguida de espacio en blanco opcional seguido de')'. Los dos caracteres de la cita deben ser igual.

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

Así que todos los 3 ejemplos que propuso son correctos, pero el que elegiría es el primero porque usa menos caracteres y, por lo tanto, el archivo CSS resultante será más pequeño, lo que resultará en menos uso de ancho de banda.

Esto puede parecer que no es importante, pero los sitios web de alto tráfico prefieren ahorrar ancho de banda y sobre un montón de archivos CSS, y las referencias de url en ellos tiene sentido elegir la opción que hace que el archivo más pequeño... Incluso porque no hay ninguna ventaja en no hacerlo.

Nota: es posible que tenga que escapar caracteres si las URL contienen paréntesis, comas, espacios en blanco, comillas simples o comillas dobles. Esto podría hacer que la url sea más larga que solo usar comillas (que necesitan menos escapes). Por lo tanto, es posible que desee servir un archivo Css con url sin comillas solo cuando la sobrecarga de escape no hace que la url sea más larga que solo usar comillas (lo cual es muy raro).

Sin embargo, no esperaría que ningún ser humano siquiera considerara estos casos extremos... Un optimizador Css manejaría esto por ti... (pero seguro que necesitas saber sobre todo esto si realmente estás escribiendo un optimizador css: P)

 11
Author: Andrea Zilio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-28 05:03:12

Tres formas son legales según el W3C. Si tiene caracteres especiales en el nombre (como espacio) debe usar la segunda o la tercera.

 6
Author: Y. Shoham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-30 18:12:38

El ejemplo 2 o 3 son los mejores:

Del W3C: El formato de un valor URI es ' url ('seguido de un espacio en blanco opcional seguido de un carácter opcional de comilla simple (' ) o comilla doble ( ") seguido del propio URI, seguido de un carácter opcional de comilla simple ( ') o comilla doble ( ") seguido de un espacio en blanco opcional seguido de')'. Las dos comillas deben ser iguales.

Nota de la misma explicación, el ejemplo 1 es aceptable, si los caracteres apropiados son escapar.

 3
Author: Nick Craver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-30 18:14:11

De acuerdo con El estilo de codificación CSS de Google

No use comillas en los valores URI (url()).

Excepción: Si necesita usar la regla @charset, use comillas dobles-no se permiten comillas simples.

 1
Author: Junhao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-07 06:14:13

Tenía:

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

Me tomó un tiempo entender que el corsé cerrado del nombre de archivo estaba rompiendo la regla.

Por lo tanto, no es obligatorio, pero, incluso si las citas no son bien entendidas por los navegadores más antiguos, podría ahorrarle un dolor de cabeza en páginas generadas dinámicamente bastante complejas.

 1
Author: TechNyquist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-28 14:50:17