Как в css поднять объект выше. CSS позиционирование блоков

18.02.15 21.5K

Если разрезать любой сайт, созданный на основе html , то перед вами предстанет некая послойная структура. Причем своим внешним видом она будет схожа со слоеным пирогом. Если вам так кажется, то вероятнее всего вы давно не ели. Поэтому сначала утолите свой голод, а затем мы поведаем вам о том, как расположить слой div по центру вашего сайта:

Преимущества верстки с помощью тега

Существует два основных типа построения структуры сайта:

  • Табличная;
  • Блочная.

Табличная верстка была доминирующей еще на заре зарождения интернета. К ее преимуществам можно отнести точность заданного позиционирования. Но, тем не менее, она обладает явными недостатками. Главными из них является объемность кода и низкая скорость загрузки.

При использовании табличной верстки веб-страница не будет отображаться вплоть до полной загрузки. В то время как при использовании блоков div элементы отображаются сразу.

Кроме высокой скорости загрузки блочное построение сайта позволяет в несколько раз уменьшить объем кода html . В том числе и за счет использования классов CSS .

Тем не менее, табличную верстку следует использовать для структуризации отображения данных на странице. Классическим примером ее применения является отображение таблиц.

Блочное построение на основе тегов также называют послойным, а сами блоки слоями. Это связано с тем, что при использовании определенных значений свойств их можно размещать один поверх другого подобно слоям в Photoshop.

Средства позиционирования

В блочной верстке позиционирование слоев лучше осуществлять с помощью средств каскадных таблиц стилей. Основным свойством CSS, отвечающим за расположение , является float.
Синтаксис свойства:
float: left | right | none | inherit ,
Где:

  • left – выравнивание элемента по левому краю экрана. Обтекание остальными элементами происходит справа;
  • right – выравнивание справа, обтекание остальными элементами – слева;
  • none – обтекание не допускается;
  • inherit – наследование значения родительского элемента.

Рассмотрим облегченный пример позиционирования блоков div с помощью этого свойства:

#left { width: 200px; height: 100px; float: left; background: rgb(255,51,102); } #right { width: 200px; height: 100px; float: right; background: rgb(0,255,153); } Левый блок Правый блок


Теперь постараемся с помощью этого же свойства расположить третий div по центру страницы. Но, к сожалению, у float нет значения center . А при задании новому блоку значения выравнивания вправо или влево он сдвигается в указанную сторону. Поэтому остается лишь всем трем блокам задать float: left :
Но и это не является оптимальным вариантом. При уменьшении окна все слои выстраиваются в один ряд по вертикали, а при увеличении размеров – прилипают к левому краю окна. Поэтому нужен более совершенный способ выравнивание div по центру. Центрирование слоев

В следующем примере мы будем использовать слой-контейнер, в котором разместим остальные элементы. Это решает проблему смещения блоков друг относительно друга при изменении размеров окна. Центрирование контейнера посредине осуществляется с помощью задания свойствам margin нулевого значения отступам от верхнего края и auto по бокам (margin: 0 auto ):

#container { width: 600px; margin: 0 auto; } #left { width: 200px; height: 100px; float: left; background: rgb(255,51,102); } #right { width: 200px; height: 100px; float: left; background: rgb(0,255,153); } #center { width: 200px; height: 100px; float: left; background: rgb(255,0,0); } Левый блок Центральный блок Правый блок


Этот же пример показывает, как можно отцентровать div по горизонтали. А если немного отредактировать приведенный выше код, то можно добиться вертикального выравнивания блоков. Для этого нужно лишь изменить длину слоя-контейнера (уменьшить его ). То есть после редактирования его css класс должен выглядеть вот так:

После изменения все блоки выстроятся строго в ряд посредине. И их положение не изменится при любых размерах окна браузера. Вот как выглядит такое центрирование div по центру по вертикали:


В следующем примере для центрирования слоев внутри контейнера мы использовали ряд новых свойств css :

#container { width: 450px; height:150px; margin:0 auto; background-color:#66CCFF; } #left { width: 100px; height: 100px; background: rgb(255,51,102); display: inline-block; vertical-align: middle; margin-left: 35px; } #right { width: 100px; height: 100px; background: rgb(0,255,153); display: inline-block; vertical-align: middle; margin-left: 35px; } #center { width: 100px; height: 100px; background: rgb(255,0,0); display: inline-block; vertical-align: middle; margin-left: 35px; }


Краткое описание свойств css и их значений, которые мы использовали в данном примере для центрирования div внутри div :
  • display: inline-block – выравнивает блочный элемент в строку и обеспечивает его обтекание другим элементом;
  • vertical-align: middle – выравнивает элемент посредине относительно родительского;
  • margin-left – устанавливает отступ слева.
Как из слоя сделать ссылку

Как ни странно звучит, но такое возможно. Иногда div блок как ссылка может понадобиться при верстке различных видов меню. Рассмотрим практический пример реализации слоя-ссылки:

#layer1{ width: 500px; height: 100px; background: rgb(51,255,204); border:groove; } a { display: block; text-align: center; height: 100%; color: rgb(255,0,51); } Ссылка на наш сайт


В данном примере с помощью строки display: block мы задали ссылке значение блочного элемента. А чтобы вся высота блока div стала ссылкой, установили height : 100%. Скрытие и отображение блочных элементов

Блочные элементы предоставляют больше возможностей для расширения функционала интерфейса, чем устаревшая табличная верстка. Часто бывает, что дизайн сайта является уникальным и узнаваемым. Но за такой эксклюзив приходиться платить нехваткой свободного места.

Особенно это касается главной страницы, стоимость размещения рекламы на которой является самой высокой. Поэтому и появляется проблема, куда бы «впихнуть » еще один рекламный баннер. И тут уж выравниванием div по центру страницы никак не отделаешься!

Более рациональным решением является сделать какой-нибудь блок скрывающимся. Вот простой пример такой реализации:

#layer1{ display:block; width: 500px; height: 100px; background: rgb(51,255,204); border:groove; } function show() { if(layer1=="none") { layer1="block"; } else { layer1="none"; } document.getElementById("layer1").style.display=layer1; }

Это волшебная кнопка. Нажатие на нее скроет или отобразит скрывающийся блок.

При помощи CSS-позиционирования вы можете разместить элемент точно в нужном месте страницы. Вместе с поплавками (см. Урок 13) позиционирование даёт вам большие возможности для создания точного и навороченного дизайна.

В этом уроке мы обсудим следующее:

Принципы CSS-позиционирования

Представим окно браузера как систему координат:

Принципы CSS-позиционирования - в том, что вы можете расположить бокс в системе координат где угодно.

Скажем, мы хотим позиционировать заголовок. При использовании боксовой модели (см. Урок 9) заголовок выглядит так:

Если мы хотим расположить его на 100px от верхней границы документа и на 200px слева, мы должны ввести следующий код CSS:

H1 { position:absolute; top: 100px; left: 200px; }

Вот результат:

Как видите, Позиционирование с помощью CSS - очень точная техника при размещении элементов. Это намного проще, чем использовать таблицы, прозрачные изображения или ещё что-нибудь подобное.

Абсолютное позиционирование

Элемент, позиционированный абсолютно, не получает никакого пространства к документе. Это означает, что после позиционирования он не оставляет после себя пустое пространство.

Для абсолютного позиционирования элемента свойство position должно иметь значение absolute . Вы можете использовать значения left , right , top и bottom для размещения бокса.

В качестве примера абсолютного позиционирования мы разместим 4 бокса в углах документа:

#box1 { position:absolute; top: 50px; left: 50px; } #box2 { position:absolute; top: 50px; right: 50px; } #box3 { position:absolute; bottom: 50px; right: 50px; } #box4 { position:absolute; bottom: 50px; left: 50px; }

Относительное позиционирование

Чтобы позиционировать элемент относительно, установите в свойстве position значение relative . Разница между относительным абсолютным позиционированием состоит в том, как обсчитывается позиционирование.

Позиция элемента, размещаемого относительно, обсчитывается относительно его оригинальной позиции в документе . Это означает, что вы смещаете элемент вправо, влево, вверх или вниз. Таким образом, элемент всё ещё занимает в документе пространство после позиционирования.

Как пример относительного позиционирования попробуем разместить три рисунка относительно их оригинального расположения на странице. Обратите внимание, что рисунки оставили после смещения пустое пространство на своих оригинальных позициях в документе.

Как выровнять картинку по правому краю

Длинный абзац с несколькими предложениями. Он содержит текст, характеризующий помеченное флажком свойство, и изображение, которое нужно прижать к краю правой стороны.

Оно вынимает элемент из потока и прижимает к краю левой или правой стороны родителя. Элементы и текст, расположенные в коде после float-элемента, обтекают его с противоположной стороны.

Не наследуется, применяется ко всем элементам. вынимает элемент из потока и располагает поверх остального содержимого. Его можно перемещать относительно границ родителя, у которого значение position отлично от static , с помощью свойств top , right , bottom , left . При direction: ltr; свойство left имеет приоритет над свойством right , кроме случаев, когда свойство left имеет значение auto .

Длинный абзац с несколькими предложениями. Он содержит текст, характеризующий помеченное флажком свойство, и изображение, которое нужно прижать к краю правой стороны. .raz { text-align: right; } Свойство text-align наследуется, применяется к блочным элементам.
Выравнивает все содержащиеся в них строчные элементы и текст по горизонтали. Оно не перемещает сам элемент и не передвигает блоки, не работает, если задано строчному элементу. У него есть несколько значений, в том числе right, позволяющих сдвигать содержимое вправо. .raz img { display: block; /* смещает только блоки */ margin-left: auto; } Свойство margin-left не наследуется, применяется ко всем элементам. У него есть значение auto, которое выравнивает блочный элемент по горизонтали. А именно margin-left: auto; прижимает элемент к правому краю родителя. Это положение может изменяться свойством margin-right..html">При margin-left: auto; и margin-right: auto; элемент размещается по центру ширины предка. .raz img { float: right; } Свойство float не наследуется, применяется ко всем элементам. Оно вынимает элемент из потока и прижимает к краю левой или правой стороны родителя. Элементы и текст, расположенные в коде после float-элемента, обтекают его с противоположной стороны. .raz { position: relative; /* смещает относительно родителя с классом raz */ } .raz img { position: absolute; right: 0; } Свойство position не наследуется, применяется ко всем элементам. position: absolute; вынимает элемент из потока и располагает поверх остального содержимого. Его можно перемещать относительно границ родителя, у которого значение position отлично от static, с помощью свойств top, right, bottom, left. При direction: ltr; свойство left имеет приоритет над свойством right, кроме случаев, когда свойство left имеет значение auto. .raz { display: table; } .raz div { display: table-cell; vertical-align: top; /* */ } Свойство display не наследуется, применяется ко всем элементам..html">тегу table, а table-cell — td. Совет: на данном примере занятно поглядеть как ведёт себя картинка, когда уменьшается размер окна браузера. Как выровнять текст по правому краю

Короткий текст справа

.raz { text-align: right; } Короткий текст справа .raz { margin: 0; border-top: solid 2px; padding: 0; overflow: auto; /* очистить float */ } .raz li { clear: both; } .raz span { float: right; white-space: nowrap; /* */ } Похожие материалы:

  • горизонтальное выравнивание html обновлена
  • выравнивание по ширине html хочу обновить

    Как выровнять блок по правому краю

    .raz div { max-width: 8em; /* блок занимает ширину родителя, max-width её ограничивает */ min-height: 2em; margin-left: auto; margin-right: 0 ; HTML код

    Элемент не влияет ни на высоту, ни на ширину родителя, не вызывает его переполнения.

    .raz { position: relative; padding-right: 8em; /* чтобы элемент не был поверх содержимого родителя */ } .raz div { position: absolute; top: 0 ; /* прикрепить к верху родителя */ right: 0 ; HTML код Текст

    Элемент не влияет на высоту родителя, если не очистить float .

    .raz div { float: right; /* блок занимает ширину содержимого, max-width её ограничивает */ max-width: 8em; min-height: 2em; border: 1px solid orange; background: #fff5d7; } HTML код Текст

    .raz { text-align: right; } .raz div { display: inline-block; /* inline-block занимает ширину содержимого, max-width её ограничивает */ max-width: 8em; min-height: 2em; border: 1px solid orange; text-align: start; /* убрать наследование text-align */ background: #fff5d7; } HTML код

    Как выровнять несколько блоков по правому краю

    .raz div { width: 8em; max-width: 100%; min-height: 2em; border: 1px solid orange; background: #fff5d7; }

    .raz { text-align: right; } .raz div { display: inline-block; /* см. */ width: 8em; max-width: 100%; min-height: 2em; border: 1px solid orange; vertical-align: middle; /* см. */ text-align: start; background: #fff5d7; }

    .raz div { width: 8em; max-width: 100%; min-height: 2em; margin: 0 0 0 auto; /* то же, что margin-left: auto; */ border: 1px solid orange; background: #fff5d7; }

    .raz div { float: right; width: 8em; max-width: 100%; min-height: 2em; border: 1px solid orange; background: #fff5d7; } .raz::after { /* очистить float */ content: ""; display: block; clear: both; } margin: 0 100% 0 -100%; /* можно не добавлять ещё одну обёртку, а в предыдущем стиле указать transform: translate(-100%, 0); */ background: green; } код HTML

    Необычное расположение!

    Решите, какой элемент отображать спереди! Элементы могут перекрываться! Позиционирование

    CSS свойства позиционирования позволяют вам позиционировать элемент. Также они могут расположить элемент позади другого, и указать, что должно произойти, когда содержимое элемента слишком большое.

    Элементы могут располагаться, используя свойства top (сверху), bottom (снизу), left (слева), и right (справа). Однако, эти свойства не будут работать, пока не установлено свойство position. Также они работают по-разному, в зависимости от метода позиционирования.

    Существует четыре различных метода позиционирования.

    Статическое Позиционирование

    HTML элементы позиционируются статически по умолчанию. Статически позиционированный элемент всегда располагается в соответствии со стандартным потоком элементов на странице.

    Статически расположенные элементы не подвергаются воздействию свойств top, bottom, left, и right.

    Фиксированное Позиционирование

    Элемент с фиксированным положением позиционирован относительно окна браузера.

    Он не будет двигаться, даже если окно прокручивается:

    Замечание: IE7 и IE8 поддерживают значение fixed только если указан тип документа!DOCTYPE.

    Фиксированно расположенные элементы удаляются из нормального потока. Документ и другие элементы ведут себя так, будто фиксированно расположенный элемент не существует.

    Зафиксированные элементы могут перекрывать другие элементы.

    Относительное Позиционирование

    Относительно позиционированный элемент располагается относительно по отношению к его обычной позиции.

    Относительно позиционированные элементы часто используются в качестве контейнеров для абсолютно позиционированных элементов.

    Абсолютное Позиционирование

    Абсолютно позиционированный элемент располагается относительно первого родительского элемента, который позиционирован иначе, чем статически. Если такого элемента не найдено, за родительский элемент принимается :

    Абсолютно позиционированные элементы удаляются из стандартного потока элементов. Документ и другие элементы ведут себя так, будто абсолютно позиционированный элемент не существует.

    Абсолютно расположенные элементы могут перекрывать другие элементы.

    Перекрытие Элементов

    Когда элементы расположены вне стандартного потока, они могут перекрывать другие элементы.

    Свойство z-index указывает вертикальный порядок элемента (какой элемент должен быть помещен спереди, или сзади других элементов).

    Элемент может иметь положительный или отрицательный вертикальный порядок:

    Элемент с большим вертикальным порядком всегда находится впереди элементы с меньшим вертикальным порядком.

    Замечание: Если два позиционированных элементы перекрываются и не указан вертикальный порядок, элемент расположенный позже в HTML коде будет показан сверху.

    Еще примеры

    Установка формы элемента
    Этот пример демонстрирует как задать форму элемента. Элемент обрезается по этой форме, а затем отображается.

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

    Как заставить браузер автоматически управлять переполнением
    Этот пример демонстрирует как заставить браузер автоматически управлять переполнением.

    Изменение курсора
    Этот пример демонстрирует как изменить курсор.

    Все CSS Свойства Позиционирования

    Число в столбце "CSS" указывает, в какой версии CSS определено свойство (CSS1 или CSS2).

    Свойство Описание Значения CSS

    Вы все еще не понимаете как работает абсолютное позиционирование в CSS и теряете элементы на экране? Давайте разбираться в этой магии.

    Введение в позиционирование Когда вы устанавливаете position: absolute , на первый план выходит не сам элемент, а его родительский контейнер, ведь относительно него и осуществляется позиционирование в CSS. Сложность в том, что это не всегда непосредственный родитель элемента.

    Рассмотрим код с четырьмя дивами, вложенными друг в друга по принципу матрешки.

    < body >

    < div class = "box-1" >

    < div class = "box-2" >

    < div class = "box-3" >

    < div class = "box-4" > < / div >

    < / div >

    < / div >

    < / div >

    < / body >

    Блоки box-1 , box-2 и box-3 для красоты отцентрированы с помощью свойств margin: auto и свойств flex CSS. Блок box-4 остается в своей дефолтной позиции в потоке документа.

    body { display: flex; } .box-1, .box-2, .box-3 { display: flex; margin: auto; }

    body {

    Display : flex ;

    Box-1,

    Box-2,

    Box-3 {

    Display : flex ;

    Margin : auto ;

    Все 4 элемента имеют позиционирование по умолчанию. На данный момент верстка выглядит следующим образом:


    .box-4 без позиционирования Относительно чего позиционируем?

    Чтобы спозиционировать себя, элемент должен знать две вещи:

    • какой родитель станет точкой отсчета;
    • величину смещения относительно точки отсчета (сверху, снизу, справа или слева).

    Если определить position: absolute для box-4 , этот элемент покинет нормальный поток документа . Но сейчас он остается на своем месте, так как координаты смещения не заданы. Если в CSS ширина элемента не определена, она будет равна ширине его содержимого (плюс паддинги и рамка).


    .box-4 с абсолютным позиционированием без смещения

    Теперь добавим свойства top: 0 и left: 0 . Элемент должен определить, какой родительский контейнер станет точкой отсчета для этих координат. Ей становится ближайший элемент с нестатической позицией (чаще всего position: relative). box-4 начинает поочередно опрашивать своих предков. Ни box-3 , ни box-2 , ни box-1 не подходят, так как имеют позиционирование в CSS по умолчанию (unset).

    Если позиционированный предок не нашелся, элемент размещается относительно тела документа (body):


    .box-4 с абсолютным позиционированием. Родительские элементы без позиционирования

    Если установить position: relative для элемента box-1 , точкой отсчета станет он:


    .box-4 с абсолютным позиционированием. .box-1 с относительным позиционированием

    Абсолютно позиционированный элемент располагается относительно ближайшего позиционированного предка.

    Как только точка отсчета нашлась, все, что выше нее в DOM-дереве, перестает иметь значение.

    Если установить position: relative также для box-2 , то box-4 будет позиционироваться относительно него, ведь этот предок ближе.


    .box-4 с абсолютным позиционированием. .box-2 с относительным позиционированием

    Аналогично и для контейнера box-3: