Выше мы говорили о том, что позиционировать элементы страницы можно путем использования таблиц. Но это же можно делать и с помощью стилей. Среди параметров стиля имеются специальные свойства для позиционирования:
- 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. Сегодня мы рассмотрим основные способы размещения элементов в горизонтальный ряд.
Материал данной статьи призван помочь начинающим веб-дизайнерам в освоении приемов верстки web-страниц. Существует несколько способов расположения структурных элементов в ряд в горизонтальной плоскости. Наиболее полезными, с точки зрения практического применения, являются: Каждый из них имеет свои преимущества, области применения и недостатки. Рассмотрим их по порядку. Все структурные элементы HTML можно условно разделить на: Инлайновые
(встроенные) – типа img, span
и им подобные. У нас нет возможности менять их фон и задавать им произвольные линейные размеры. Блочные
– занимающие всю ширину родительского блока, всегда начинаются с новой строки – p, h, div
. Наглядный пример встроенных и блочных структур приведен ниже: Как уже известно (см. выше), блочный элемент размещается с новой строки вне зависимости от заданной ему ширины (width
). По этому, уменьшая горизонтальный размер div
-а, в рядок блочки не построить. Наиболее популярный (особенно среди начинающих верстальщиков), метод решения это использование свойства float
. CSS свойство float
обрело большую популярность и практическую ценность после перехода от табличного способа верстки к блочному. Float: left (right)
трансформирует блочный элемент в плавающий, выравнивает по левому (правому) краю родительского блока и устанавливает обтекание справа (слева) текстом и другими элементами. Для примера, создадим четыре блока, которые нужно разместить в ряд:
<
html>
<
head>
<
meta charset=
"utf-8"
>
<
link
rel=
"stylesheet"
media=
"all"
type=
"text/css"
href=
"style.css"
/>
head>
<
body>
<
div class
=
"bblock"
>
Строим
div>
<
div class
=
"bblock"
>
горизонтальный
div>
<
div class
=
"bblock"
>
ряд
div>
<
div class
=
"bblock"
>
из дивов
div>
body>
html>
И внешнюю таблицу стилей с следующим содержимым: div {
float:
left;
/*Задаем обтекание*/
line-
height:
120px;
font-
size:
40px;
background:
dodgerblue;
color:
white;
margin-
top:
60px;
width:
320px;
/*Фиксируем ширину блока*/
}
В результате получаем четыре блока, расположенные в горизонтальный ряд и выровненные по левому краю родительского блока: Иногда на практике бывает необходимо выровнять блоки по правому краю родительского элемента. Изменим обтекание блоков в предыдущем примере: float:
right;
Обратите внимание на надписи, расположенные в блоках. На первый взгляд может показаться, что пример отработал криво. Но на самом деле, браузер обработал код правильно: прочитал блоки сверху вниз, и сделал то, что мы от него просили - выровнял по правому краю. Учтите этот момент при использовании свойства float: right
. Для того, чтобы прервать обтекание элементов с какого-то конкретного места, используйте строчку: <
div style=
"clear: both;"
>
div>
В рассмотренном выше примере расстояния между блоками мы задавали при помощи отступа margin-right
. Но что делать, если у вас при верстке страницы возникла задача: разместить блоки в ряд, центрировать их, да и еще чтобы отступы были только между ними, но никак не снаружи? Алгоритм действий следующий. <
div class
=
"wrap"
>
<
div class
=
"bblock"
>
Строим
div>
<
div class
=
"bblock"
>
горизонтальный
div>
<
div class
=
"bblock"
>
ряд
div>
<
div class
=
"bblock"
>
из дивов
div>
div>
Wrap {
width:
1310px;
/*фиксируем ширину обертки*/
margin:
0
auto;
/*центрируем ее*/
background:
darkgray;
height:
120px;
/*Задаем высоту обертки*/
}
.
bblock {
float:
left;
/*Задаем обтекание*/
line-
height:
120px;
/*Высота строки + верт. центрирования текста*/
font-
size:
40px;
background:
dodgerblue;
color:
white;
width:
320px;
/*Фиксируем ширину блока*/
margin-
right:
10px;
text-
align:
center;
/*Центрируем текст по горизонтали*/
}
.
wrap :
last-
child {
margin-
right:
0px;
/*Убираем поле последнего div-а*/
}
В результате получаем такую картину: Ну что же, всех практических ситуаций не рассмотришь, по этому перейдем к общим особенностям. Важно!!!
Как строчные так и блочные элементы имеют свои преимущества и недостатки в контексте каждой конкретной решаемой задачи. А что если объединить их преимущества? Встречайте, гвоздь программы – свойство display: inline-block
. display: inline-block
генерирует блочно-строчный элемент, который по сути является строчным, но сохраняет блочные свойства – позволяет изменять линейные размеры, задавать поля, отступы и т.д. Блочно-строчный элемент имеет следующие свойства: Рассмотрим пример создания простого навигационного меню, содержащего картинку и ссылку. <
div class
=
"nav"
>
<
p><
img src=
"./vaden-pro-logo.png"
alt=
""
/>
p>
<
p class
=
"string"
><
a href=
"#"
>
Ссылка меню 1
длиннее обычного
a>
p>
div>
<
div class
=
"nav"
>
<
p><
img src=
"./vaden-pro-logo.png"
alt=
""
/>
p>
<
p class
=
"string"
><
a href=
"#"
>
Ссылка меню 2
a>
p>
div>
<
div class
=
"nav"
>
<
p><
img src=
"./vaden-pro-logo.png"
alt=
""
/>
p>
<
p class
=
"string"
><
a href=
"#"
>
Ссылка меню 3
a>
p>
div>
<
div class
=
"nav"
>
<
p><
img src=
"./vaden-pro-logo.png"
alt=
""
/>
p>
<
p class
=
"string"
><
a href=
"#"
>
Ссылка меню 4
a>
p>
div>
Nav {
display:
inline-
block;
/*Задаем блочно-строчное отображение*/
width:
180px;
/*задаем ширину блока*/
background:
dodgerblue;
}
.
string {
text-
align:
center;
/*Равняем текст по-горизонтали*/
}
В результате получаем такую менюшку: Как видим, получилось кривовато... Но расстраиваться мы не намерены, по-этому применяем к нашим дивам CSS свойство vertical-align
(подробнее см. ниже): vertical-
align:
top;
Теперь наша навигационная панель выровнялась по верхней линии: Конечно, приведенный пример является примитивным, но я уверен, что на его основе вы сможете создать настоящий шедевр!!! Важно!!!
display:
-
moz-
inline-
stack;
zoom:
1
;
/*задаем hasLayout*/
*
display:
inline;
/*звездочка – хак для IE */
_height:
250px;
/*в IE6 не работает min-height*/
Табличный подход долгое время был стандартом верстки, что в первую очередь объяснялось простотой и интуитивной понятностью разметки. Скорее всего, именно это и послужило причиной появления табличного форматирования в CSS. Свойства display: table
(table-cell
, inline-table
), позволяют выполнять табличное форматирование элементов без применения HTML таблиц. Для горизонтального размещения блоков нам понадобится родительский элемент, имеющий свойство display: table
, и дочерние элементы (ячейки), имеющие свойство display: table-cell
: <
div class
=
"wrap"
>
<
div class
=
"bblock"
>
Строим
div>
<
div class
=
"bblock"
>
табличный
div>
<
div class
=
"bblock"
>
ряд
div>
<
div class
=
"bblock"
>
из дивов
div>
div>
Bblock {
display:
table-
cell;
font-
size:
32px;
width:
200px;
height:
200px;
background:
gold;
text-
align:
center;
vertical-
align:
middle;
}
.
wrap {
display:
table;
border-
spacing:
20px 20px;
background-
color:
darkgray;
}
Важно!!!
Свойство position
имеет следующие значения
Добавить пустой тег перед div с class="primer" - . Элементы на веб-странице занимают определённое пространство. По аналогии с корабликами в игре "Морской бой". Между кораблями должны быть пустые клеточки - margin. Для того, чтобы один элемент поместить поверх другого, нужно задать отрицательное значение для margin. Но тогда содержимое тегов будет накладываться друг на друга. С помощью свойств position и они как бы приподнимаются на уровень 2. В естественном порядке нижние теги в коде показаны над верхними. Благодаря z-index на уровне 2 можно самим определить видимый элемент. position: static используется по умолчанию и отменяет действие relative, absolute и fixed. Значения свойств top, bottom, right, left игнорируются. При отсутствии transform не учитывается и z-index.
Тому блоку, которому мы присвоим position: relative будет отдан приоритет. Содержимое нижнего элемента скрывается.
Для того, чтобы расположить блок Б поверх В, но ниже А, недостаточно присвоить и ему position: relative, поскольку в коде он стоит ниже блока А, а значит будет его перекрывать.
Нужно задать для элемента Б ещё и z-index меньше, чем у блока А.
Вместо margin при относительном позиционировании иногда лучше использовать свойства top, bottom, right, left. Точкой отсчёта для них является исходное положение элемента. При этом блок Б продолжает располагаться так, словно блок А находится на прежнем месте - он оставляет для него пустое пространство. Поэтому можно не колдовать с пустым div ().
Полная аналогия со свойством
Встроенные элементы margin не смещает вниз и вверх (). Только top, bottom
Б
А
Б
Казалось бы, что блок с position: absolute должен находиться выше position: relative, но это нет так, тут действует естественный порядок. А значит z-index позволит между ними выбрать приоритетный элемент.
Блок В игнорирует исходное положение блока Б, поскольку при position: absolute и position: fixed элемент перестаёт влиять на соседние теги ни посредством своей ширины/высоты, ни посредством float: left.
А теперь для закрепления материала пощёлкайте по кнопкам в начале статьи, подумайте почему произошли именно такие изменения. Блочный элемент в HTML –это такой элемент, который занимает по умолчанию всю ширину родительского элемента. Родительским элементом может быть другой блочный элемент, или окно браузера. Блочному элементу с помощью свойств CSS можно задать ширину (width) и высоту (height). Позиционированием блочных элементов называется процесс их расположения внутри окна браузера и относительного друга с помощью CSS свойств position , left , top , right и bottom . Свойство CSS position предназначено для задания одного из четырёх доступных видов позиционирования: static (по умолчанию), absolute (абсолютное), fixed (фиксированное) и relative (относительное). Остальные CSS свойства, а именно left , top , right и bottom предназначены для задания расстояний относительно левого, верхнего, правого и нижнего края родительского элемента. Также блочные элементы при задании определенных свойств могут накладываться друг друга, и данную возможность то же можно использовать на сайтах. Если вы не указали position у блочного элемента или указали static , что одно и то же, то в таком случае блочные элементы располагаются по порядку. Причем следующий блок (например: красный) располагается с новой строки. Так же на данное позиционирование не действует задание расстояний left , top , right и bottom .
При абсолютном позиционировании положения элемента задаётся относительно краёв окна браузера с помощью расстояний, задаваемых свойствами left , top , right и bottom . Если указать расстояния left и right одновременно, и они будут противоречить между собой, то предпочтение отдаётся left , то же самое касается top и bottom , в которых больший приоритет имеет расстояние top . Абсолютное позиционирование применяется очень часто совместно с относительным позиционированием в дизайнерских целях, когда необходимо разместить различные элементы относительного друг друга, так же может применяться для создания выпадающих меню, разметки сайта и т.д.
Фиксированное позиционирование отличается от других видов позиционирования и не перемещается вместе с контентом при скроллинге страницы. Блочные элементы с фиксированным позиционированием привязываются с помощью свойств left , top , right и bottom к краям окна браузера. Фиксированное позиционирование применяется для создания фреймовых интерфейсов (окно браузера делится на несколько областей), фиксированного меню, фиксированного подвала сайта и "постоянных" блоков (перечень ссылок, социальные кнопки и т.д.).
Относительное позиционирование задаётся с помощью задания расстояний left , top , right и bottom относительно его текущего положения.
Однако такое положение блока можно создать и с помощью свойства margin (отступы).
Относительное позиционирование не интересно использовать само по себе, оно в основном применяется вместе с абсолютным позиционированием. Рассмотрим варианты: #wrapper { #wale {
<НЕАD>
nepBbiu позиционированный текстН1>
Н1>
<НЕАD><ТIТLЕ>ПозиционированиеТIТLЕ>НЕАD>
riepBbiM позиционированный текст
Н1>
Второй позиционированный текстН1>
height:100;margin: top: 10">
Из чего выбрать или методы
«Для рывка» или немного теории
Метод «Float»
Метод «Inline-block»
и оборачиваем элемент в дополнительную div-обертку.Метод «Table»
static relative absolute fixed
Только совместно с ним применяются свойства (искл. position: static;)
top bottom right left
Одновременно могут присутствовать
margin transform float (искл. position: absolute; и position: fixed;)Введение
Статического позиционирование - position: static;
Относительное позиционирование - position: relative;
Для встроенных элементов
Абсолютное и фиксированное позиционирование
Итоговая таблица
отличительные свойства
position: static;
position: relative;
transform: translate();
position: absolute;
position: fixed;
наложение
элементы лучше не помещать друг на друга
элементы имеет приоритет видимости над static. Другие значения равнозначны. Видимым будет тот, кто ниже находится в коде, либо обладает большим значением z-index
точка отсчёта top, right, bottom и left
игнорируются
исходное положение элемента
край родительского элемента
край окна браузера
элементы вокруг
учитывают текущее положение элемента
учитывают исходное положение элемента
игнорируют положение элемента
width: 100%; это ширина
элемента (для встроенного)/родительского элемента (для блочного)
родительского элемента с position не в значении static
окна браузера
при прокрутки страницы элемент
перемещается
"прилипает" к заданному месту окна браузера
Позиционирование по умолчанию (static)
Абсолютное позиционирование (absolute)
Фиксированное позиционирование (fixed)
Относительное позиционирование (relative)
В CSS есть свойства, которые отвечают за позиционирование элемента. То есть, ему отступы будут заданы от края документа или относительно родительского элемента? Для этого используется свойство position. Оно имеет несколько значений, о них и напишу.absolute
Данное значение устанавливается для таких элементов, которые должны отображаться так, как будто других на странице и не существует.
Положение зависит от того, есть ли родительские элементы с таким же свойством (position absolute relative fixed):
1.
если нет, то положение будет определяться относительно левого верхнего угла окна
2.
если есть, то будет положение будет определяться относительно нихfixed
Чёткое фиксированное положение элемента. Его координаты будут привязаны к X,Y сторонам браузера. При скролле страницы элементы будут оставаться на своём месте.relative
Данное значение определяет положение элемента уже относительно его исходного места.static
Значение устанавливает элемент так, как он должен располагаться в обычном состояние относительно других элементов.Располагаем элементы
Установив значения absolute relative fixed элементом возможно манипулировать, перемещая его относительно других элементов. Делается это свойствами top, right, bottom, left. Значения данных свойств устанавливают на сколько сместится элемент относительного текущего положения.
position: relative;
bottom: 15px; /* смещен на 15px от низа */
left: 30px; /* смещен на 30px слева */
}
При этом можно указывать и отрицательные значения.
position: relative;
right: -10px; /* смещен на -10px справа (10px слева) */
}
Примеры позиционирования в CSS
Ну и уже по обыкновению смотрим пример проработки) Для наглядности попробуйте изменить размеры окна браузера.
Проблемы