2010-05-28 12 views
6

Las reglas de CSS3 traen muchas características interesantes.¿Por qué mozilla y webkit preponen -moz- y -webkit- a las reglas de CSS3?

Tome border-radius, por ejemplo. El estándar dice que si escribe esta regla:

div.rounded-corners { 
    border-radius: 5px; 
} 

Debo obtener un radio de borde de 5px.

Pero ni mozilla ni webkit implementan esto. Sin embargo, implementan lo mismo, con los mismos parámetros, con un nombre diferente (-moz-border-radius y -webkit-border-radius, respectivamente).

Con el fin de satisfacer el mayor número de navegadores posible, se termina con esto:

div.rounded-corners { 
    border-radius: 5px; 
    -moz-border-radius: 5px; 
    -webkit-border-radius: 5px; 
} 

puedo ver dos desventajas obvias:

  • código Copiar y pegar. Esto tiene riesgos obvios que no discutiré aquí.
  • El W3C CSS validator no validará estas reglas.

Al mismo tiempo, no veo ninguna ventaja obvia.

Creo que las personas que están detrás de mozilla y webkit son más inteligentes que yo. Debe haber algunas buenas razones para tener las cosas estructuradas de esta manera. Es solo que no puedo verlos.

Por lo tanto, debo preguntarle a la gente: ¿por qué es esto?

Respuesta

6

El -moz-border-radius describe la semántica de Mozilla. Si CSS3 se publica con una semántica diferente, entonces Mozilla siempre puede implementar border-radius utilizando esa semántica y no romperán el sitio web de nadie.

Mientras tanto, si acaban de utilizar border-radius directamente, entonces si CSS3 se publica con una semántica diferente, Mozilla tiene que elegir entre romper sitios de personas, o siempre apoyando CSS no estándar.

+0

hmm. No estoy seguro de seguir el razonamiento aquí. Supongamos que el estándar de radio de borde cambia. Y firefox lo crea con la extensión. ¿No rompería eso los sitios que tienen tanto el radio del borde como el radio del límite del borde? ¿O harán que el -moz-border-radius con la implementación anterior "anule" el estándar? – kikito

+0

Normalmente, la versión con prefijo anterior se mantiene como un alias por un tiempo. p.ej. si configura '-moz-opacity' establecerá el estilo' opacity', y viceversa. Donde hay diferencias de sintaxis, convertirá entre los formatos. La sintaxis de '-moz-border-radius' es actualmente bastante diferente de la sintaxis de' -webkit-border-radius' ya que ambos implementaron la característica por separado; solo el caso simple es el mismo en ambos. Esto habría causado problemas de incompatibilidad si no hubieran usado nombres de propiedades prefijadas. – bobince

+0

entendido. ¡Gracias! – kikito

3

Lo hacen porque no es totalmente compatible. Es muy parecido a tener ese código en beta. Eventualmente agregarán soporte para border-radius.

Es más obvio cuando se observan los gradientes lineales.

background-image: -moz-linear-gradient(100% 100% 90deg, #2F2727, #1a82f7); 
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#1a82f7), to(#2F2727)); 

Observe que no usan la misma sintaxis. Cuando finalmente acuerden un estándar, ambos pueden agregar soporte para gradiente lineal y usar la sintaxis correcta.

2

Simple. Las variantes propietarias -moz y -webkit estaban allí antes deborder-radius se escribieron en la recomendación CSS3. Tenían sus propias implementaciones, pero no sabían si éstas coincidirían con la recomendación final del W3C. Por lo tanto, tampoco usaron el nombre ahora oficial en ese punto, para no romper las cosas más adelante.

2

Tenga en cuenta que as of 2010-09-14, el prefijo -moz se ha eliminado de border-radius. Esto significa que Firefox 4 admitirá border-radius sin prefijo.

+0

¡Gracias por compartir esto! – kikito

Cuestiones relacionadas