La ramificación se esta basa la spec para elementos no reemplazados (un div es un elemento no-sustituido):
Si los tres de 'izquierda', " width ', y ' right 'son' auto ': Primero configure ' auto-valores 'para' margin-left 'y ' margin-right 'a 0. Entonces, si ' dirección 'propiedad del elemento establecer la posición estática que contiene el bloque es 'ltr' establecer 'izquierda' a la posición estática y aplique la regla número tres a continuación; de lo contrario, configure 'a la derecha' en la posición estática y aplique la regla número uno a continuación.
(desde las 3 propiedades no son auto, la condición anterior es no cubierto)
Si ninguno de los tres es 'auto': Si 'izquierda margen' tanto y ' margin-right' son 'auto', se resuelve la ecuación bajo la restricción adicional de que los dos márgenes obtienen valores iguales, a menos que esta haría negativo, en el que caso cuando la dirección de la bloque que contiene es 'ltr' ('rtl'), establecer 'margin-left' ('margin-right') a cero y resuelva para 'margin-right' ('margin-left'). Si uno de 'margin-left' o 'margin-right' es 'auto', resuelva la ecuación para ese valor . Si los valores son excesivamente restringidos, ignore el valor 'izquierda' (en caso de que la propiedad 'dirección' del bloque contenedor sea 'rtl') o 'derecha' (en caso 'dirección' es 'ltr ') y resuelve por ese valor.
(desde anchura es auto, la condición anterior se no se reunió)
De lo contrario, los valores establecidos 'auto' para 'margen izquierdo' y 'margin-right' a 0, y elija una de las siguientes seis reglas que correspondan.
(la condición anterior se cumple )
Y así nos quedamos con estos 6:
'izquierda' y 'width' son 'auto' y 'derecha 'no es' automático ', entonces el ancho es contraíble. Luego resuelva para 'izquierda'
'izquierda' y 'derecha' son 'auto' y 'ancho' no 'automático', luego si la propiedad 'dirección' del elemento que establece el bloque que contiene la posición estática es 'ltr' configura 'left' a la posición estática, de lo contrario, ajuste 'right' a la posición estática. Luego resuelve para 'izquierda' (si 'dirección es' rtl ') o' derecha '(si' dirección 'es' ltr ').
'ancho' y 'derecha' son 'automático' e 'izquierdo' no es 'automático', entonces el ancho es contraíble para ajustar. Luego resuelve por 'derecho'
'izquierda' es 'auto', 'width' y no son 'auto' 'correcto', y luego resolver 'izquierda'
'width' es 'auto ',' izquierda 'y' derecha 'no son' auto ', luego resuelve' ancho '
' derecha 'es' auto ',' izquierda 'y' ancho 'no son' auto ', luego resuelve para "derecha"
En función de lo anterior, el ancho en ese elemento es auto a nd así que si especifica una izquierda y una derecha, resuelve el ancho, por lo que debe ser válido.
Por lo tanto, si bien es completamente válida según la especificación CSS2.1/CSS3, no funciona en IE6. Funciona en IE7, IE8, Firefox 3 y Chrome.
Está bien en los navegadores modernos. Por el contrario, no funciona en * algunos * (y cuál, es probablemente la respuesta a esta pregunta) navegadores más antiguos. – thirtydot
¡Qué buen truco! – Stephen
No se ha utilizado ampliamente ya que las versiones anteriores de IE no podían hacerlo. Eso ha cambiado desde al menos IE8 sin embargo. Sientase libre de usarlo. – DanMan