В чем разница между методом перевода CSS3 и относительным позиционированием CSS2?

Кажется, что оба они могут заставить элемент двигаться из его текущего положения. Эти два метода взаимозаменяемы?


person chaonextdoor    schedule 04.04.2012    source источник


Ответы (1)


Эти два метода не совсем одно и то же: перевод элемента не требует изменения его top, left, right или bottom свойств CSS, поэтому точно так же offsetTop/offseLeft свойства Javascript не затрагиваются преобразованием CSS. Кроме того, позиция элемента также может быть static (поэтому z-index не требуется)

Если вместо этого вы используете position: relative, вы измените эти свойства для визуального достижения того же эффекта.

Пример скрипта: http://jsfiddle.net/LkLey/

Конечно, если вам приходится иметь дело со старым браузером (типа IE8 или FF2), то необходим выбор относительного позиционирования, иначе я не вижу явного удобства в выборе одного из двух методов (ну, если честно, относительное позиционирование не имеет никакой необходимости из множества префиксов -moz-, -webkit- ... работать везде) так что выбор за вами (и зависит он от раскладки).

person Fabrizio Calderan    schedule 04.04.2012
comment
Извините, я немного запутался. Почему верхние, левые, правые или нижние свойства CSS не меняются? Я имею в виду, что все эти свойства устанавливают соответствующий край элемента на единицу влево/вправо/вверх/вниз до его нормального положения. Поэтому, если вы используете метод перевода для перемещения элемента от его нормального положения, они должны измениться в соответствии с в моем понимании. - person chaonextdoor; 04.04.2012
comment
@chaonextdoor: преобразования работают иначе, чем обычное относительное позиционирование. Например, если у вас есть 3D-преобразование, как следует вычислять смещения элемента? - person BoltClock; 04.04.2012
comment
Похоже, что translate() фактически изменит свойства offsetTop и offsetLeft элемента. Интересно, когда это изменилось... - person BoltClock; 22.01.2015
comment
Какая? В каком браузере вы это видели? - person Fabrizio Calderan; 22.01.2015