Расположение div на странице. Позиционирование CSS. Для встроенных элементов
Представьте себе, что веб-разработчику совсем не нужно думать о том, как будет выглядеть визуально готовая страница. Он просто пишет код, элементы сами выстраиваются на странице, сверху вниз (блочные) и слева направо (строчные). Чем выше по документу написан код, тем выше он будет отображаться на странице.
Вообщем-то, мы увидим естественное поведение элементов, а порядок их отображения на странице – потоком документа. Но нас совсем не устраивает такой порядок, мы хотим логотип разместить в левом верхнем углу, а кнопку чуть правее. Нам нужен полный контроль над всеми элементами, мы решаем, где и что будет находиться. А для этого нужен инструмент (свойство), меняющее обычное поведение элементов в потоке. Что же это за свойство?
В CSS
стилях это называется позиционированием (position)
, которое может быть обычным (static)
, относительным (relative)
и абсолютным (absolute)
.
Относительное позиционирование в CSS
При относительном позиционировании
, блок перемещается относительно своего исходного положения. Однако прописав блоку:
Position: relative;
ничего не произойдет, он останется на месте. А перемещает блок система координат (top, bottom, left, right)
, как с положительными, так и отрицательными значениями.
Как это работает?
Внутри желтого блока с классом block-yellow
находится красный блок с классом block-relative
. В обычном потоке, красный блок перекрывает желтый, так как он в коде прописан последним.
исходная позиция
относительная позиция- relative
Нам надо сдвинуть красный блок вниз на 10 пикселей. Сделать это можно, только насильственно поменяв позицию красного блока. Мы так и пишем top: 10px
, но надо указать, от чего отсчитывать эти 10 пикселей?
Прописав position: relative
, мы ясно даем понять, что отсчитывать относительно его текущего положения.
На картинке мы видим, как красный блок сдвинулся вниз, на 10 пикселей вниз, от своего первоначального положения.
Если убрать из кода position: relative
, то блок останется на месте. А если вместо relative
, написать absolute
, то по умолчанию отсчет этих 10 пикселей будет вестись от края окна браузера и в итоге наш блок наоборот поднимется вверх, подтягиваясь к нижней кромке браузера. А это в наши планы не входило.
Абсолютное позиционирование в CSS
На картинке блок позиционирован абсолютно
, это когда отсчет системы координат ведется от края браузера, заменив всего одно слово, мы поменяли положение блока.
Position: absolute;
Есть одна особенность. Абсолютное позиционирование
оказывает влияние и на строчные элементы. Если строчному элементу задать position: absolute
, то он станет вести себя как блочный. Это аналог свойству - display: block
.
Это ещё не всё, "абсолютный" элемент, находящийся внутри "относительного" родителя, меняет свою точку отсчета координат и начинает позиционироваться от родителя.
position: relative
position: absolute;
Блок с классом block-absolute
находиться внутри родителя block-yellow
.
Поскольку желтый блок имеет относительное позиционирование
, то красный блок с абсолютным позиционированием
, сдвигается относительно красного на заданные пиксели.
При прокручивании страницы блок с position: fixed
, будет оставаться на месте, обычно такой метод применяют для закрепления навигационной панели.
z-index
Разруливает порядок перекрытия "абсолютных" блоков. Нам надо, чтобы красный блок был сверху желтого, тогда мы указываем z-index:
2 для красного и z-index:
1 для желтого.
Длинный абзац с несколькими предложениями. Он содержит текст, характеризующий помеченное флажком свойство, и изображение, которое нужно прижать к краю правой стороны.
Оно вынимает элемент из потока и прижимает к краю левой или правой стороны родителя. Элементы и текст, расположенные в коде после float-элемента, обтекают его с противоположной стороны.
Не наследуется, применяется ко всем элементам. вынимает элемент из потока и располагает поверх остального содержимого. Его можно перемещать относительно границ родителя, у которого значение position отлично от static , с помощью свойств top , right , bottom , left . При direction: ltr; свойство left имеет приоритет над свойством right , кроме случаев, когда свойство left имеет значение auto .
Длинный абзац с несколькими предложениями. Он содержит текст, характеризующий помеченное флажком свойство, и изображение, которое нужно прижать к краю правой стороны.
Свойство text-align наследуется, применяется к блочным элементам. Выравнивает все содержащиеся в них строчные элементы и текст по горизонтали. Оно не перемещает сам элемент и не передвигает блоки, не работает, если задано строчному элементу. У него есть несколько значений, в том числе right, позволяющих сдвигать содержимое вправо.
Свойство margin-left не наследуется, применяется ко всем элементам. У него есть значение auto, которое выравнивает блочный элемент по горизонтали. А именно margin-left: auto; прижимает элемент к правому краю родителя. Это положение может изменяться свойством margin-right..html">При margin-left: auto; и margin-right: auto; элемент размещается по центру ширины предка.
Свойство float не наследуется, применяется ко всем элементам. Оно вынимает элемент из потока и прижимает к краю левой или правой стороны родителя. Элементы и текст, расположенные в коде после float-элемента, обтекают его с противоположной стороны.
Свойство position не наследуется, применяется ко всем элементам. position: absolute; вынимает элемент из потока и располагает поверх остального содержимого. Его можно перемещать относительно границ родителя, у которого значение position отлично от static, с помощью свойств top, right, bottom, left. При direction: ltr; свойство left имеет приоритет над свойством right, кроме случаев, когда свойство left имеет значение auto.
Свойство display не наследуется, применяется ко всем элементам..html">тегу table, а table-cell — td.
Совет:
на данном примере занятно поглядеть как ведёт себя картинка, когда уменьшается размер окна браузера.
Как выровнять текст по правому краю
Короткий текст справа
Короткий текст справа
Похожие материалы:
горизонтальное выравнивание html обновлена
выравнивание по ширине html хочу обновить
Как выровнять блок по правому краю
HTML код
Элемент не влияет ни на высоту, ни на ширину родителя, не вызывает его переполнения.
HTML код
Текст
Элемент не влияет на высоту родителя, если не очистить float .
HTML код
Текст
HTML код
Как выровнять несколько блоков по правому краю
margin: 0 100% 0 -100%; /* можно не добавлять ещё одну обёртку, а в предыдущем стиле указать transform: translate(-100%, 0); */
background: green;
}
код HTML
До некоторого времени я, как и многие из вас, пользовался двумя способами:
Первый способ основан на свойстве float. Левому блоку задаётся float: left, правому float: right
Второй способ заключается в абсолютном позиционировании правого блока, с параметрами right: 0 либо left: 100%, margin-left: -(ширина блока)
Главный недостаток обоих способов заключается в том, что, если блоки нужно выравнять по нижней границе или по средней линии относительно друг друга, то приходится методом подбора смещать блоки по вертикали, задавая им либо top: anyValue, либо margin-top: anyValue. А у первого способа плюс ко всему есть ещё один, не то чтобы недостаток, но неприятная мелочь. Это необходимость очищать поток с помощью clearFix"a, overflow или дополнительного дива.
Итак способ номер 3. Для начала код:
Собственно HTML
Copy Source | Copy HTML
<
div
class
="wrap">
<
div
class
="left"><
a
href
="#">
Левый блок
a
>
div
><
div
class
="right"><
a
href
="#">
Правый блок
a
>
div
>
div
>
Собственно CSS
Copy Source | Copy HTML
.wrap
{
width
: 500px
;
background
: #555
;
height
: 500px
;
.left
, .right
{
display
: inline
-block
;
//display: inline;
//zoom: 1;
width
: 100%
;
margin-right
: -100%
;
vertical-align
: bottom
;
.right
{
text-align
: right
;
.left a
, .right a
{ display
: inline
-block
; position
: relative
; }
.left a
{ width
: 200px
; height
: 100px
; background
: green
; }
Суть способа заключается в том, чтобы наложить блоки друг на друга посредством margin-right: -100% и содержимое правого блока выровнять по правому краю с помощью text-align: right.
Оба блока (right и left) желательно записывать в одну строку, иначе из-за символа переноса строки правый блок будет чуть-чуть вылезать за границы блока-родителя.
Ссылкам обязательно нужно ставить position: relative, иначе из-за наложения блоков некоторые могут быть некликабельные.
Плюсы способа
Главный плюс в том, что теперь для наших блоков начинает работать vertical-align. И мы легко можем выровнять их и по верхней границе и по нижней и по центру.
Минусы способа
А главный минус заключается в том, что, применяя этот способ, мы должны быть твёрдо уверены, что содержимое блоков не увеличится до такой степени, что они начнут перекрывать друг друга (к слову говоря, способ с флоутами лишён этого недостатка, так как при увеличении содержимого блоков, они будут вставать друг под друга).
P.S.
Я не встречал такого способа в интернете, посему просьба: если кто-то найдёт аналогичную статью опубликованную раньше, сообщите мне пожалуйста.
Upd.
В комментариях моё внимание внимание обратили на способ, использующий text-align: justify. Этот способ тоже хорош, но у него есть два недостатка. Во-первых он требует введения дополнительного элемента, эмулирующего последнюю строку текстового блока, а во-вторых, он не будет работать в IE6-IE7 для блочных элементов.
В языке HTML все элементы можно разделить на блочные и строчные. Блочные элементы обычно представляются как прямоугольные области с некоторым количеством информации. С их помощью выстраивается сетка страницы. Такие элементы занимают все доступное им пространство по ширине, а до и после них обычно присутствует перенос строки. Блокам можно задавать отступы, горизонтальные и вертикальные размеры.
Особенности блочных элементов
К блочным относятся теги, выделяющие большое количество текстовой информации: