Разветвление это основаны на spec для незамещаемых элементов (A DIV не является заменяемым элементом):
Если все три «влево», " width 'и ' right 'are' auto ': сначала установите ' auto 'для' margin-left 'и ' margin-right 'to 0. Тогда, если свойство ' direction 'элемента установление статического положения , содержащий блок, 'ltr' set 'left' к статическому положению и применить правило номер три ниже; в противном случае установите 'right' в статическую позицию и примените правило №1 ниже.
(так как все 3 свойства не автоматически, сформулированное условие не встретил)
Если ни один из этих трех не «Авто»: Если как «запас левый» и " маржа правого» является„авто“, уравнение решается дополнительное ограничение, что два поля получить одинаковые значения, если это бы сделать их отрицательными, в котором случая, когда направление вмещающего блока является„л“ ('rtl'), set «margin-left» («margin-right») до нуля и решить для «margin-right» («margin-left»). Если один из «margin-left» или «margin-right» равен «auto», решите уравнение для этого значения . Если значения с избыточным ограничением, игнорируйте значение для «влево» (в случае, если свойство «direction» содержит блок 'rtl') или 'right' (в случае, если 'direction' is 'ltr ') и решить эту ценность.
(с шириной авто, вышеуказанное условие не встретило)
В противном случае, установите 'Auto' значение 'маржи налево' и 'Правое поле' 0, и выберите один из следующих правил: .
(вышеуказанное условие выполнено )
И так мы остались с ними 6:
'левый' и 'ширина' являются 'авто' и «вправо 'не' auto ', тогда ширина сжимается до упора. Затем разрешите для «left»
«left» и «right» are 'auto' и 'width' не 'auto', тогда если свойство 'direction' элемента, устанавливающего блок, содержащий статическую позицию, 'ltr' установите 'left' в статическую позицию, иначе установите «right» в статическую позицию. Затем решите для «left» (если «direction is« rtl ») или« right »(если« direction »is 'ltr').
«ширина» и «право» являются «авто» и «слева» не являются «авто», а ширина сжимается до упора. Затем решить для «права»
«левый» есть «авто», «ширина» и «право» не «Авто», а затем решить для «левых»
«ширина» является «авто ',' left 'и' right 'не являются «авто», затем решаются для «width»
«right» is' auto ',' left 'и' width 'не являются' auto ', а затем разрешают для «права»
На основании вышеизложенного ширина в этом элементе является автоматической поэтому, если вы укажете левый и правый, он решает для ширины, поэтому он должен быть действительным.
Так что, хотя он полностью соответствует спецификации CSS2.1/CSS3, он не работает в IE6. Он работает в IE7, IE8, Firefox 3 и Chrome.
В современных браузерах это нормально. И наоборот, он не работает в * некоторых * (и какие из них, вероятно, является ответом на этот вопрос) более старыми браузерами. – thirtydot
Какой аккуратный трюк. – Stephen
Он не использовался широко, поскольку старые версии IE не могли этого сделать. Это изменилось с тех пор, как минимум IE8. Не стесняйтесь использовать его. – DanMan