2012-03-01 10 views
8

El otro día, estaba viendo cómo los navegadores (utilicé Chrome, pero supongo que se aplica a todos) formatearon elementos HTML usando hojas de estilo de agente de usuario.¿Por qué las hojas de estilo del agente de usuario de los navegadores usan propiedades CSS prefijadas?

Al utilizar , encontré esto:

blockquote { 
-webkit-margin-before: 1em; 
-webkit-margin-after: 1em; 
-webkit-margin-start: 40px; 
-webkit-margin-end: 40px; 
} 

bien Look. Pero por qué no podían usar algo más como esto ?:

blockquote { 
margin-left:/*whatever*/; 
margin-top:/*whatever*/; 
margin-right:/*whatever*/; 
margin-bottom:/*whatever*/; 
} 

Esto acaba de pasar sobre mí, y pensé que era bastante extraño.

+0

Porque pueden? Siempre me pregunté acerca de esto también, y de alguna manera asumí que tenía algo que ver con la rareza del modelo de caja. Es curioso ver qué respuestas obtendrás. –

+1

porque son ** hojas de estilo del agente de usuario ** (como usted enfatizó)? – BoltClock

Respuesta

7

Algunos navegadores usan reglas CSS como esta porque su especificación aún no ha sido finalizada por el W3C, y por lo tanto, si dejaran el prefijo, correrían el riesgo de que el eventual formato estándar del W3C sea ligeramente diferente, y creando incompatibilidades entre los navegadores o entre versiones del mismo navegador, ya que cambian el formato a la forma estándar de hacer las cosas.

Este es un problema particular para reglas con varios argumentos - lo más importante que puede salir mal es que el estándar termina por tener los argumentos en un orden diferente:

border-radius: 3px 3px 6px 6px; 
box-shadow: 3px 3px 6px #fff; 

... etc ...

Agregar el prefijo es su garantía de que si el estándar final resulta ser diferente de su implementación, nada se romperá.

En cuanto a la parte de margin-before en lugar de margin-left, que parece ser debido a la regla -webkit-margin-before no es un equivalente de margin-left, sino de margin:before, que es una reciente propuesta destinada a hacer las cosas funcionan en los modos de escritura vertical y RTL . Ver esta página: http://lists.w3.org/Archives/Public/www-style/2010Sep/0625.html Aunque parece ser bastante oscuro.

+1

Sin embargo, esto no explica por qué están usando propiedades CSS completamente diferentes a las 'habituales'. No es '-webkit-margin-left', es' -webkit-margin-before'. –

+0

Editado, aunque no creo que ese fuera el objetivo de la pregunta. El título de la pregunta definitivamente pregunta sobre las propiedades de CSS "prefijadas". –

+0

En este momento, estas propiedades son simplemente propiedad de WebKit (* urgh *), y no deben tomarse como oficiales o respaldadas por el grupo de trabajo hasta que se agreguen a la especificación. Los prefijos de proveedor no solo se usan para versiones experimentales de propiedades oficiales; también los utilizan los proveedores para crear su propio mundo de propiedades para que jueguen con ellos o los usen por diversas razones, algunas de las cuales pueden promocionarse o no como propuestas para agregarlas a la especificación. Como otro ejemplo que no es WebKit, Mozilla usa una cantidad de selectores, propiedades y valores prefijados para modificar ciertas peculiaridades. – BoltClock

1

Para ayudar a los desarrolladores a ver qué elementos son los predeterminados del navegador.

Cuestiones relacionadas