2012-09-21 8 views
7

Para lograr la compatibilidad entre navegadores, tendemos a utilizar tanto extensiones específicas del proveedor como la sintaxis estándar de CSS3. Sé que CSS3 todavía está en borrador, pero ya hemos comenzado a usarlo. Pero la pregunta es, ¿importa mucho el orden en que se producen?Realización de pedidos en CSS3 basado en proveedores Vs Sintaxis estándar CSS3

Por ejemplo, vamos a ver aquí

-moz-border-radius: 10px; 
border-radius: 10px; 

Esto se aplica navegador específico border-radius y luego cae de nuevo al método estándar, la tarde esperanzador será ignorada, pero aún así.

Del mismo modo, el cambio de su orden

border-radius: 10px; 
-moz-border-radius: 10px; 

Ahora, este intenta sintaxis estándar y luego cae de nuevo a la extensión de navegador.

¿Hay alguna diferencia causada por el pedido? Puede ser en términos de rendimiento o de lo contrario.

+0

__P.S .__ No es un duplicado de http://stackoverflow.com/questions/8131846/why-do-browsers-create-vendor-prefixes-for-css-properties :) – Starx

Respuesta

2

Al escribir las propiedades de CSS3, la sabiduría moderna es enumerar la propiedad "real" al final y los prefijos del vendedor primero.

Otro elemento a tener en cuenta cuando se incluye la propiedad sin prefijo es colocarlo después de las versiones con prefijo del vendedor. Cuando un navegador implementa la versión estándar de una propiedad, tal como se especifica en la especificación CSS3 correspondiente, lo más probable es que desee utilizar esa implementación en lugar de la versión experimental específica del navegador (que probablemente todavía admitirá ser compatible con versiones anteriores) . Ponerlo al final debería garantizar que anulará la implementación con prefijo del proveedor.

Ver Ordering CSS3 Properties

Ver también: Remember non-vendor-prefixed CSS 3 properties (and put them last)

+0

Sí, lo sé ese. ¿¿Pero la pregunta es porqué?? ¿Cuál es la razón detrás de esta sabiduría moderna? – Starx

+0

Ver la respuesta actualizada. –

+0

En su cita 'anular la implementación con prefijo del vendedor', esa es una de mis preocupaciones. ¿Esto plantea problemas de rendimiento? – Starx

2

El orden de los prefijos no importa, siempre y cuando mantenga la futura versión estándar en último.

Si un navegador deja de admitir el prefijo, simplemente ignorará la regla y ejecutará la versión estándar.

ps: igual que A.K. pero más simple, por lo que no tiene que leer todas las páginas.

+0

Esta pregunta se refiere específicamente al orden de las propiedades estándar frente a las del proveedor. Entonces, * ¿por qué * debería la versión estándar ser la última? Además, los navegadores suelen admitir * tanto * las versiones estándar y específicas del vendedor de una propiedad durante bastante tiempo. * Si * cancelaron la compatibilidad, no importaría en qué orden se encuentran las propiedades. – 0b10011

+0

Dado que CSS se basa en la conexión en cascada, ¿la última regla anularía la anterior? Por lo tanto, la versión estándar debe ir después del prefijo. – Mark

+1

No estaba preguntando por mí (hubiera sido yo quien hubiera escrito una respuesta si ya no se hubieran escrito otras respuestas). Simplemente creo que esto debería aclararse en su respuesta, especialmente porque eso es específicamente lo que el OP estaba pidiendo. Su respuesta dice * qué * hacer, pero no * por qué * hacerlo. – 0b10011

6

Ahora, intenta primero la sintaxis estándar y luego vuelve a la extensión basada en el navegador.

Esto puede ser una declaración engañosa. Un navegador compatible probará primero la propiedad no prefijada estándar, pero si también admite la propiedad prefijada además del estándar, luego aplicará ese prefijo también. Por lo general, esto resulta en que la declaración estándar sea anulada por la declaración prefijada y la implementación potencialmente no estándar de esa propiedad por parte de un navegador, lo que frustra el propósito de tener allí la propiedad estándar en primer lugar.

La razón por la que debe declarar que la propiedad no prefijada es la última es porque así es como las propiedades se combinan en una regla: un navegador siempre usará la última aplicable.Las versiones prefijadas y no prefijadas de una propiedad se tratan como la misma propiedad con respecto a la cascada, por lo que desea que un navegador haga todo lo posible para cumplir con las normas al aplicar esa propiedad.

Si un navegador implementa un prefijo pero no el estándar, está bien, pero si implementa ambos, debe asegurarse de que utiliza el estándar en su lugar. Usted hace esto al declarar la propiedad estándar al final.


Por lo que yo soy consciente de que esto no está definido en la especificación, porque por lo que la especificación es extensiones de vendedor en cuestión no son estándar por lo que su aplicación no se puede describir. Aunque el syntax of vendor prefixes se describe en la especificación, las implementaciones se dejan completamente a la discreción de los proveedores.

Sin embargo se trata de una convención acordada por la mayoría de los desarrolladores de navegadores en la aplicación de las versiones prefijadas de una propiedad a-ser-estándar o norma, siempre tratar ambas versiones con prefijo y sin prefijo como alias el uno del otro.

+0

Las "extensiones específicas del proveedor" han sido parte de la especificación CSS durante bastante tiempo: http://www.w3.org/TR/CSS21/syndata.html#vendor-keywords – Rob

+0

1) Esa es la especificación CSS2.1 2) Que solo describe la sintaxis, no la implementación. La sintaxis se define para que los implementadores la utilicen al crear propiedades no estándar. Estas propiedades prefijadas no son parte del estándar y se dejan en manos de los proveedores para implementarlas de la forma que deseen. La especificación no dice cómo deberían implementarse las propiedades prefijadas. – BoltClock

+0

Y donde hay sintaxis debe haber una implementación. EDITAR: Oh, espera. Lo entiendo. Quizás esté diciendo que la implementación no es estándar y no incluye prefijos de proveedor. – Rob