1. Четыре значения position: static, relative, absolute, fixed.
Абсолютное позиционирование: absolute и fixed вместе называются абсолютным позиционированием
Относительное позиционирование: relative
Значение по умолчанию: static
2. Разница между относительным и абсолютным позиционированием
Пример:
HTML-код:
Код CSS:
Исходный эффект:
1. relative: смещается относительно исходного положения. После установки этого свойства элемент по-прежнему остаётся в потоке документа и не влияет на расположение других элементов.
Установите relative для второго блока:
Элемент смещается относительно своего исходного положения, ширина и высота остаются неизменными, и он растягивает контейнер.
2. absolute: элемент выйдет из потока документа. Если задано смещение, это повлияет на позиционирование других элементов
Установите absolute только для пятого блока:
Объяснение: когда у элемента не задана ширина, его ширина определяется содержимым внутри элемента, и эффект такой же, как при использовании метода float.
Анализ принципа позиционирования absolute:
1. Если у родительского элемента не задано relative- или absolute-позиционирование, элемент позиционируется относительно корневого элемента (т. е. элемента html) (это означает, что родительский элемент его не задал).
Теперь задайте для box5 значение смещения, чтобы проверить:
2. Если у родительского элемента задано relative- или absolute-позиционирование, элемент будет позиционироваться относительно ближайшего родительского элемента, у которого задано relative- или absolute-позиционирование (точнее, относительно ближайшего родительского элемента, который не является static, потому что по умолчанию элемент имеет static).
Дополнение: некоторые люди в интернете объясняют, что элемент будет позиционироваться относительно первого родительского элемента, который не является static. Я считаю, что это может легко вызвать недоразумение. Выше приведено моё собственное определение.
Теперь задайте элементу body absolute-позиционирование (элемент body установлен в absolute, ширина всего контейнера определяется самым длинным div, поэтому ширина становится меньше):
В этот момент box5 позиционируется относительно элемента body
Я объединил два изображения выше — то, которое позиционировано относительно элемента html, и то, которое позиционировано относительно body. Из сравнения видно, что на нижнем изображении box5, позиционированный относительно body, находится дальше от текста box1. Следовательно, когда ни у одного родительского элемента не задано relative- или absolute-позиционирование, элемент с заданным absolute будет позиционироваться относительно корневого элемента html.

Код CSS:
Теперь снова проверим это утверждение:Когда у родительского элемента задано относительное или абсолютное позиционирование, элемент будет позиционироваться относительно ближайшего родительского элемента, у которого задано относительное или абсолютное позиционирование
Теперь обернём коробки в три родительских контейнера следующим образом:
HTML-код:
CSS-стили трёх родительских контейнеров выглядят следующим образом:
Текущий вид. Теперь box5 позиционируется не относительно первого элемента, который не является static, как было сказано (согласно этому утверждению, мой box5 теперь должен быть смещён относительно самого внешнего контейнера 1), а относительно ближайшего родительского элемента, у которого задано относительное или абсолютное позиционирование:
Теперь закомментируем position у второго контейнера и третьего контейнера (без position установка значений top, left, bottom, right не даёт эффекта), результат следующий:
Теперь единственный внешний родительский элемент box5, у которого задано relative или absolute, — это самый внешний контейнер 1, поэтому box5 теперь позиционируется относительно самого внешнего контейнера 1. (Очевидно, box5 сместился)
Теперь закомментируем только position у третьего контейнера
Принцип тот же. Теперь он позиционируется относительно второго контейнера (top: 50px, ближайшего родительского элемента, у которого задано относительное или абсолютное позиционирование):
У обоих контейнеров выше — второго и третьего — задано относительное позиционирование. Теперь изменим его на абсолютное позиционирование:
Код CSS:
Принцип тот же, что и при задании для второго и третьего контейнеров relative, за исключением того, что после задания им absolute третий контейнер покидает документ вместе со своим содержимым, поэтому он не растягивает ширину двух внешних контейнеров
Текущий эффект:
Добавим ещё один контейнер снаружи, чтобы проверить эффект того, что первый и второй слои выше не были растянуты
Ширина ограничена шириной родительского контейнера на верхнем слое. Теперь расширим контейнер первого слоя, и второй и третий слои расширятся соответственно, эффект следующий:
Но если внутри контейнера есть длинный div, контейнер всё равно может быть растянут, эффект следующий:
Дополнение:
После того как для box2 задано абсолютное позиционирование, он выходит из потока документа, box3 перемещается вверх, а левая сторона перекрывается box2.
На основе вышесказанного зададим для box3 absolute. box3 выходит из потока документа (как будто box3 всплыл вверх, плавая над box2), box4 перемещается вверх, box3 перекрывает box2 и часть box4.
Аналогично, если для box4 задать абсолютное позиционирование, он всплывёт вверх и перекроет box3 и box2.
Итог
relative: позиционирование происходит относительно собственного положения элемента(При задании смещения он будет смещаться относительно своего собственного положения). Элемент с установленным relative по-прежнему остаётся в потоке документа, ширина и высота элемента остаются неизменными, а установка смещения не влияет на положение других элементов. Когда внешний контейнер имеет позиционирование relative, без задания ширины его ширина равна всей ширине браузера.
absolute: позиционирование определяется относительно ближайшего родительского элемента, у которого задано absolute или relative позиционирование. Если ни у одного родительского элемента не задано absolute или relative позиционирование, элемент позиционируется относительно корневого элемента, то есть элемента htmlЭлемент с заданным absolute выходит из потока документа. Если у элемента не задана ширина, его ширина определяется содержимым внутри элемента. После выхода исходная позиция становится как бы пустой, и элементы ниже займут это место.
Исходная ссылка: http://www.cnblogs.com/yy95/p/5672440.html