Css смещение элемента. Позиционирование
Выше мы говорили о том, что позиционировать элементы страницы можно путем использования таблиц. Но это же можно делать и с помощью стилей. Среди параметров стиля имеются специальные свойства для позиционирования:
- left - для задания расстояния в пикселах от левого края окна (х-координата);
- top - для задания расстояния в пикселах от верхнего края окна (у-координата);
- z-index - для указания порядка, в котором элементы будут перекрывать друг друга; это новое измерение, элементы с большим z-индексом будут появляться над элементами с меньшим z-индексом.
Конечно, при использовании этих трех свойств не создается эффект трехмерного
пространства, но это уже нечто большее, чем плоская поверхность. В этом
случае говорят о 2,5-мерном пространстве.
Кроме свойств-координат, нам понадобится свойство роsition
,
которое в сочетании со свойствами left
и
top
позволяет устанавливать элементы в определенные
позиции окна. Свойство position может принимать три значения:
- absolute - заданные свойства left и top поставят элемент в точку с координатами х и у относительно верхнего левого угла контейнера (объекта, содержащего данный элемент). Если они определены для элемента вне контейнера, то началом отсчета координат будет верхний левый угол страницы. Заметим, что положение элемента не зависит от положения его тега внутри HTML-документа;
- relative - элемент будет установлен в соответствии с тем, в каком месте исходного текста он находится; это значение установлено по умолчанию. Например, если элемент находится в трех строках от начала его выделения в тексте документа, то по умолчанию считается, что свойство позиционирования имеет значение relative , а свойства координат left и top - нулевые значения. Ненулевые значения свойств left и top задают сдвиг элемента относительно исходного положения;
- static - элемент будет поставлен в некоторое положение относительно фона и не будет перемещаться при прокручивании страницы.
Следующий пример показывает использование свойства z-index . Хотя в тексте программы картинка описана выше остальных элементов, за счет присвоения ей индекса с большим номером происходит перемещение ее поверх первого текста. Таким образом, использование свойства z-index освобождает от пут естественного порядка упоминания элементов в тексте HTML-программы.
Рис. 666. Использование
свойства i-index позволяет изменить естественный порядок следования элементов
в тексте HTML-документа
При позиционировании элементов может оказаться, что размеры элемента превосходят
размеры фрагмента (отводимой области, заданной в нашем примере тегом В следующем примере используется свойство overflow
для создания механизма
прокрутки первого текста. Рис. 667. Механизм прокрутки текста,
реализованный с помощью свойства overflow
Конечно, неказистые страницы с предыдущих рисунков создавались лишь
с целью продемонстрировать возможности языка по позиционированию элементов.
Вы сами решите, какие средства и для чего будете использовать на своей
Web-странице. С помощью свойств позиционирования нетрудно создавать для надписей эффект
трехмерности. Идея состоит в том, чтобы вывести одинаковые по содержанию
тексты слегка сдвинутыми друг относительно друга и окрашенными в различные
цвета. Попробуйте в качестве упражнения написать соответствующую программу.
На рисунке показано примерно то, что должно получиться. Ниже рисунка приведен
один из возможных вариантов программы, которая создает «трехмерную» надпись. Рис. 668. Пример создания трехмерного
текста с помощью CSS
Объемный текст"Р> Oбъeмный
текстР> Объемный текст Р> Обратите внимание, что этот способ создания эффектных заголовков значительно
экономнее, чем использование графических файлов с аналогичным содержанием. Необычное расположение! CSS свойства позиционирования позволяют вам позиционировать элемент. Также они могут расположить элемент позади
другого, и указать, что должно произойти, когда содержимое элемента слишком большое. Элементы могут располагаться, используя свойства top (сверху), bottom (снизу), left (слева), и right (справа).
Однако, эти свойства не будут работать, пока не установлено свойство position.
Также они работают по-разному, в зависимости от метода позиционирования. Существует четыре различных метода позиционирования. HTML элементы позиционируются статически по умолчанию. Статически позиционированный элемент
всегда располагается в соответствии со стандартным потоком элементов на странице. Статически расположенные элементы не подвергаются воздействию свойств top, bottom, left, и
right. Элемент с фиксированным положением позиционирован относительно окна браузера. Он не будет двигаться, даже если окно прокручивается: Замечание:
IE7 и IE8 поддерживают значение fixed только если указан тип документа!DOCTYPE. Фиксированно расположенные элементы удаляются из нормального потока. Документ и другие элементы
ведут себя так, будто фиксированно расположенный элемент не существует. Зафиксированные элементы могут перекрывать другие элементы. Относительно позиционированный элемент располагается относительно по отношению к его обычной позиции. Относительно позиционированные элементы часто используются в качестве контейнеров для абсолютно позиционированных
элементов. Абсолютно позиционированный элемент располагается относительно первого родительского элемента, который
позиционирован иначе, чем статически.
Если такого элемента не найдено, за родительский элемент принимается : Абсолютно позиционированные элементы удаляются из стандартного потока элементов.
Документ и другие элементы ведут себя так, будто абсолютно позиционированный элемент не существует. Абсолютно расположенные элементы могут перекрывать другие элементы. Когда элементы расположены вне стандартного потока, они могут перекрывать другие элементы. Свойство z-index указывает вертикальный порядок элемента (какой элемент должен быть помещен спереди, или сзади других элементов). Элемент может иметь положительный или отрицательный вертикальный порядок: Элемент с большим вертикальным порядком всегда находится впереди элементы с меньшим вертикальным порядком. Замечание:
Если два позиционированных элементы перекрываются и не указан вертикальный порядок,
элемент расположенный позже в HTML коде будет показан сверху. Установка формы элемента Как показать переполненный элемент, используя прокрутку Как заставить браузер автоматически управлять переполнением Изменение курсора Число в столбце "CSS" указывает, в какой версии CSS
определено свойство (CSS1 или CSS2). Как вы вероятно уже знаете верстать сайт можно, используя таблицы, в этом случае страница разбивается на ячейки. А можно для этих целей использовать блоки, когда страница сайта состоит из отдельных элементов. Наверное, не ошибусь, если скажу, что при этом серьезной проблемой для многих начинающих веб-мастеров является задача расположить блоки в заданном месте веб-страницы. Одной из главных трудностей при верстке с помощью блоков является позиционирование (выравнивание) этих самых блоков. Думаю, многие из вас слышали о таком понятии, как слой (layer). И, как правило, под слоем понимается блок, заданный тегом В HTML не существует слоев. Это просто метафора. Когда речь идет о слоях, то под ними понимается некий html контейнер (элемент), который может быть помещен в определенном месте веб-страницы. Вторым заблуждением является отнесение к слоям только блока, заданного тегом ), списки ( Как уже говорилось выше, задать местоположение можно любому HTML элементу. Для этого нет нужды всегда использовать тег Смысл применения блока, заданного тегом Существует четыре основных типа позиционирования: 1. Статическое (Static) Используется как расположение «по умолчанию». В этом случае браузер просматривает html код, разделяет его на элементы и составляет из них страницу. Получается последовательность из ряда элементов. Выводятся они в том порядке, в котором указаны в html коде. Применение параметров left, top, right и bottom
не приводит к каким-либо результатам. Необходимо помнить о статическом позиционировании, когда используется относительное расположение. С помощью абсолютного позиционирование задаются координаты левого верхнего угла блока. При этом отсчет координат происходит относительно расположения родительского элемента. Если родительским элементом является окно браузера, тогда выравнивание блока происходит относительно него. Если существует другой элемент, внутри которого расположен блок, тогда выравнивание происходит уже относительно этого элемента. Уже из названия становится ясно, что в данном случае элемент фиксируется. Он располагается в определенном месте веб-страницы и никуда не сдвигается. Подобное выравнивание часто применяется по отношению к всплывающим окнам, когда они фиксируются по центру и не смещаются при прокрутке страницы. С этим видом позиционирования могут быть сложности. Его название не совсем удачное. Многие путают относительное и абсолютное позиционирование элементов. Может показаться, что выравнивание происходит относительно родительского элемента. А в случае с абсолютным позиционированием - относительно окна браузера. Но это не так. Нужно уяснить, что расположение элемента в этом случае происходит относительно его же места в статическом положении. Это то, о чем упоминалось выше. Проще говоря, вы указываете браузеру, что необходимо передвинуть элемент на столько-то пикселей, относительно того места, где он расположен по умолчанию. Существует еще один сложный момент. Что произойдет, если родительский элемент имеет относительное позиционирование, а вложенный в него элемент абсолютное? В этом случае отсчет координат дочернего элемента будет производиться относительно родительского элемента, с учетом его смещения, если оно имеет место. Итак, имеется свойство position
. Это свойство может принимать 4 значения Static, Absolute, Fixed и Relative
. По умолчанию идет Static
. Когда вы указываете координаты для элемента, необходимо также сообщить браузеру, каким образом он должен эти координаты отсчитывать. Надо дать ему отправную точку. Не забывайте, что при отсутствии свойства position
координаты учитываться не будут, блок останется на прежнем месте, в своем статическом положении. Для этих целей применяются четыре вида свойств: 1. Top Top
- положительное значение (например, 20px) смещает блок на 20 пикселей вниз. Отрицательное значение (-20px) смещает элемент на 20 пикселей верх. Все это происходит относительно левого верхнего угла. Left
- смещение влево или вправо, в зависимости от знака. Относительно левого верхнего угла. Right
- смещение вправо и влево, смотря какой знак. Относительно правого верхнего угла. Bottom
- смещение вверх или вниз, зависит от знака. Происходит относительно левого нижнего угла. Вот код HTML:
А это CSS:
#1 { #11 { #2 { Потренируйтесь. Пока писал и сам разобрался . Представьте себе, что веб-разработчику совсем не нужно думать о том, как будет выглядеть визуально готовая страница. Он просто пишет код, элементы сами выстраиваются на странице, сверху вниз (блочные) и слева направо (строчные). Чем выше по документу написан код, тем выше он будет отображаться на странице. Вообщем-то, мы увидим естественное поведение элементов, а порядок их отображения на странице – потоком документа. Но нас совсем не устраивает такой порядок, мы хотим логотип разместить в левом верхнем углу, а кнопку чуть правее. Нам нужен полный контроль над всеми элементами, мы решаем, где и что будет находиться. А для этого нужен инструмент (свойство), меняющее обычное поведение элементов в потоке. Что же это за свойство? В CSS
стилях это называется позиционированием (position)
, которое может быть обычным (static)
, относительным (relative)
и абсолютным (absolute)
. При относительном позиционировании
, блок перемещается относительно своего исходного положения. Однако прописав блоку: Position: relative;
ничего не произойдет, он останется на месте. А перемещает блок система координат (top, bottom, left, right)
, как с положительными, так и отрицательными значениями. Внутри желтого блока с классом block-yellow
находится красный блок с классом block-relative
. В обычном потоке, красный блок перекрывает желтый, так как он в коде прописан последним.
Нам надо сдвинуть красный блок вниз на 10 пикселей. Сделать это можно, только насильственно поменяв позицию красного блока. Мы так и пишем top: 10px
, но надо указать, от чего отсчитывать эти 10 пикселей? Прописав position: relative
, мы ясно даем понять, что отсчитывать относительно его текущего положения. Block-yellow { Block-relative { На картинке мы видим, как красный блок сдвинулся вниз, на 10 пикселей вниз, от своего первоначального положения. Если убрать из кода position: relative
, то блок останется на месте. А если вместо relative
, написать absolute
, то по умолчанию отсчет этих 10 пикселей будет вестись от края окна браузера и в итоге наш блок наоборот поднимется вверх, подтягиваясь к нижней кромке браузера. А это в наши планы не входило. На картинке блок позиционирован абсолютно
, это когда отсчет системы координат ведется от края браузера, заменив всего одно слово, мы поменяли положение блока. Position: absolute;
Есть одна особенность. Абсолютное позиционирование
оказывает влияние и на строчные элементы. Если строчному элементу задать position: absolute
, то он станет вести себя как блочный. Это аналог свойству - display: block
. Это ещё не всё, "абсолютный" элемент, находящийся внутри "относительного" родителя, меняет свою точку отсчета координат и начинает позиционироваться от родителя.
Блок с классом block-absolute
находиться внутри родителя block-yellow
. Block-yellow { Поскольку желтый блок имеет относительное позиционирование
, то красный блок с абсолютным позиционированием
, сдвигается относительно красного на заданные пиксели. Block-absolute { При прокручивании страницы блок с position: fixed
, будет оставаться на месте, обычно такой метод применяют для закрепления навигационной панели. Разруливает порядок перекрытия "абсолютных" блоков. Нам надо, чтобы красный блок был сверху желтого, тогда мы указываем z-index:
2 для красного и z-index:
1 для желтого.
Block-red { Block-yelow { Вы все еще не понимаете как работает абсолютное позиционирование в 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 элемента имеют позиционирование по умолчанию. На данный момент верстка выглядит следующим образом: Чтобы спозиционировать себя, элемент должен знать две вещи: Если определить position: absolute для box-4 , этот элемент покинет нормальный поток документа . Но сейчас он остается на своем месте, так как координаты смещения не заданы. Если в CSS ширина элемента не определена, она будет равна ширине его содержимого (плюс паддинги и рамка). Теперь добавим свойства top: 0 и left: 0 . Элемент должен определить, какой родительский контейнер станет точкой отсчета для этих координат. Ей становится ближайший элемент с нестатической позицией (чаще всего position: relative). box-4 начинает поочередно опрашивать своих предков. Ни box-3 , ни box-2 , ни box-1 не подходят, так как имеют позиционирование в CSS по умолчанию (unset). Если позиционированный предок не нашелся, элемент размещается относительно тела документа (body): Если установить position: relative для элемента box-1 , точкой отсчета станет он: Абсолютно позиционированный элемент располагается относительно ближайшего позиционированного предка. Как только точка отсчета нашлась, все, что выше нее в DOM-дереве, перестает иметь значение. Если установить position: relative также для box-2 , то box-4 будет позиционироваться относительно него, ведь этот предок ближе. Аналогично и для контейнера box-3:
<НЕАD>
nepBbiu позиционированный текстН1>
Н1>
<НЕАD><ТIТLЕ>ПозиционированиеТIТLЕ>НЕАD>
riepBbiM позиционированный текст
Н1>
Второй позиционированный текстН1>
height:100;margin: top: 10">
Решите, какой элемент отображать спереди!
Элементы могут перекрываться!
Позиционирование
Статическое Позиционирование
Фиксированное Позиционирование
Относительное Позиционирование
Абсолютное Позиционирование
Перекрытие Элементов
Еще примеры
Этот пример демонстрирует как задать форму элемента. Элемент обрезается по этой форме, а затем отображается.
Этот пример демонстрирует как установить свойство overflow, чтобы создать полосу прокрутки, когда содержимое
элемента слишком большое, чтобы уместиться в указанной области.
Этот пример демонстрирует как заставить браузер автоматически управлять переполнением.
Этот пример демонстрирует как изменить курсор.Все CSS Свойства Позиционирования
Свойство
Описание
Значения
CSS
Немного о слоях (layers)
) и другие элементы.
А теперь о
Позиционирование элементов.
2. Абсолютное (Absolute)
3. Фиксированное (Fixed)
4. Относительное (Relative
)Статическое (Static)
Абсолютное (Absolute)
Фиксированное (Fixed)
Относительное (Relative)
Подведем итог.
А теперь посмотрим, каким образом задаются координаты.
2. Left
3. Right
4. Bottom
position:relative;
top:100px;
left:100px;
width:500px;
height:500px;
background-color:#CCCCCC;
}
background-color:#003399;
position:absolute;
bottom: -30px;
right: -50px;
width:100px;
height:100px;
}
background-color:#990066;
width:200px;
height:300px
}Относительное позиционирование в CSS
Как это работает?
background-color: #ffe70f;
}
position: relative;
top: 10px;
background-color: #ed5b77;
}
Абсолютное позиционирование в CSS
position: relative
position: absolute;
position: relative;
padding: 10px;
background-color: #ffe70f;
}
position: absolute;
bottom: 10px;
left: 10px;
background-color: #ed5b77;
}
Фиксированное позиционирование
z-index
position: relative;
z-index: 2;
background-color: #ffe70f;
}
position: absolute;
top: 20px;
z-index: 1;
background-color: #ed5b77;
}
Введение в позиционирование
Когда вы устанавливаете position: absolute , на первый план выходит не сам элемент, а его родительский контейнер, ведь относительно него и осуществляется позиционирование в CSS. Сложность в том, что это не всегда непосредственный родитель элемента.
.box-4 без позиционирования
Относительно чего позиционируем?
.box-4 с абсолютным позиционированием без смещения
.box-4 с абсолютным позиционированием. Родительские элементы без позиционирования
.box-4 с абсолютным позиционированием. .box-1 с относительным позиционированием
.box-4 с абсолютным позиционированием. .box-2 с относительным позиционированием