2012-06-16 25 views
10

Parece haber un cambio de ruptura (es decir, incompatible hacia atrás) en el próximo borrador de la especificación del Módulo de sintaxis CSS Nivel 3: ahora es posible que se requiera un punto y coma posterior a la última declaración en un bloque.¿Seguirá permitiendo el CSS 3 omitir los puntos y comas finales?

comparar la antigua redacción (W3C Working Draft 13 August 2003):

4,8. Conjuntos de reglas, bloques de declaración y selectores
Un bloque de declaración (también llamado {} -bloque en el siguiente texto) comienza con un paréntesis izquierdo ({) y termina con el par de llaves derecho (}). En el medio debe haber una lista de cero o más punto y coma - declaraciones separadas (;).

con la nueva (Editor's Draft 14 June 2012):

2. Descripción de la sintaxis
Una regla comienza con un selector (definido por la especificación selectores), entonces tiene una {} bloque -wrapped de CSS que contiene una secuencia de declaraciones. El selector especifica a qué elementos se aplicarán las declaraciones. Cada declaración tiene un nombre de propiedad, seguido de dos puntos y el valor de la propiedad, y finalizó con un punto y coma.

(énfasis mío).

Para que las formas cortas ingeniosas ej .:

em { color: lime } 

(esto se da en la actualidad como ejemplo válido en el CSS de color Nivel Módulo 3 recomendación) ya no validará?

¿Podría alguien más conocedor de toda la colección de borradores de nivel 3 verificar? Para hojas de estilo a prueba de futuro, ¿realmente tenemos que revisar los archivos CSS existentes (e insertar puntos y comas si faltan) antes de que la especificación se finalice o no entendí bien algo?

+2

Dato curioso: El último código de [ejemplo 2] (http://dev.w3.org/csswg/css3-syntax/#at-rules) en el borrador del editor omite el punto y coma final: 'body {font- tamaño: 10pt} '. – Zeta

Respuesta

6

Parece que actualmente hay una ambigüedad en la especificación.

Usted correctamente señaló que 2. Syntax Description section prescribe que termina toda regla con un punto y coma:

Cada declaración tiene un nombre de propiedad, seguido de dos puntos y el valor de la propiedad, y terminó con un punto y coma.

Y al mismo tiempo, descripción del autómata de análisis en la sección 3.6.8. Declaration-value mode lee que una llave de cierre sin un punto y coma termina correctamente una declaración y regla actual al mismo tiempo:

} símbolo

Agregue la declaración actual al valor de la regla actual. Muestra la regla actual de la pila de reglas abiertas y añádela al valor de la nueva regla actual. Cambia al modo de contenido de la regla actual.

Así que de acuerdo a 3.6.8 punto y coma final es opcional.

No puedo decir acerca de la intención real de los autores de la especificación. Pero la situación actual probablemente debería ser reportada y arreglada. Sin duda, no tienen la intención de romper la compatibilidad con CSS 2.1 y volverán a escribir su sección Sintaxis Descripción en la versión final.

+1

Thaks para señalar los detalles del analizador. Pero supongo que tu intención era citar el **} token **, no el token de punto y coma (requerido o no, ';' obviamente completaría una declaración de cualquier manera). ¿Debo usar la lista de correo [[email protected]] (http://lists.w3.org/Archives/Public/www-style/) para informar esta ambigüedad? A pesar de [reclamo] (http://www.w3.org/Style/CSS/current-work#contribute) que _todo el mundo_ puede participar en las discusiones, la lista parece ser bastante elitista. –

+0

@heapunderrun Gracias por su corrección, edité la respuesta. Sí, sería bueno si escribió a la lista de correo si tiene tiempo. Aunque lo haría yo mismo en una semana (estoy un poco ocupado ahora con mi graduación universitaria). –

2

Este es un ejemplo del problema 'separador-terminador'. Evidentemente, CSS 3 se ha movido del punto y coma como un separador al punto y coma como un terminador. Eso significa que se requiere después de cada elemento, no solo entre los elementos. Pascal (separador) y C (terminador) proporcionan otros ejemplos. Esto conduce a aparentes anomalías en Pascal, como el punto y coma que es ilegal antes de 'else' o 'until'. La razón por la cual CSS 3 adoptó una regla incompatible con CSS-2 me supera, y si las implementaciones insistirán en ello es otro asunto, pero la intención de la cita es clara: es un terminador y debe estar presente en todas las entradas, incluida la última.

5

Creo que es un error al escribir las especificaciones, y que la verdadera intención era tenerlo como un separador, al igual que en versiones anteriores. Espero que esto se ajuste en borradores posteriores.

El W3C validation service dice que el ejemplo sin la coma final es válido CSS nivel 3.

yo sin embargo, como siempre lo he hecho, finalice cada declaración con un punto y coma. Esta es una buena práctica, para que no olvide el separador cuando agrega más declaraciones.

+1

+1 para declaraciones siempre terminadas con punto y coma. – Bojangles

+0

Nada más molesto que refrescar la página e ir "¡WTF! ¡NO HAY TRABAJO!" –

+1

No confío en el Servicio de validación que reconoce _recuerdos recientes_, especialmente cuando se trata de cambios fundamentales en el análisis sintáctico. Recuerdo la época en que el validador XHTML oficial del W3C no podía procesar UTF-16 y en su lugar ladraba un error en cada carácter en el archivo de entrada. Esto permaneció sin corregir durante mucho tiempo. Además, hay una trampa. En la sección _Valid CSS information_ secton, el validador de W3C no solo solo autodegrada, sino que también inserta silenciosamente los puntos y comas (¡como si estuvieran inicialmente presentes)! Esto es confuso, no puede usar _Validate por carga de archivo_ para detectar puntos y comas faltantes. –

Cuestiones relacionadas