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


Содержание

CSS: Позиционирование

Позиционирование — это управление местом расположения (позицией) элемента на веб-странице, оно контролируется с помощью CSS свойства position .

Для указания точного места расположения позиционированных элементов, используются CSS свойства: top, right, bottom и left. Они работают со всеми позиционированными элементами, кроме статических.

Элементы могут перекрывать друг друга!

Отображение элемента над остальными!

Свойство position имеет 4 значения: static , fixed , relative и absolute . Каждое из этих значений будет продемонстрировано ниже с примером использования.

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

Поток документа

По умолчанию элементы на веб-странице отображаются в том порядке, в котором они представлены в HTML-документе, т. е. блочные элементы занимают всю доступную для них ширину и укладываются вертикально один под другим. Строчные элементы выстраиваются по горизонтали до тех пор, пока не будет занята вся доступная ширина, после того как вся ширина будет занята, будет сделан перенос строки и всё пойдет по новой. Такой порядок расположения элементов называется нормальным потоком (его также называют потоком документа или общим потоком ).

С помощью свойства float или position можно убрать элемент из нормального потока. Если элемент «выпадает» из нормального потока, то элементы, которые расположены в коде ниже этого элемента будут смещены на его место на веб-странице.

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

Статическим называют позиционирование, заданное по умолчанию для всех элементов на веб-странице. Если к элементу не применять свойство position , то он будет статическим и будет отображаться на веб-странице согласно общему потоку элементов.

При применении CSS свойств top , left , right или bottom к статически позиционированному элементу, они будут игнорироваться.

Если есть необходимость, то можно задать статическое позиционирование в таблице стилей с помощью значения static :

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

Элементы с фиксированным позиционированием располагаются на странице относительно окна браузера. Такие элементы удаляются из общего потока, элементы, следующие в потоке за фиксированным элементом, будут игнорировать его, смещаясь и занимая его место на веб-странице.

Стоит обратить внимание на то, что элементы с фиксированным позиционирование могут перекрывать другие элементы, скрывая их полностью или частично. При прокрутке длинных страниц, они создают эффект неподвижных объектов, оставаясь на одном и том же месте:

CSS позиционирование – шпаргалка для начинающих

CSS position — один из мощнейших инструментов, позволяющий размещать различные элементы в системе координат, что дарит определённую свободу в дизайне, выводя его за пределы обыкновенных решений.

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

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

В HTML каждый элемент представляет собой некий прямоугольник, для которого необходимо указать внешние и внутренние отступы, а также границу, разделяющую их.

Схемы позиционирования определяют, где этот прямоугольник должен находиться и как должен влиять на окружающие его элементы.

В CSS свойство position может принять пять значений:

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

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

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

В том случае, если вы не хотите, чтобы пространство заполнялось другими элементами, вам нужно установить абсолютное позиционирование для элемента, указав свойства left , right , bottom и top . Если не указано ни одно свойство, для пары top-left присваивается значение 0.

Ключевым моментом абсолютного позиционирования является понимание точки отсчёта: такие элементы позиционируются относительно самого близкого родительского элемента с позиционированием, отличным от static . В том случае, если ближайший элемент не существует, позиционирование происходит относительно основного документа.

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

Элементы с относительным позиционированием располагаются относительно собственной позиции (сдвиг на основе своего стандартного месторасположения). При сдвиге изображения на его месте остаётся образ, относительно которого все элементы располагаются и накладываются друг на друга.

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

Для использования этого вида позиционирования, необходимо для свойства position указать значение relative :

  • Данный тип позиционирования не применим к табличным элементам (строки, колонки, ячейки и т. д.);
  • Место, которое элемент занимал до смещения, не заполняется выше- или ниже располагающимися элементами и остаётся пустым.

Для того чтобы позиционирование дочернего элемента выполнялось относительно родительского, для первого необходимо указать свойство position: absolute , а для второго — position: relative :

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

Данная схема позиционирования напоминает схему абсолютного позиционирования, однако имеются небольшие различия:

  • Фиксировано позиционированный элемент всегда игнорирует родительские элементы и располагается относительно окна браузера;
  • При пролистывании страницы элемент не смещается.

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

Z-Index

Веб-страницы являются двухмерными элементами, имея значения ширины и высоты, а свойство z-index добавляет странице глубину. Чем больше значение z-index , тем « выше » располагается элемент на странице, и наоборот, элемент с меньшим значением z-index находится за элементом с более высоким значением.

Таким способом можно добиться некой объёмности страницы.

Позиционирование фона

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

Позиционирование фона страницы осуществляется при помощи свойства background-position , значениями которого могут являться процентные соотношения, числовые значения в разных единицах измерения, определённые ключевые слова.

  • background-position: center left;
  • background-position: bottom right;
  • background-position: 20% 90%;
  • background-position: 40px 40 px.

Процентные значения можно использовать совместно с единицами измерения: при указании одного параметра, второй автоматически принимает значение 50%.

Перечисленные схемы позиционирования определяют влияние элемента на соседние и правила его размещения на веб-странице.

Чаще всего при вёрстке используют свойство float , применяя позиционирование лишь для тех элементов, которые необходимо выделить из общего потока.

АБСОЛЮТНОЕ И ОТНОСИТЕЛЬНОЕ ПОЗИЦИОНИРОВАНИЕ

Читайте также:

  1. Абсолютное оружие
  2. Относительное позиционирование
  3. Позиционирование
  4. Позиционирование в CSS
  5. Позиционирование гостиничного продукта
  6. Товар. Ассортимент. Позиционирование
  7. Эксперимент с гипотезой «относительно-относительное»: субъективная тяжесть

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

Другой тип позиционирования называется относительное позиционирование. При относительном позиционировании положение задаётся по отношению к предыдущей позиции инструмента. Новые координаты вводятся в единицах расстояния и направления относительно последней позиции, а не нуля станка. Другими словами, при относительном позиционировании, текущая позиция является нулевой точкой для следующего перемещения.

Ниже представлен пример использования относительного позиционирования. Обратите внимание, что перемещение по шкале от X 4.25 до X 2.025 является относительным перемещение X–2.225 хотя инструмент при этом остаётся в положительном диапазоне числовой прямой. Таким образом, перемещение задаётся относительно последней позиции инструмента, а не нулевой точки. Знаки «+» и «–» определяют направление перемещения, а не местоположение координаты относительно нуля.

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

G90 — КОМАНДА АБСОЛЮТНОГО ПОЗИЦИОНИРОВАНИЯ

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

Ключом к пониманию абсолютных размеров является то, что они всегда измеряются относительно базового нуля детали. Этот нуль детали (коды G рабочих смещений G54–G59 и G110–G129) задаётся оператором вводом значения смещения относительно исходной позиции станка на дисплее нулевых точек с использованием режима Ручного Перемещения. Также можно переключится на использования другого нуля детали, используя выбор соответствующего G кода рабочего смещения, что используется при обработке нескольких деталей, закреплённых одновременно в разных частях стола станка.

Каждая размерность или точка X-Y называется координатой. Если позиционирование задано как перемещение вправо на 50 мм и вниз на 35 мм (по направлению к Вам) по отношению к нулю детали, то координатой по X будет X50.0, а координатой по Y будет Y–35.0. Станок будет позиционировать инструмент в эту точку безотносительно от его предыдущей позиции.

X50.0 Y–35.0 может быть центром отверстия, конечной точкой дуги или концом линии, которое задаёт значение координаты.

G91 — КОМАНДА ОТНОСИТЕЛЬНОГО ПОЗИЦИОНИРОВАНИЯ

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

Относительные размеры определяют отношение одной позиции по отношению к другой (предыдущей) позиции. Это может быть удобным путём задания перемещения (особенно в фиксированных циклах G81–G89, G73, G74 и G77) в зависимости от чертежа детали.

Когда используется команда относительного позиционирования, каждое измерение или перемещение задаётся как фактический размер перемещения до следующей позиции (конечной точки дуги, центра отверстия или конца линии), и всегда определяется по отношению к текущей позиции.

Когда вы запрограммировали в области действия кода G91 перемещение по оси X значением X50.0, а по оси Y значением Y–35.0 станок произведёт перемещение по осям на заданное расстояние в заданном направлении безотносительно того, какое значение имеет текущая координата.

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

УПРАЖНЕНИЕ НА ПОЗИЦИОНИРОВАНИЕ

Какие значения для координат X и Y для каждого отверстия при программировании в абсолютном G90 позиционировании когда каждое перемещение производится относительно нулевой точки детали X0 Y0.

ТОЧКА 1 = X________ Y________
ТОЧКА 2 = X________ Y________
ТОЧКА 3 = X________ Y________
ТОЧКА 4 = X________ Y________
ТОЧКА 5 = X________ Y________
ТОЧКА 6 = X________ Y________
ТОЧКА 7 = X________ Y________
ТОЧКА 8 = X________ Y________

Какие значения каждого отверстия при ОТНОСИТЕЛЬНОМ G91 позиционировании, когда каждое движение задаётся относительно предыдущей позиции и нулевая точка сдвигается в эту позицию.

ОТ ТОЧКИ 8 ДО ТОЧКИ 9 = X________ Y________
ОТ ТОЧКИ 9 ДО ТОЧКИ 10 = X________ Y________
ОТ ТОЧКИ 10 ДО ТОЧКИ 11 = X________ Y________
ОТ ТОЧКИ 11 ДО ТОЧКИ 12 = X________ Y________
ОТ ТОЧКИ 12 ДО ТОЧКИ 13 = X________ Y________
ОТ ТОЧКИ 13 ДО ТОЧКИ 14 = X________ Y________
ОТ ТОЧКИ 14 ДО ТОЧКИ 15 = X________ Y________
ОТ ТОЧКИ 15 ДО ТОЧКИ 16 = X________ Y________

Дата добавления: 2015-05-26 ; Просмотров: 1197 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

9 Модель визуального форматирования

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

Согласно модели визуального форматирования каждый элемент дерева документа порождает произвольное количество (возможно, равное нулю) блоков в соответствии с моделью представления документа в виде блоков. Размещение этих блоков обуславливается:

  • размерами и типом блока;
  • схемой позиционирования (нормальный поток, перемещаемый объект или абсолютное позиционирование);
  • взаимодействиями между элементами в дереве документа;
  • внешней информацией (например, размерами области просмотра, собственными размерами изображений и т.п.).

Свойства, которые рассматриваются в этой и следующей главах, используются с устройствами, как не осуществляющими разбивки, так и с устройствами, осуществляющими постраничную разбивку документа. При этом в случае последнего типа устройств происходит преобразование значений свойств полей (подробную информацию можно получить в разделе о модели постраничного отображения документа).

Модель визуального форматирования не является исчерпывающим описанием формата вывода документа (например, она не определяет алгоритм задания межсимвольного интервала). Поэтому поведение конформных агентов пользователей, использующих элементы форматирования, которые не рассматриваются в данной спецификации, может быть различным.

9.1.1 Область просмотра

Агенты пользователей, управляющие выводом на устройства с постраничной разбивкой, предоставляют пользователям (окно или другую область экрана), с помощью которой пользователи взаимодействуют с документом. Агенты пользователей могут менять положение документа в случае изменения размера области просмотра (см. начальный контейнер). Если область просмотра меньше, чем начальный контейнер документа, агентам следует использовать механизм прокрутки. На каждую область вывода приходится не больше одной области просмотра, но агенты могут использовать несколько областей вывода (т.е. предоставлять несколько альтернативных вариантов отображения одного и того же документа).

В CSS2 положение и размеры блоков вычисляются относительно краев определенной области прямоугольной формы, называемой . Генерируемые блоки, как правило, являются контейнерами блоков, выступающих в качестве их потомков. В этом случае говорят, что блок «назначает» контейнер своему потомку. Выражение «контейнер блока» обозначает контейнер, в котором находятся рассматриваемый блок, но не контейнер, порожденный этим блоком.

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

Корневой элемент дерева документа порождает блок, который выступает в качестве для последующего вывода.

Ширину начального контейнера можно установить с помощью свойства ‘width’ корневого элемента. Если данному свойству присвоено значение ‘auto’, то агент пользователя использует начальное значение ширины (например, агент использует текущее значение ширины области просмотра).

Высоту начального контейнера можно установить с помощью свойства ‘height’ корневого элемента. Если данному свойству присвоено значение ‘auto’, то высота контейнера увеличится до размеров, позволяющих вмещать содержание документа.

Начальный контейнер нельзя позиционировать или перемещать (т.е. агенты пользователей игнорируют свойства ‘position’ и ‘float’ корневого элемента).

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

В следующих разделах описаны различные типы блоков, которые можно создавать в CSS2. Тип блока частично влияет на его поведение в рамках модели визуального форматирования. Тип блока определяется с помощью свойства ‘display’ , описанного ниже.

К относятся элементы исходного документа, которые визуально форматируются в виде неких структурных единиц текста (например, абзацев). Принадлежность уровню блока определяется значениями свойства ‘display’ : ‘block’, ‘list-item’, ‘compact’ и ‘run-in’ (см. разделы, посвященные компактным и инициальным блокам), а также ‘table’.

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

Некоторые элементы уровня блока порождают дополнительные блоки за пределами главного: элементы ‘list-item’ и элементы с маркерами. Дополнительные блоки размещаются относительно главного блока.

Безымянные структурные блоки

В документе (считается, что для элементов DIV и P установлено значение ‘display: block’) элемент DIV имеет два типа содержимого: принадлежащего строке и принадлежащего блоку. Чтобы упростить процесс форматирования, предполагается, что надпись «Текст» заключена в безымянный структурный блок .

Рисунок, представляющий три типа блоков, один из которых является безымянным, например, верхний.

Другими словами, если структурный блок (подобный сгенерированному для элемента DIV) содержит в себе другой структурный блок (например, сгенерированный для элемента P), то он не должен содержать ничего, кроме структурных блоков. При этом каждый строковый блок вкладывается в безымянный структурный блок.

Такая модель в следующем примере может реализоваться, если использовать правила:

в приведенном ниже HTML-документе:

Элемент BODY содержит отрывок (C1) безымянного текста, после которого следует элемент уровня блока, за которым, в свою очередь, следует другой отрывок (C2) безымянного текста. В результате будут сгенерированы безымянный структурный блок для элемента BODY, который содержит безымянный структурный блок, заключающий в себя отрывок C1, структурный блок для элемента P и другой безымянный структурный блок, заключающий в себя отрывок C2.

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

— это элементы исходного документа, которые не формируют новых структурных единиц текста. Их содержимое выводится в строке (например, выделенные отрывки текста в абзаце или графические объекты, импортированные в текст). Определенные значения свойства ‘display’ делают элемент принадлежащим строке: ‘inline’, ‘inline-table’, ‘compact’ и ‘run-in’ (см. разделы, посвященные компактным и инициальным блокам). Элементы строкового уровня порождают строковые блоки.

Строковые блоки могут использоваться в контексте различных методологий форматирования:

  • в рамках структурного блока строковые блоки используются в контексте строкового форматирования;
  • компактный строковый блок располагается в поле структурного блока;
  • блоки, порожденные маркерами, также располагаются за пределами структурного блока.

Безымянные строковые блоки

В документе типа:

Элемент P порождает структурный блок, который содержит несколько строковых блоков. Блок, содержащий слово «выделенного», является строковым блоком, порожденным строковым элементом EM. Блоки, содержащие слова «Отрывок» и «текста», являются строковыми блоками, порожденными элементом P структурного уровня. Последние называются безымянными строковыми блоками , т.к. не существует элемента строкового уровня, который был бы связан с ними.

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

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

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

ведет себя следующим образом:

  • Если структурный блок (который не перемещается и не является абсолютно позиционируемым) следует за компактным блоком, то последний форматируется как строковый блок, расположенный на одной строке. Его результирующая ширина сравнивается с шириной одного из полей структурного блока. Выбор между левым и правым полем определяется свойством ‘direction’ , указанным для элемента, порождающего контейнер для компактного и следующего за ним блоков. Если ширина строкового блока меньше или равна ширине поля, то он располагается в поле. Об этом говорится ниже.
  • В противном случае компактный блок становится структурным блоком.

Расположение компактного блока на полях осуществляется следующим образом: он находится за пределами (слева или справа) первого строкового блока структурного блока, но при этом влияет на вычисление высоты строкового блока. Свойство ‘vertical-align’ компактного блока определяет его вертикальное положение относительно упомянутого строкового блока. В горизонтальной плоскости компактный блок всегда находится в поле структурного блока.

Элемент, который не может быть размещен на одной строке, не должен заходить на поля следующего блока. Например, элемент ‘compact’ в HTML, который включает элемент BR, всегда будет форматироваться как структурный блок (учитывая основной стиль элемента BR, который вставляет новую строку). Для размещения на полях текста, состоящего из нескольких строк, более всего подходит свойство ‘float’ .

В следующем примере представлен компактный блок.

Данный пример можно отформатировать следующим образом:

Свойство ‘text-align’ может использоваться для выравнивания компактного элемента внутри поля: по левому краю поля (‘left’), по правому краю поля (‘right’) или по центру поля (‘center’). Значение ‘justify’ не используется и интерпретируется как ‘left’ или ‘right’, в зависимости от свойства ‘direction’ элемента уровня блока, в поле которого производилось форматирование компактного элемента (‘left’ если значение направления равно ‘ltr’, ‘right’ если оно равно ‘rtl’.)

Информацию о взаимодействии компактных блоков с генерируемым содержимым можно получить в разделе о генерируемом содержимом.

ведет себя следующим образом:

  • Если структурный блок (который не перемещается и не является абсолютно позиционируемым) следует за инициальным блоком, то последний становится первым строковым блоком структурного блока.
  • В противном случае инициальный блок становится структурным блоком.

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

Данный пример может быть отформатирован следующим образом:

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

Информацию о взаимодействии инициальных блоков с генерируемым содержимым можно найти в разделе о гененерируемом содержимом.

9.2.5 Свойство ‘display’

‘display’

Значение: inline | block | list-item | run-in | compact | marker | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | none | наследуемое
Начальное значение: строковое
Область применения: все элементы
Наследование: нет
Процентное задание: N/A
Устройства: все

Значения этого свойства:

block При этом значении свойства элемент порождает главный структурный блок. inline При этом значении свойства элемент порождает один или несколько строковых блоков. list-item При этом значении свойства элемент (например, LI в HTML) порождает главный структурный блок и строковый блок элемента списка. Информацию о списках и примерах форматирования списков можно найти в разделе о списках. marker При этом значении свойства генерируемое содержимое, располагающееся до или после блока, становится маркером. Данное значение должно использоваться только с псевдоэлементами :before и :after, прикрепленным к элементам структурного уровня. В остальных случаях данное значение интерпретируется как ‘inline’. Дополнительную информацию можно найти в разделе о маркерах. none При этом значении свойства элемент не порождает ни одного блока в структуре форматирования (т.е. элемент никак не влияет на отображение документа). Потомки этого элемента тем более не будут порождать никаких блоков, даже если для их свойства ‘display’ установлено другое значение.

Обратите внимание, что в результате использования значения ‘none’ не создается вообще никакого блока, в том числе и невидимого. В CSS имеются такие механизмы, которые позволяют элементам порождать в структуре форматирования определенные блоки, влияющие на форматирование, но при этом явно не отображаемые. Подробную информацию можно найти в разделе о видимости. run-in и compact Эти значения свойства в зависимости от контекста создают структурный или строковый блок. Применение свойства к инициальному или компактному блоку осуществляется, исходя из его окончательного статуса (является ли он строковым или структурным блоком). Например, свойство ‘white-space’ применимо, только если блок становится структурным. table , inline-table , table-row-group , table-column , table-column-group , table-header-group , table-footer-group , table-row , table-cell и table-caption При этих значениях свойства элемент ведет себя как элемент таблицы (ограничения рассматриваются в главе о таблицах).

Необходимо помнить, что хотя в качестве начального значения свойства ‘display’ используется значение ‘inline’, правила, содержащиеся в таблице стилей, используемой агентом пользователя по умолчанию, могут переназначить его. Подробную информацию можно найти в приложении при рассмотрении примера таблицы стилей для HTML 4.0.

Далее представлено несколько примеров использования свойства ‘display’ :

Конформные агенты пользователей, управляющие отображением HTML-документов, могут игнорировать свойство ‘display’ .

9.3 Схемы позиционирования

В CSS2 блок может размещаться согласно трем :

  1. Нормальный поток. В CSS2 модель нормального потока включает форматирование блокаструктурного уровня, строковое форматированиестроковых блоков, относительное позиционирование структурных или строковых блоков, а также позиционирование компактных и инициальных блоков.
  2. Перемещаемые объекты. Согласно этой модели блок сначала размещается в соответствии с нормальным потоком, а затем изымается из него и перемещаются максимально влево или вправо насколько это возможно. Отображаемое содержимое может располагаться по сторонам перемещаемого элемента.
  3. Абсолютное позиционирование. В модели абсолютного позиционирования блок полностью удаляется из нормального потока (и не влияет на последующие сестринские элементы), а затем ему назначается положение относительно контейнера.

9.3.1 Выбор схемы позиционирования: свойство ‘position’

Свойства ‘position’ и ‘float’ определяют алгоритм позиционирования CSS2, используемый для определения положения блока.

‘position’

Значение: static | relative | absolute | fixed | inherit
Начальное значение: static
Область применения: все элементы, кроме генерируемого содержимого
Наследование: нет
Процентное задание: N/A
Устройства: визуального форматирования

Значения этого свойства:

static Данный блок является обычным блоком, позиционируемым в соответствии с нормальным потоком. Свойства ‘left’ и ‘top’ не применяются. relative Положение блока рассчитывается в соответствии с нормальным потоком (оно называется нормальным положением). Затем блок смещается относительно своего нормального положения. Когда для расположения блока B используется модель относительного позиционирования, тогда положение следующего блока рассчитывается так, как будто блок B не был смещен. absolute Положение блока (возможно и размер) указывается с помощью свойств ‘left’ , ‘right’ , ‘top’ и ‘bottom’ . Они указывают величину смещения относительно контейнера блока. Абсолютно позиционируемые блоки изымаются из нормального потока. Это значит, что они не влияют на размещение последующих сестринских элементов. Следует заметить, что поля абсолютно позиционируемых блоков не перекрываются ни с какими другими полями. fixed Положение блока рассчитывается в соответствии с моделью абсолютного позиционирования, а затем он фиксируется относительно некоторого объекта. При использовании устройств без разбивки блок фиксируется относительно области просмотра (и не перемещается при прокрутке). При использовании устройств с постраничной разбивкой блок фиксируется относительно страницы, даже если она отображается в области просмотра (например, при предварительном просмотре печати). У разработчиков существует возможность сделать определение значения ‘fixed’ аппаратно-зависимым. Например, разработчик может сделать так, чтобы на экране блок всегда отображался в верхней части области просмотра, но не печатной страницы этого бы не происходило. Два объявления могут быть отделены друг от друга с помощью правила @media, как это показано ниже:

Говорят, что элементу была присвоена , если для свойства ‘position’ устанавливается значение, отличное от ‘static’. Позиционированные элементы порождают позиционированные блоки, положение которых регулируется с помощью следующих четырех свойств:

‘top’

Значение: | | auto | наследуемое
Начальное значение: auto
Область применения: позиционируемые элементы
Наследование: нет
Процентное задание: относительно высоты контейнера
Устройства: визуального форматирования

Это свойство задает смещение верхнего сегмента внутренней краевой линии относительно верхнего сегмента краевой линии контейнера блока.

‘right’

Значение: | | auto | наследуемое
Начальное значение: auto
Область применения: позиционируемые элементы
Наследование: нет
Процентное задание: относительно к ширины контейнера
Устройства: визуального форматирования

Это свойство задает смещение правого сегмента внутренней краевой линии влево относительно правого сегмента краевой линии контейнера блока.

‘bottom’

Значение: | | auto | наследуемое
Начальное значение: auto
Область применения: позиционируемые элементы
Наследование: нет
Процентное задание: относительно высоты контейнера
Устройства: визуального форматирования

Это свойство определяет смещение нижнего сегмента внутренней краевой линии вверх относительно нижнего сегмента краевой линии контейнера блока.

‘left’

Значение: | | auto | наследуемое
Начальное значение: auto
Область применения: позиционируемые элементы
Наследование: нет
Процентное задание: относительно ширины контейнера
Устройства: визуального форматирования

Это свойство определяет смещение левого сегмента внутренней краевой линии вправо относительно левого сегмента краевой линии контейнера блока.

Значения этих четырех свойств имеют следующий смысл:

Смещение задается фиксированным значением расстояния от исходной краевой линии. Смещение задается процентным соотношением относительно ширины (для свойств ‘left’ и ‘right’ ) или высоты (для свойств ‘top’ и ‘bottom’ ) контейнера. Если высота контейнера не указана точно (т.е. зависит от высоты содержимого), то процентное соотношение, определяющее значение свойств ‘top’ и ‘bottom’, интерпретируется как значение ‘auto’. auto Действие данного значения зависит от того, какие из свойств, близких по своему содержанию к рассматриваемым, также имеют значение ‘auto’. Подробную информацию можно найти в разделах, посвященных ширине и высоте абсолютно позиционируемых и неперемещаемых элементов.

Для абсолютно позиционируемых блоков смещение осуществляется относительно контейнера. Для относительно позиционируемых блоков смещение осуществляется относительно внешней краевой линии самого блока (сначала блоку присваивается положение в нормальном потоке, а затем с использованием названных свойств указывается смещение относительно этого положения).

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

9.4.1 Контекст форматирования блоков

В контексте форматирования блоков блоки располагаются друг за другом вертикально, начиная с верхнего края контейнера. Вертикальное расстояние между двумя сестринскими блоками определяется с помощью свойства ‘margin’ . В контексте форматирования блоков вертикальные поля между соседними структурными блоками перекрываются.

В контексте форматирования блоков каждый левый сегмент внешнего края блока соприкасается с левым сегментом краевой линии контейнера (при форматировании справа налево соприкасаются правые края). Это справедливо и при наличии перемещаемых объектов (хотя при этом область содержимого блока может сократиться).

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

В контексте форматирования строк блоки располагаются горизонтально, один за другим, начиная с верхнего края контейнера. Горизонтальные поля, границы и отступы внутри этих блоков сохраняются. Существуют различные способы вертикального выравнивания блоков: по нижнему или по верхнему краю или по уровню содержащегося в них текста. Прямоугольная область, которая содержит блоки, формирующие одну строку, называется .

Ширина линейного блока определяется шириной контейнера. Высота линейного блока регулируется правилами, описанными в разделе «Вычисление высоты строк». Линейный блок всегда имеет высоту достаточную, чтобы вместить все блоки. Однако он может быть выше, чем самый высокий блок, содержащийся внутри, (если, например, блоки выровнены таким образом, что подошвы текста находятся на одной оси). Если высота блока B меньше, чем высота линейного блока, в котором он находится, то вертикальное выравнивание блока B внутри последнего определяется свойством ‘vertical- align’ .

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

Обычно левый край линейного блока соприкасается с левым краем контейнера, а правый край — с правым краем контейнера. Однако иногда между их соответствующими краями могут располагаться перемещаемые блоки. Поэтому, хотя в одном контексте строкового форматирования линейные блоки обычно имеют одинаковую ширину (равную ширине контейнера), она все же может изменяться в зависимости от размеров доступного горизонтального пространства, оставляемого перемещаемым объектом. Линейные блоки в одном и том же контексте строкового форматирования зачастую различаются по высоте (например, одна строка может содержать вытянутый графический объект, в то время как другая — только текст).

Когда суммарная ширина строковых блоков, упорядоченных в строку, меньше ширины содержащего их линейного блока, то горизонтальное распределение этих блоков определяется с помощью свойства ‘text-align’ . Если ему присвоено значение ‘justify’, то агент пользователя может увеличить длину строковых блоков.

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

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

Здесь представлен пример построения строкового блока. Следующий абзац (созданный элементом P уровня блока, принадлежащим языку HTML) включает безымянный текст, в который вставлены элементы EM и STRONG:

Элемент P порождает структурный блок, содержащий пять строковых блоков, три из которых являются безымянными:

  • Безымянный: «В этом»
  • EM: «предложении,»
  • Безымянный: «дорогая,»
  • STRONG: «несколько выделенных»
  • Безымянный: «слов.»

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

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

В последнем случае блок, порожденный элементом EM, был разбит на две части (назовем их «split1» и «split2»). Поля, границы, отступы или элементы текстового оформления не отображаются после split1 или перед split2.

Рассмотрим следующий пример:

В зависимости от ширины элемента P блоки могут распределяться следующим образом:

  • Поля располагаются до слова «несколько» и после слова «выделенных».
  • Отступы располагаются до, сверху и снизу слова «несколько» и после, сверху и снизу слова «выделенных». В обоих случаях с трех сторон слова окружены штрих-пунктирной границей.

После того как блок был размещен в соответствии с моделью нормального потока, он может быть смещен относительно исходного положения. Данная процедура называется . Подобное смещение блока (B1) не влияет на следующий за ним блок (B2): блоку B2 назначается положение так, как если бы смещение блока B1 не производилось, и это положение не изменяется, даже если блок B1 после этого будет перемещен. Отсюда следует, что при относительном позиционировании может происходить наложение блоков.

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

Элемент порождает относительно позиционируемый блок, если для его свойства ‘position’ установлено значение ‘relative’. Смещение определяется с помощью свойств ‘top’ , ‘bottom’ , ‘left’ и ‘right’ .

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

Перемещаемый объект — это блок, который смещается по строке в левую или правую сторону. Самым интересным свойством перемещаемого объекта является то, что содержимое может передвигаться вдоль одной из его сторон (либо не делать этого, если существует запрет, устанавливаемый свойством ‘clear’ ). Содержимое может передвигаться вдоль правой стороны левостороннего перемещаемого блока и вдоль левой стороны правостороннего перемещаемого блока. Далее приводится описание принципов позиционирования перемещаемых объектов и потока содержимого. Конкретные правила, управляющие поведением перемещаемых объектов, приводятся в описании свойства ‘float’ .

У перемещаемого блока должна быть явно задана ширина (назначается с помощью свойства ‘width’ или у него должно быть собственное значение ширины в случае, когда он является заменяемым элементом). Любой перемещаемый блок становится структурным блоком, сдвинутым влево или вправо, если его внешний край не соприкасается с краем контейнера или другого перемещаемого блока. Верхняя часть перемещаемого блока выравнивается по верхней части текущего линейного блока (или, в случае его отсутствия, по нижней части предшествующего структурного блока). Если в текущей строке недостаточно свободного места для перемещаемого объекта, то он последовательно, строка за строкой, перемещается вниз до тех пор, пока не найдется строка, в которой для него найдется достаточное количество места.

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

Эта модель применима и к перемещаемым объектам, соседствующим друг с другом в одной и той же строке.

Следующее правило перемещает все блоки, порожденные элементом IMG с , влево (и устанавливает значение ширины поля равным нулю):

Рассмотрим следующий исходный HTML-документ и таблицу стилей:

Блок, порожденный элементом IMG, перемещается влево. Следующее за ним содержимое форматируется справа от него, начиная с той же строки, на которой находится он сам. Присутствие перемещаемого объекта влияет на то, что, пока линейные блоки находятся справа от него, они укорачиваются, но как только они достигают его конца, так сразу восстанавливают свою исходную ширину (равную ширине контейнера, назначенного элементом P). Приведенный документ может быть отформатирован следующим образом:

Форматирование было бы точно таким же, если бы документ выглядел так:

Объясняется это тем, что содержимое, находящееся слева от перемещаемого объекта, заменяется им, а само отображается справа от него.

Поля перемещаемых блоков никогда не перекрываются с полями соседних блоков. Таким образом, в предыдущем примере вертикальные поля блока, порожденного элементом P, и поля перемещаемого блока, порожденного элементом IMG, не перекрываются.

Перемещаемый объект может перекрывать другие блоки в нормальном потоке (например, если ширина полей блока, находящегося в нормальном потоке и расположенного рядом с перемещаемым объектом, имеет отрицательное значение). Когда происходит наложение перемещаемого объекта и строкового блока, то содержимое, фон и границы последнего выводятся поверх перемещаемого объекта. Когда происходит наложение перемещаемого объекта и структурного блока, то фон и границы последнего выводятся за перемещаемым объектом и видны только там, где он прозрачен. Содержимое структурного блока выводится поверх перемещаемого объекта.

Ниже показано, что происходит при наложении перемещаемого объекта на границы элементов нормального потока.

Перемещаемое изображение затеняет границы перекрываемых им структурных блоков.

В следующем примере проиллюстрировано использование свойства ‘clear’ , позволяющего запрещать перемещение содержимого вдоль относительно объекта.

может привести к следующему форматированию:

В обоих абзацах установлено свойство ‘clear: left’, при действии которого второй абзац «принудительным образом» располагается ниже перемещаемого объекта. Для этого увеличивается ширина его верхнего поля (см. свойство ‘clear’ ).

9.5.1 Позиционирование перемещаемого объекта: свойство ‘float’

‘float’

Значение: left | right | none | inherit
Начальное значение: none
Область применения: все перемещаемые объекты и генерируемое содержимое
Наследование: нет
Процентное задание: N/A
Устройства: визуального форматирования

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

left Элемент порождает структурный блок, перемещаемый влево. Содержимое выводится вдоль правой стороны блока, начиная с самого верха (за счет свойства ‘clear’ ). Свойство ‘display’ игнорируется, если ему не присвоено значение ‘none’. right Подобно значению ‘left’ с той лишь разницей, что содержимое выводится вдоль левой стороны блока, начиная с самого верха. none Блок не перемещается.

Ниже приведены четкие правила , определяющие поведение перемещаемых объектов:

  1. Левый внешний край левостороннего перемещаемого блока не может находиться слева от левого края контейнера. Подобное правило имеет место и для правостороннего перемещаемого блока.
  2. Если текущий перемещаемый блок является левосторонним и существует хотя бы один левосторонний перемещаемый блок, который был сгенерирован в исходном документе раньше него, то левый внешний край текущего блока должен находиться справа от правого внешнего края предыдущего блока, или верхний его край должен быть ниже, чем нижний край предыдущего блока. Подобное правило имеет место и для правостороннего перемещаемого блока.
  3. Правый внешний край левостороннего перемещаемого блока не может находиться справа от левого внешнего края любого правостороннего перемещаемого блока. Подобное правило имеет место и для правостороннего перемещаемого блока.
  4. Верхний сегмент внешнего края перемещаемого блока не может быть выше аналогичной границы контейнера.
  5. Верхний сегмент внешнего края перемещаемого блока не может быть выше аналогичной границы любого структурного или перемещаемого блока, который был сгенерирован в исходном документе раньше рассматриваемого перемещаемого блока.
  6. Верхний сегмент внешнего края перемещаемого блока не может быть выше аналогичной границы любого линейного блока , содержащего блок, который был сгенерирован в исходном документе раньше рассматриваемого перемещаемого блока.
  7. Левосторонний перемещаемый блок, слева от которого расположен другой левосторонний перемещаемый блок, может не иметь правого внешнего края, расположенного справа от правого края его контейнера. (Иногда левосторонний перемещаемый блок может не выдаваться справа до тех пор, пока он не будет помещен как можно левее). Подобное правило имеет место и для правостороннего перемещаемого блока.
  8. Перемещаемый блок должен быть помещен как можно выше.
  9. Левосторонний перемещаемый блок должен быть помещен как можно левее, а правосторонний перемещаемый блок — как можно правее. Самое верхнее положение должен занимать блок, который занимает более крайнее левое/правое положение.

‘clear’

Значение: none | left | right | both | inherit
Начальное значение: none
Область применения: элементы структурного уровня
Наследование: нет
Процентное задание: N/A
Устройства: визуального форматирования

Это свойство определяет, какие стороны блока, порожденного элементом, не могут соседствовать с предшествующим перемещаемым блоком. (Может случиться, что у элемента имеются перемещаемые потомки. Свойство ‘clear’ не влияет на них.)

Данное свойство применимо только к элементам уровня блока (включая перемещаемые объекты). В случае компактных и инициальных блоков это свойство применяется к структурному блоку, которой в итоге будет их содержать.

Перечисленные ниже значения при их использовании для неперемещаемых структурных блоков приобретают следующий смысл:

left Верхнее поле генерируемого блока увеличивается до тех пор, пока верхний сегмент края его границы не окажется ниже нижнего сегмента внешнего края любого левостороннего перемещаемого блока, который был сгенерирован в исходном документе предыдущим элементом. right Верхнее поле генерируемого блока увеличивается до тех пор, пока верхний сегмент края его границы не окажется ниже нижнего сегмента внешнего края любого правостороннего перемещаемого блока, который был сгенерирован в исходном документе предыдущим элементом. both Генерируемый блок помещается ниже всех перемещаемых блоков, которые были сгенерированы в исходном документе предыдущими элементами. none Никаких ограничений на положение блока относительно перемещаемых объектов не накладывается.

Когда это свойство применяется к перемещаемым объектам, оно приводит к изменениям в правилах позиционирования перемещаемых объектов. При этом добавляется дополнительное ограничение (#10):

  • Верхний внешний край перемещаемого объекта должен находиться ниже нижнего внешнего края всех ранее созданных левосторонних перемещаемых блоков (‘clear: left’) или правосторонних перемещаемых блоков (‘clear: right’), или и тех и других сразу (‘clear: both’).

В модели абсолютного позиционирования величина смещения блока относительно его контейнера задается явно. Он полностью удаляется из нормального потока (так что не влияет на последующие сестринские элементы). Абсолютно позиционированный блок назначает новый контейнер для дочерних элементов из нормального потока и позиционируемых потомков. Содержимое абсолютно позиционируемого элемента не перемещается вокруг других блоков. Оно может затенять (или не затенять) содержимое другого блока в зависимости от уровней расположения накладывающихся блоков.

Если в данной спецификации элемент (или порожденные ими блоки) называется , это означает, что для свойства ‘position’ данного элемента установлено значение ‘absolute’ или ‘fixed’.

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

Разработчики могут использовать фиксированное позиционирование для создания презентации в виде совокупности кадров. Рассмотрим один из примеров такой презентации:

Подобный эффект можно достичь с помощью следующего кода HTML и правил стиля:

9.7 Взаимодействие свойств ‘display’, ‘position’ и ‘float’

Три свойства, влияющие на создание и размещение блока — ‘display’ , ‘position’ и ‘float’ — взаимодействуют следующим образом:

  1. Если свойство ‘display’ принимает значение ‘none’, то агент пользователя должен проигнорировать свойства ‘position’ и ‘float’ . В данном случае элемент не породит ни одного блока.
  2. Если свойство ‘position’ принимает значение ‘absolute’ или ‘fixed’, то свойству ‘display’ присваивается значение ‘block’, свойству ‘float’ — значение ‘none’, а положение блока определяться свойствами ‘top’ , ‘right’ , ‘bottom’ и ‘left’ , а также контейнером блока.
  3. Если свойство ‘float’ принимает значение, отличное от ‘none’, то свойству ‘display’ присваивается значение ‘block’, а блок становится перемещаемым.
  4. Остальные значения свойства ‘display’ ведут себя согласно их описанию.

Примечание. В CSS2 ничего не говорится о том, что произойдет, если значения этих свойств будут изменены в результате выполнения некоторых сценариев. Например, что произойдет, если элемент, имеющий значение ‘width: auto’, будет перемещен? Будет ли перемещено его содержимое или оно сохранит прежнее форматирование? Ответа на этот вопрос данный документ не дает, и поведение для различных реализаций CSS2 будет практически разным.

Чтобы продемонстрировать различия между нормальным потоком, относительным позиционированием, перемещаемым объектом и абсолютным позиционированием, предлагается несколько примеров на основе следующего фрагмента кода HTML:

Предположим, что в данном документе используются следующие правила:

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

Рассмотрим следующие объявления языка CSS «outer» и «inner«, которые не вносят изменений в нормальный поток блоков:

Элемент P заключает в себе все содержимое строки: безымянный текст строки и два элемента SPAN. Поэтому все содержимое будет отображаться в контексте строкового форматирования внутри контейнера, порожденного элементом P. В результате получится следующее:

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

Текст обычным образом достигает внешнего элемента. Затем внешний текст принимает те размеры и то положение в конце строки 1, которые назначаются ему в нормальном потоке. Далее строковые блоки, включающие текст (занимающий три строки), перемещаются как единое целое на ‘-12px'(вверх).

Содержимое внутреннего элемента, выступающего в роли дочернего элемента внешнего, будет отображено обычным образом после слов «внешнего текста» (в строке 1.5). Однако сам внутренний текст смещается относительно внешнего на ’12px’ (вниз) на свое нормальное положение в строке 2.

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

Заметьте, что если бы внешний элемент был смещен на ‘-24px’, то произошло бы наложение содержимого внешнего и основного элементов.

Рассмотрим результат перемещения текста внутреннего элемента к правому краю с использованием следующих правил:

Текст обычным образом выводится до внутреннего блока, который изымается из нормального потока и перемещается к правому полю (значение ‘width’ его ширины было указано явно). Линейные блоки, находящиеся слева от перемещаемого объекта, укорачиваются, и оставшаяся часть текста документа отображается в них.

Чтобы продемонстрировать эффективность работы свойства ‘clear’ , добавим в пример сестринский элемент:

как и ранее приводят к перемещению внутреннего блока к правому краю, а оставшаяся часть текста документа перемещается на освободившееся место:

Однако если для свойства ‘clear’ сестринского элемента установлено значение ‘right’ (т.е. генерируемый сестринский блок не располагается следом за перемещаемым блоком справа), то сестринский текст будет выводиться ниже перемещаемого объекта:

И наконец, рассмотрим результат применения модели абсолютного позиционирования. Рассмотрим следующие объявления outer и inner:

В результате верхняя часть внешнего блока размещается относительно контейнера. Контейнер для размещаемого блока назначается ближайшим размещенным предком (или, в случае отсутствия такового, начальным контейнером, как в данном примере). Верхняя сторона внешнего блока находится на ‘200px’ ниже верхней стороны контейнера, а левая сторона на ‘200px’ правее его левой стороны. Дочерний блок внешнего блока перемещается обычным образом относительно его родительского блока.

В следующем примере показан абсолютно позиционируемый блок, дочерний по отношению к относительно позиционируемому блоку. Хотя родительский внешний блок не смещен, присвоение его свойству ‘position’ значения ‘relative’ означает, что он может служить контейнером для позиционируемых потомков. Т.к. внешний блок является строковым блоком, разбиваемым на сегменты, распределяемые по нескольким строкам, то в качестве нулевой точки отсчета для смещения ‘top’ и ‘left’ выступают верхний и левый края первого сегмента (изображенные на рисунке толстыми пунктирными линиями).

В результате получим:

Если внешний блок не позиционируется, т.е. используются правила

то контейнером для внутреннего блока становится начальный контейнер (как в данном примере). На следующем рисунке показано окончательное расположение внутреннего блока.

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

приведет к следующему представлению:

Сначала позиционирование абзаца (стороны контейнера которого показаны на рисунке) осуществляется согласно модели нормального потока. Затем он смещается на ’10px’ относительно левого края контейнера (таким образом, правое поле размером в ’10px’ было предусмотрено для компенсации этого смещения). Два тире, выполняющие роль маркеров исправлений, изымаются из потока и помещаются на текущей строке (с помощью свойства ‘top: auto’) на расстоянии ‘-1em’ от левого края контейнера (назначенного элементом P в момент его окончательного позиционирования). В результате создается эффект перемещения маркеров исправлений влево по текущей строке.

В следующих разделах выражения «поверх» или «спереди» означают, что объект расположен ближе к пользователю, обращенному лицом к экрану.

В CSS2 каждый блок размещается в трехмерном пространстве. Помимо горизонтальных и вертикальных координат блоки имеют координаты вдоль «оси z», располагаясь один поверх другого. Позиционирование объектов вдоль оси z оказывается удобным, когда визуально происходит их наложение. В этом разделе обсуждаются способы позиционирования блоков вдоль оси z.

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

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

Элемент, назначающий локальный позиционный контекст, порождает блок, который имеет два позиционных уровня: первый относится к создаваемому им позиционному контексту (всегда равен нулю), а второй — к позиционному контексту, в котором он находится (указывается свойством ‘z-index’ ).

Блок, порождаемый элементом, имеет тот же позиционный уровень, что и его родительский блок, если ему не был присвоен другой уровень с использованием свойства ‘z-index’ .

9.9.1 Определение позиционного уровня: свойство ‘z-index’


‘z-index’

Значение: auto | | inherit
Начальное значение: auto
Область применения: позиционируемые элементы
Наследование: нет
Процентное задание: N/A
Устройства: визуального форматирования

Для размещенного блока свойство ‘z-index’ указывает:

  1. Позиционный уровень блока в текущем позиционном контексте.
  2. Назначает ли блок локальный позиционный контекст.

Значения данного свойства имеют следующий смысл:

«> Данное значение является значением позиционного уровня сгенерированного блока в текущем позиционном контексте. Блок также назначает локальный позиционный контекст с позиционным уровнем ‘0’. auto Позиционный уровень сгенерированного блока в текущем позиционном контексте совпадает с позиционным уровнем родительского блока. Блок не назначает нового локального позиционного контекста.

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

9.10 Направление вывода текста: свойства ‘direction’ и ‘unicode-bidi’

Символы определенных в некоторых шрифтах пишутся справа налево. В некоторых документах, в частности, в документах на арабском языке или на иврите и в некоторых смешанных языковых контекстах текст в одном (визуально отображаемом) блоке может выводиться в различных направлениях. Такая ситуация обозначается термином или более коротким термином «bidi» от английского «bidirectionality».

В стандарте Unicode ( [UNICODE] , раздел 3.11) описан сложный алгоритм для определения точного направления текста. Алгоритм состоит из неявной части, основывающейся на свойствах символов, и явной части, управляющей процессом вставки и переназначения. В спецификации CSS2 данный алгоритм используется для осуществления адекватного двунаправленного вывода текста. Свойства ‘direction’ и ‘unicode-bidi’ позволяют разработчикам указывать способы отображения множества элементов и атрибутов языка документа на множество понятий данного алгоритма.

Если документ содержит символы, выводимые справа налево, а агент пользователя отображает эти символы (с использованием соответствующих глифов, а не произвольных заменителей типа вопросительных знаков, шестнадцатеричных кодов, черных прямоугольников и т.д.), то агент должен использовать алгоритм двунаправленного вывода. Это кажущееся на первый взгляд односторонним требование отражает тот факт, что документы, использующие написание справа налево, чаще содержат текст, набранный в противоположном направлении (например, числа или текст на другом языке), чем те документы, в которых основным направлением написания является направление слева направо. Однако следует заметить, что не все документы на арабском языке или на иврите содержат разные направления текста.

Т.к. направление текста зависит от строения и семантики языка документа, данные свойства должны преимущественно использоваться создателями описаний типов документов (DTD) или разработчиками специальных документов. Если в основной таблице стилей указаны данные свойства, то разработчики и пользователи не должны вводить переназначающие их правила. Типичное исключение составляет свойство bidi, которое по запросу пользователя может быть переназначено и использовано агентом для транслитерации идиша (как правило, написанного буквами иврита) латинскими буквами.

В спецификации языка HTML 4.0 ([HTML40], раздел 8.2) определяется тип поведения элементов HTML при двунаправленном выводе текста. Конформные пользовательские агенты, управляющие выводом HTML-документов, могут игнорировать свойства ‘direction’ и ‘unicode-bidi’ в таблицах стилей разработчиков и пользователей. Правила таблицы стилей, управляющие двунаправленным выводом текста, определенным в описании [HTML40] , представлены в примере таблицы стилей. Спецификация языка HTML 4.0 включает и другую информацию об использовании разных направлений вывода текста.

‘direction’

Значение: ltr | rtl | inherit
Начальное значение: ltr
Область применения: все элементы, см. описание
Наследование: да
Процентное задание: N/A
Устройства: визуального форматирования

Данное свойство задает основное направление написания, используемое в блоках, направление вставок и переназначений (см. ‘unicode-bidi’ ) для алгоритма двунаправленного вывода, используемого в Unicode. Оно также задает направление вывода столбцов таблицы, направление горизонтального переполнения и положение неполной последней строки в блоке в случае, если используется выравнивание ‘text-align:justify’.

Значения данного свойства имеют следующий смысл:

ltr Направление слева направо. rtl Направление справа налево.

Чтобы свойство ‘direction’ могло влиять на элементы строкового уровня, свойству ‘unicode-bidi’ необходимо присвоить значение ’embed’ или ‘overr >

Примечание. Если свойство ‘direction’ применяется к элементам столбцов таблицы, то оно не наследуется ячейками столбца, т.к. столбцы не существуют в дереве документа. Поэтому в CSS не существует простого способа конструирования правил наследования атрибута «dir», описанных в разделе 11.3.2.1 [HTML40] .

‘unicode-bidi’

Значение: normal | embed | b >inherit
Начальное значение: normal
Область применения: все элементы, кроме see prose
Наследование: нет
Процентное задание: N/A
Устройства: визуального форматирования

Значения данного свойства имеют следующий смысл:

normal Согласно алгоритму двунаправленного вывода элемент не создает нового дополнительного уровня вставки. Для элементов строкового уровня неявная перегруппировка выполняется только в пределах его границ. embed Если элемент является элементом строкового уровня, то данное значение разрешает создание дополнительного уровня вставки согласно алгоритму двунаправленного вывода. Направление данного уровня вставки задается свойством ‘direction’ . Внутри элемента перегруппировка выполняется неявно. Это соответствует добавлению LRE (U+202A; для ‘direction: ltr’) или RLE (U+202B; для ‘direction: rtl’) в начало элемента и PDF (U+202C) в конец элемента. bidi-override Если элемент является элементом строкового уровня или элементом уровня блока, который содержит только элементы строкового уровня, то данное значение создает переназначение. Это значит, что внутри элемента перегруппировка осуществляется в строгом порядке согласно свойству ‘direction’ , а неявная часть алгоритма двунаправленного вывода игнорируется. Это соответствует добавлению LRO (U+202D; для ‘direction: ltr’) или RLO (U+202E; для ‘direction: rtl’) в начало элемента и добавлению PDF (U+202C) в конец элемента.

Следует помнить, что для обеспечения возможности вывода строковых блоков в одном направлении (или всегда слева направо, или всегда справа налево) может понадобиться создание дополнительных строковых блоков (включая безымянные строковые блоки), а также разбивка и перегруппировка некоторых строковых блоков.

Т.к. для алгоритма, используемого в Unicode, установлено ограничение в 15 уровней вставки, рекомендуется не использовать свойство ‘unicode-bidi’ со значением, отличным от ‘normal’, если в этом нет острой необходимости. В частности, значение свойства ‘inherit’ следует использовать очень осторожно. Тем не менее, для элементов, которые будут отображаться в виде блоков, рекомендуется указать ‘unicode-bidi: embed’, чтобы сохранить целостность элемента в том случае, если его вывод будет осуществляться по строкам (см. пример ниже).

В следующем примере показан XML-документ с двунаправленным выводом текста. Он иллюстрирует важный принцип: дизайнерам DTD следует учитывать свойство b >

В этом примере буквы нижнего и верхнего регистра обозначают символы, наследующие направление вывода слева направо и справа налево, соответственно:

Поскольу это XML, то за установление направления написания ответственна таблица стилей. Она приведена ниже:

Элемент HEBREW является блоком с направлением написания справа налево, элемент RUSSIAN — это блок с направлением написания слева направо. Элементы PAR — это блоки, которые наследуют основное направление написания у своих родительских элементов. Таким образом, первые два элемента PAR начинаются с верхней правой стороны, а последние три начинаются с верхней левой стороны. Помните, что названия элементов HEBREW и RUSSIAN выбраны только для примера; как правило, названия элементов должны отображать структуру, не ссылаясь на язык.

Элемент EMPH является элементом строкового уровня, и поскольку его свойство ‘unicode-bidi’ имеет значение ‘normal’ (начальное значение), то он не влияет на упорядочение текста. А элемент HE-QUO создает вставки.

Форматирование этого текста может иметь следующий вид при большой длине строки:

Помните, что в случае вставки HE-QUO элемент ИВРИТ18 будет расположен справа от элемента русский19.

Если необходимо разбить строки, рекомендуется сделать это следующим образом:

Т.к. элемент ИВРИТ18 должен читаться до элемента русский19, то он находится на одну строку выше него. Простое разбиение длинной строки при прежнем форматировании не дало бы результатов. Необходимо учесть, что первый слог элемента русский19 мог бы находиться на предыдущей строке, но разбивка по слогам слов, написанных слева направо, в контексте написания справа налево, и наоборот, обычно не используется во избежание появления дефиса в середине строки.

ТИПИЧНЫЙ ВЕРСТАЛЬЩИК

Всем привет, меня зовут Анна Блок, и эта статья будет посвящена довольно «острой» теме, которая связана с позиционированием элементов. Мы поговорим о таком свойстве как position и его значениях: relative, absolute и fixed. Также мы поговорим о таком значении как static, но по большей степени нас будет интересовать именно первая «троица», так как она чаще всего используется на сайтах.

Если ты постоянно задаешься вопросом, какое значение и в какой ситуации нужно использовать, то эта статья для тебя. Разбор начнём с теории и после на практике отражу примеры на сайте Codepen.

Position

Свойство position устанавливает способ позиционирования элемента относительно окна браузера или других элементов на web-странице. Сейчас на данный момент это свойство поддерживает 5 значений: absolute, fixed, relative, static и sticky.

Relative

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

Absolute

Это абсолютное позиционирование. Когда мы указываем данное назначение, то мы даем понять, что элемент будет абсолютно позиционирован. При этом другие элементы отображаются на веб-странице так, словно этого абсолютного позиционирования на странице нет. Если у элемента стоит position: absolute , то мы также можем управлять его местоположение при помощи каких свойств как: left, top, right и bottom.

Static

Это статичное позиционирование. В этом случае элементы отображаются, как обычно. Использование таких свойств как: left, top, right и bottom не приводит ни каким результатам.

Fixed

Это фиксированное позиционирование. В данном случае мы можем также управлять местоположением при помощи left, top, right и bottom, но при этом он свое положение на странице не будет менять в момент в скролл страницы.

Sticky

Это сочетание относительного и фиксированного позиционирования. Когда мы пишем position: sticky , то элемент рассматривается как относительный, пока он не пересекает определённый порог, после чего он уже будет рассматриваться как фиксированный. Как правило, такое значение применяется для фиксации заголовка на одном месте до тех пор, пока содержимое, к которому относится заголовок, прокручивается на странице.

Стоит отметить, что свойство position поддерживается браузерами уже довольно давно, но на тот момент поддерживалась только три свойства: static, relative и absolute и уже начиная с IE 7, появилась поддержка fixed. Но при этом относительно новое значение sticky не поддерживается Internet Explorer-ом совсем и относительная поддержка у Edge начинается только с шестнадцатой версии. Во всех остальных браузерах такое свойство, как position поддерживается без проблем.

Практика

Теперь давайте перейдем к практике, и я покажу, как на деле работают эти свойства. В HTML зададим блок под названием box и внутри него установим элемент под названием item.

Для box мы визуально зададим пространство, задав ему ширину и высоту, добавив обводку.

Далее мы стилизуем item. Также установим для него ширину, высоту, цвет фона и скругление уголов блока.

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

Absolute

Давайте предположим, что нам необходимо разместить круг в том же месте, как это отображено на картинке. Как это сделать? Если вспомнить теорию, то там было сказано, что такое свойство, как position: absolute задает абсолютное позиционирование для элемента, поэтому давайте так и поступим.
Элементу item добавим position: absolute. Однако для того, что бы наш position работал, нам необходимо начать работу в связке с такими свойствами, как: left, top, right и bottom. В зависимости положения объекта, мы будем использовать то или иное свойство. В нашем случае нам нужно разместить его относительно правой и нижней сторон квадрата.

И тут мы видим первую проблему, с которой сталкиваются новички — круг вышел за приделы блока box. Вы должны помнить, что если вы в CSS не указали, какой блок является родителем (относительно какого блока должен позиционироваться элемент), то он позиционирует дочерний элемент относительно всего тега body. Решается эта проблема добавлением свойства relative для блока box.

После того, как мы это сделали, наша точка вернулась на необходимое место.

Ознакомиться подробнее с HTML и CSS можно тут:

Fixed
Добавим в блок box текста, что создать автоматический скролл на странице.

Теперь наша задача сделать так, что бы наша точка «преследовала» нас, и все время находилась в одной части экрана, как на картинке.

Для этого блоку item задаем position: fixed и мы видим, что она как бы «выпадает» из потока и по умолчанию ей присваиваются такие свойства, как top: 0 и left: 0 . Но при этом, конечно же, мы их всегда можем сбросить, если укажем конкретные значения

И теперь в момент, когда мы скролим страницу эта точка «идет» за нами, она зафиксировалась в одной части экрана.

Ознакомиться подробнее с HTML и CSS можно тут:

Static
Я скопировала все стили, которые у нас применялись в первом примере и теперь мы поговорим о position: static . По умолчанию, если для элемента вы не устанавливаете position , то автоматически у него подразумевается такое значение, как position: static . Давайте представим, что в какой-то момент вам предстоит заняться адаптивом сайта. Вероятнее всего, вам потребуется менять ширину у блока box.

С этими значениями блок будет сворачиваться при любой ширине экрана, но при этом position у блока item мы можем установить, как position: static .

И как мы видим, он игнорирует все, что мы писали ранее, это right и bottom. Даже, если мы изменим значения, сделаем их больше или меньше это никак не повлияет на расположение данного элемента, так как position: static сбрасывает все это. Поэтому, если в какой-то момент вам необходимо сбросить стили, то помните, что достаточно прописать только position: static и в таком случае right , bottom , left , top менять в @media не потребуется.

Ознакомиться подробнее с HTML и CSS можно тут:

Sticky
Итак, теперь давайте рассмотрим четвертый пример. В нем мы создадим блок header, внутри которого содержится текст. Рядом создадим блок main, внутри которого размести блок side с текстом, что бы на странице появился скрол и блок sticky с заголовком. Под блоком main разместим еще один блок и назовем его footer с добавлением текста.

Таким образом, у нас получилась чистая разметка HTML. Ее мы и будем стилизовать. Начнем с блока side, установив ему ширину.

Далее стилизуем заголовок, задав ему цвет текста и цвет фона.

Далее главному блоку sticky добавим position: sticky . Визуально пока у нас ничего не изменилось, но при этом, что бы он «выпал» из потока нужно работать в связке с float , поэтому добавляем ему float: right . Как мы видим, при скроле он у нас не цепляется наверх, поэтому чтобы это исправить необходимо дописать top: 0 и задать ширину.

Теперь при скроле заголовок цепляется к верху и продолжает «идти» за нами по мере следования по странице.

Ознакомиться подробнее с HTML и CSS можно тут:

Вместо заключения

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

Не забывай задавать свои вопросы по вёрстке или фронтенд разработке у профессионалов на FrontendHelp в режиме онлайн.

Позиционирование элементов в CSS

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

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

Типы позиционирования элементов

Основное свойство CSS, которое позволяет управлять позиционированием элементов на странице это свойство position, оно сообщает браузеру, какой тип позиционирования используется для элемента (статический — static , относительный — relative , абсолютный – absolute , или фиксированный — fixed ).

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

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

Совместно со свойством position используются CSS свойства, которые управляют смещением позиционированного элемента:

  • top (смещение позиционированного элемента от верхнего края).
  • right (смещение позиционированного элемента от правого края).
  • bottom (смещение позиционированного элемента от нижнего края).
  • left (смещение позиционированного элемента от левого края).

В качестве значений, которые определяют смещение элемента, допускается использовать физические единицы (например, пункты), но чаще используют визуальные единицыпиксели, процентные значения и значения em. Значения могут быть как положительные, так и отрицательные, как и люди, только значения.

При использовании абсолютного позиционирования (position: absolute ) элемент сдвигается (позиционируется) относительно заданного края его предка, при этом предок должен иметь значение position отличное от, установленного по умолчанию — static , иначе отсчёт (смещение) будет вестись относительно, указанного края окна браузера.

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

И так, что мы сделали в этом примере:

    Разместили два блока

Результат нашего примера:

Рис. 157 Пример абсолютного позиционирования элементов на странице.

Обратите внимание, что наш второй блок (желтый) наложился на первый, в конце предыдущей статьи учебника «Работа с таблицами в CSS», мы уже сталкивались со свойством z-index, благодаря ему, вы можете управлять видимостью элементов по оси z. Например, если задать для первого (зеленого) блока значение z-index: 1 , то уже он будет находиться выше по оси, чем второй (желтый блок) и будет полностью виден. Аналогичного эффекта можно добиться, если указать для желтого блока отрицательное значение свойства z-index.

Как вы заметили, элементы, которые имеют абсолютное позиционирование, отделяются от основного потока страницы, что может приводить к наслоению элементов друг на друга. Еще один нюанс работы с элементами, которые имеют абсолютное позиционирование, это то, что они не могут быть плавающими . Плавающими элементами могут быть только элементы, которые имеют статическое позиционирование ( static ), то есть то, которое установлено у элемента по умолчанию. Методы работы с плавающими элементами мы с Вами рассматривали в статье учебника «Плавающие элементы в CSS».

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

Следующий тип позиционирования, который мы рассмотрим это относительное позиционирование. Элементы, для которых задано относительное позиционирование (position: relative ) смещаются (размещаются) относительно положения в потоке документа, или другими словами относительно его текущей позиции.

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

И так, что мы сделали в этом примере:

    Для блоков (элементы

Результат нашего примера:

Рис. 158 Пример относительного позиционирования элементов на странице.

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

На практике, Вам, скорее всего, не придется перемещать элементы, которые имеют относительное позиционирование. Основная идея относительного позиционирования заключается в том, чтобы не сдвинуть куда-то элемент, а создать «контейнер» для элемента, который имеет абсолютное позиционирование. Другими словами, вложенные элементы будут смещаться не относительно края окна браузера, а относительно этого элемента, который будет иметь относительное позиционирование и находится в основном потоке документа. Более подробно этот момент мы рассмотрим далее в этой статье учебника.

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

Третий тип позиционирования, который мы рассмотрим это фиксированное позиционирование. При фиксированном позиционировании элемент сдвигается относительно заданного края окна браузера. Отличительная особенность этого позиционирования заключается в том, что при прокрутке страницы элемент остается на одном месте, то есть, грубо говоря, он прокручивается вместе со страницей (элемент зафиксирован).

Я думаю, что путешествуя по сети интернет, вы не раз встречали меню навигации, боковые панели, или даже кнопки «вверх страницы», которые были зафиксированы на одном месте. Всё это становится возможным благодаря фиксированному позиционированию.

Давайте рассмотрим пример, в котором мы оформим фиксированную боковую панель.

Давайте разберем, что мы сделали в этом примере:

  • Установили для элементов и высоту равную 100% , это нам позволит задать высоту в процентах для нашей боковой панели. Кроме того, мы убрали внешние отступы (margin) для этих элементов, это необходимо, чтобы убрать встроенные стили браузера.
  • Для нашей боковой панели установили высоту равной родительскому элементу ( 100% ), установили ширину 15% от родительского элемента и установили цвет заднего фона красный. Кроме того указали, что наша боковая панель имеет фиксированное позиционирование, что позволяет её как будто прилепить к экрану. Чтобы наша панель отображалась справа, мы установили значение right равным 0 (смещение позиционированного элемента от правого края окна браузера).
  • Для демонстрации фиксированного позиционирования мы создали контейнер высотой 2000 пикселей . Теперь если прокрутить страницу наша боковая панель останется на месте, а содержимое контейнера (основного содержимого) будет прокручиваться.

Результат нашего примера:

Рис. 159 Пример фиксированного позиционирования элементов на странице.

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

Ну и заключительный тип позиционирования это статическое позиционирование ( static ), мы с Вами уже неоднократно говорили о нем. Статическое позиционирование это классическое размещение элементов сверху вниз (элементы отображаются в порядке, как они указаны в потоке HTML документа), оно считается значением по умолчанию для всех элементов.

Хочу обратить Ваше внимание на один факт, что вышерассмотренные свойства, отвечающие за смещение элементов, не допускается применять к элементам, которые имеют статическое позиционирование, то есть имеют позиционирование, которое установлено по умолчанию.

Продвинутое абсолютное позиционирование

Перед тем как перейти к рассмотрению продвинутого применения абсолютного позиционирования, хочу обратить Ваше внимание, на то, что если вы не указываете значение вертикальной позиции элемента с абсолютным позиционированием (top , или bottom ), или наоборот горизонтальной позиции (left, или right), то браузер оставит элемент в том же месте на странице, где он находится в общем потоке (будет размещен поверх содержимого, если оно есть).

Мы уже с Вами узнали о том, что элемент с абсолютным позиционированием (position: absolute ) позиционируется относительно заданного края его предка, при этом предок должен иметь значение position отличное от, установленного по умолчанию — static , иначе отсчёт (смещение) будет вестись относительно, указанного края окна браузера. Настало время рассмотреть подобный пример:

Давайте внимательно разберем, что мы сделали в этом примере:

    Для начала мы разместили блок (элемент

Результат нашего примера:

Рис. 160 Пример абсолютного позиционирования элемента относительно его предка.

Давайте подытожим изученную в этой статье учебника информацию о позиционировании элементов:

  • Статическое позиционирование это классическое размещение элементов сверху вниз (элементы отображаются в порядке, как они указаны в потоке HTML документа), оно считается значением по умолчанию для всех элементов.
  • Элемент позиционируется относительно окна браузера, если у него фиксированное позиционирование (элемент зафиксирован при прокрутке документа).
  • Элемент позиционируется относительно окна браузера, если у него абсолютное позиционирование, и он не вложен в элемент, который имеет позиционирование, отличное от статического.
  • Элемент, для которого задано относительное позиционирование смещается относительно положения в потоке документа (относительно его текущей позиции).
  • Элемент позиционируется относительно сторон другого элемента в том случае, если он имеет предка, или родителя с абсолютным, относительным или фиксированным позиционированием.

Вопросы и задачи по теме

Перед тем как перейти к изучению следующей темы пройдите практическое задание:

  • Для выполнения задания вам понадобится скачать архив и скопировать содержимое архива (HTML файл) в любую папку на вашем жестком диске:
  • Используя полученные знания составьте следующий документ в котором:
    1. Навигационная панель прокручивается вместе со страницей (фиксированная навигационная панель).
    2. Кнопка «вверх» всегда находится в одном месте при прокрутке страницы.
    3. Продвинутое задание: При наведении на оранжевый блок вы увидите затемненную область с текстом во всю ширину и высоту блока.
    4. Продвинутое задание: Необходимо спозиционировать изображение относительно элементов списка.

    Практическое задание № 32.

    Подсказка: для последнего задания Вы можете использовать CSS псевдоэлемент ::before.

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

    Позиционирование элементов. CSS

    С помощью простого HTML не получится создать красивый сайт. Каждый из них имеет свой уникальный дизайн. Для его создания используется стилизация, с помощью CSS стилей.

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

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

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

    Позиционирование HTML/CSS — виды?

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

    Существует 4 основных типа позиционирования элементов в CSS:

    1. position: absolute;
    2. position: relative;
    3. position: fixed;
    4. position: static.

    Все они могут использоваться для горизонтального и вертикального позиционирования.

    Относительное позиционирование. Свойство position: relative

    Одно из самых часто используемых значений позиционирования в CSS. Использование данного значения задает не полное, а именно относительное позиционирование относительно внешнего блока. Это означает что его границы могут изменяться с помощью свойства

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

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

    Работают не все свойства перемещения по координатам. Всего их 4:

    1. Top > — указывает расположение элемента относительно верхней части блока.
    2. Bottom > — располагает блок относительно нижнего края.
    3. Right > — задает расположение относительно правой границы внешнего блока.
    4. Left > — перемещает элемент относительно левой части внешнего контейнера.

    Если вы сделаете запись из 4 свойств: , , , , то будут работать только первые заданные свойства. То есть, сработает раньше, чем , а , раньше чем .

    Ещё одним плюсом использования такого типа позиционирования является возможность использования свойства z-index. За счет этого относительное позиционирование в css лучше всего подходит для слоевой верстки.

    Данное свойство прекрасно подойдет для позиционирования картинок, кнопок, таблиц и других блоков.

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

    Чтобы просмотреть это видео, включите JavaScript и используйте веб-браузер, который поддерживает видео в формате HTML5

    Тонкости верстки

    Half Faded Star

    Этот курс продолжает обучение тех, кто уже познакомился с основами HTML и CSS. На очереди всякие изыски: отображение сложных элементов, изучение различий между браузерами и графика. В конечном итоге вы сможете сами сверстать страницу любой сложности. Авторы курса — разработчики из Яндекса.

    Рецензии

    Half Faded Star

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

    Преподаватели

    Олег Семичев

    Артем Кувалдин

    Мохов Олег

    Текст видео

    Здравствуйте! На этой неделе я расскажу вам о том, какие системы позиционирования используются в верстке. В этом видео я расскажу вам об относительной системе позиционирования. Итак, свойство position устанавливает способ позиционирования элементов относительно окна браузера или других объектов на странице. По умолчанию у свойства position установлено значение static. В этом случае элементы располагаются в нормальном потоке, то есть слева направо, сверху вниз. Это зависит от того, какого типа элемент: блочного уровня или строчного. Следующий вид позиционирования — это относительное. Задается при помощи свойства position со значением relative. В этом случае положение бокса вычисляется относительно позиции, которую он занимал бы в нормальном потоке. Для задания смещения используются свойства top, right, bottom и left. Как я уже сказал, элемент как бы занимает все то же место, но визуальная часть его смещается. Смещается на то значение, которое установлено в свойствах top, right, bottom и left. Разберем пример. Зададим нескольким элементам свойства top, right, bottom и left. Например, для смещения сверху мы указываем свойство top и задаем ему значение 10 пикселей. В этом случае элемент как бы отталкивается сверху, аналогично со свойством right, bottom и left. Также можно указать несколько смещений одновременно, например, top-left или bottom-right. В этом случае элемент смещается сверху и слева или от низа и справа. Также можно задавать отрицательные значения. В этом случае визуальная часть элемента будет смещаться в противоположном направлении. К примеру, свойство top: −10px — элемент будет смещаться вверх на 10 пикселей. А если задавать положительное значение, то он будет смещаться вниз на 10 пикселей. Ну и аналогично, если указать несколько свойств, то визуальная часть движется в противоположном направлении. Что будет, если указать сразу два смещения в противоположных направлениях, например, смещение справа и смещение слева? На самом деле, всё зависит от того, какое направление текста установлено. Если это направление слева направо, то приоритет у свойства left. Если направление текста справа налево, то приоритет у свойства right. Ну вот как на этом примере. Что же будет, если мы укажем два направления со свойством top и bottom? В этом случае приоритет всегда будет у свойства top. То есть элемент будет смещаться на то расстояние, которое указано в свойстве top. Смещение можно задавать также в процентах. Например, у нас есть два бокса, и задаем смещение на 50 % сверху и слева и снизу и справа. В этом случае сначала подействуют значения, которые смещают элемент по горизонтали, то есть left и right, а свойства top и bottom будут работать в том случае, если у родительского блока задана высота. Например, мы задаем родительскому элементу высоту в 300 пикселей. Только в этом случае визуальные части блоков начинают смещаться по вертикали. В данном случае они сместились на 150 пикселей. При относительной системе позиционирования размеры и отступы считаются следующим образом. Например, если у нас ширина не задана или значение стоит auto, то ширина считается по содержимому или занимает всё пространство, зависит от того, какого типа это блок — блочного уровня или inline уровня? Если же значение у свойства width задано в процентах, то считается от ширины родителя. Высота считается всегда по содержимому, если значение не задано. Если значение задано в процентах, то считается от высоты родителя, если его высота отлична от значения auto. Отступы, padding и margin, по всех случаях считаются от ширины родителя. Это важно понимать, когда задаются вертикальные отступы, то есть вертикальные паддинги и вертикальные марджины. Если же блок не квадратный, то можно получить довольно неожиданный эффект. Как я говорил уже ранее, что иногда считаются размеры относительно родителей, иногда каких-то других предков. Так вот, все эти блоки, относительно которых считаются система позиционирования и размеры, это называется содержащими блоками. Для корневых элементов это прямоугольники размером с вьюпорт или окно браузера, для элементов со свойством position: relative и static это граница контента ближайшего предка блочного уровня. И относительно спозиционированные блоки создают новый содержащий блок для других систем позиционирования. В этом видео я рассказал вам о том, как работает относительная система позиционирования и о том, как задавать смещения и как считаются размеры в относительной системе позиционирования.

    5 особенностей позиционирования в CSS

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

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

    Перед тем как начать, давайте кратко вспомним основы различных типов позиционирования.

    Обзор доступных способов позиционирования

    Свойство CSS position определяет тип позиционирования элемента.

    Опции для позиционирования

    static это значение свойства позиционирования по умолчанию. Мы сообщаем, что этот элемент не использует позиционирование — позиционирование применяется, только если задать тип позиционирования, отличный от дефолтного.

    Для этого надо свойству position задать одно из следующих значений:

    И только после задания позиционирования, можно использовать свойства, смещающие элемент:

    • top
    • right
    • bottom
    • left
    • Начальное значение этих свойств — ключевое слово auto .

    Надо учитывать, что если у элемента задано свойство position в значении absolute или fixed , то он является абсолютно позиционированным элементом. Также у позиционированных элементов начинает работать свойство z-index , определяющее порядок наложения.

    Различия между основными способами позиционирования

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

    • абсолютно ( absolute ) позиционированные элементы полностью удаляются из потока, их место занимают ближайшие соседи.
    • относительно позиционированные ( relative ) и приклеенные ( sticky ) сохраняют свое место в потоке и их ближайшие соседи не занимают его. Однако отступы этих элементов не занимают пространство, а полностью игнорируются другими элементами и это может повлечь наложение элементов.
    • фиксированные ( fixed ) элементы (а фиксированное позиционирование есть разновидность абсолютного) всегда позиционируются относительно зоны видимости (игнорируя наличие позиционирования у предков), в то время как приклеенные элементы позиционируются относительно ближайшего предка со скроллингом ( overflow:auto ). И только при отсутствии таких предков они позиционируются относительно зоны видимости.

    Подробнее это можно рассмотреть в демо:

    Примечание: позиционирование “приклеенных элементов” до сих пор является экспериментальной технологией с ограниченной поддержкой в браузерах. Конечно, при желании вы можете использовать полифилл, чтобы добавить этот функционал в браузер, но с учетом малой распространенности это свойство в статье обсуждаться не будет.

    Позиционирование элементов с абсолютным типом позиционирования

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

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

    Итак, абсолютно позиционированный элемент смещается относительно своего ближайшего спозиционированного предка. Конечно, это работает, если у кого-либо из предков position отличается от static — если у элемента нет спозиционированных предков, он смещается относительно зоны видимости.

    Это демонстрируется следующим примером:

    В этом демо зеленый блок изначально спозиционирован абсолютно с нулевыми отступами bottom:0 и left:0 , его предку (красному блоку) позиционирование не задавалось вообще.

    Однако, мы относительно позиционировали внешнюю обертку (элемент с классом jumbotron ). Отметьте, как меняется позиционирование зеленого блока при изменении типа позиционирования его предков.

    Абсолютно позиционированные элементы игнорируют свойство float

    Если мы применим к плавающему элементу абсолютное или фиксированное позиционирование, свойство float получит значение none . С другой стороны, если мы зададим относительное позиционирование, элемент останется плавающим.

    Взгляните на соответствующее демо:

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

    Абсолютно позиционированные строчные элементы становятся блочными

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

    В данном случае мы создали два разных элемента. Первый (зеленый блок) это блочный элемент, а второй (красный блок) — строчный. Изначально виден только зеленый блок.

    Красный блок не виден потому, что заданные ему свойства width и height работают только с блочными и строчно-блочными элементами, а так как в нем нет контента, у него нет никаких размеров.

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

    У абсолютно позиционированных элементов нет схлопывания внешних отступов

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

    Поведение абсолютно позиционированных элементов здесь схоже с плавающими элементами — их отступы не объединяются с соседними.

    В этом демо элементу задан отступ в 20 пикселей. Его отступ коллапсирует с отступом родительского элемента, также равного 20 пикселям. Как видите, только при абсолютном позиционировании схлопывания не происходит.

    Но как мы можем предотвратить схлопывание отступов? Нам нужно поместить между ними какой-либо разделитель.

    Это может быть внутренний отступ ( padding ) или граница ( border ), их можно применять как к родительскому, так и к дочернему элементу. Другой вариант — добавить клирфикс к родительскому элементу.

    Позиционирование элементов с пикселями и процентами

    Использовали ли вы когда-либо проценты вместо пикселей для позиционирования элементов? Если ответ да, то вы знаете, что смещение элемента зависит от выбранных единиц исчисления (пикселей или процентов).

    Это немного смущает, правда? Итак, сначала посмотрим, что говорит спецификация об смещении в процентах:

    Смещение в процентах от ширины (для left и right ) или высоты ( top или bottom ) родительского блока. Для приклеенных элементов, смещение рассчитывается в процентах от ширины (для left и right ) или высоты ( top или bottom ) потока. Допустимы отрицательные значения.

    Как было сказано, при задании смещения в процентах, позиция элемента зависит от ширины и высоты его родителя.

    Демо показывает эту разницу:

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

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

    Примечание: как вы, наверное, знаете, свойство transform (вместе с различными функциями translate ) также позволяет изменить позицию элемента. Но в этом случае при использовании процентов расчет будет происходить на основе размер самого элемента, а не его родителя.

    Заключение

    Я надеюсь, что эта статья помогла вам лучше понять позиционирование в CSS и разъяснила основные сложности.

    Позиционирование, плавающее размещение, Z-индекс

    Нормальный поток

    Порядок отображения элементов на странице называется потоком документа. Блочные элементы отображаются как прямоугольные области, идущие друг за другом сверху вниз, а строчные элементы располагаются сверху вниз и слева направо и при необходимости переносятся на новую строку. Любой элемент, который находится в потоке, занимает на странице свою собственную площадь и может отталкивать от себя соседей с помощью полей.
    Откройте простой документ Пример 1, не содержащий таблиц или CSS-позиционорования, измените размеры окна браузера. То, что будет отображаться на экране, — это нормальный поток элементов документа.

    Блоки-контейнеры

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

    В документе всегда присутствует хотя бы один блок-контейнер, так как блоком-контейнером является корневой элемент , созданный с помощью тега html .

    body
    a1
    a11

    Позиционирование

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

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

    Абсолютно спозиционированные элементы обладают следующими особенностями:

    • Выпадают из потока документа. Место, которое они занимали, становится как бы пустым и его занимают соседние элементы.
    • Ширина по умолчанию зависит от содержимого (а не растягивается на всю доступную ширину).
    • Остаются на том же месте, где были, если не заданы значения свойств top, left, right, bottom.
    • Если свойства left, top, right и bottom заданы, то они задают расположение элемента относительно некоторой системы координат. При этом начало координат находится в верхнем левом углу прямого предка, при условии, что он также позиционирован (абсолютно или относительно). Если родитель не позиционирован, то берется его родитель. Если все предки не имеют указаний position, то в качестве точки отсчета принимается левый верхний угол экранного образа тега BODY, то есть левый верхний угол документа.Элементы выводятся в указанном месте, перекрывая при этом другие элементы страницы. Порядок следования кодов абсолютно позиционируемых элементов становится важным, если они начинают перекрывать друг друга: выше оказывается тот элемент, код которого идет позже.
    • Абсолютное позиционирование изменяет поведение не только блочных элементов, но и строчных. Если строчный элемент спозиционирован абсолютно, то он ведет себя точно так же, как и абсолютно спозиционированный блочный. Например, такому строчному элементу можно задавать размеры с помощью width и height.

    В следующем примере абсолютно позиционированы две картинки. В коде для каждой из них указаны координаты, но для одной началом координат является начало документа, а для другой — начало блока. Откройте Пример 2, попробуйте изменить размеры окна браузера. Проанализируйте код данной web-страницы.

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

    За начало координат принимается та точка, куда элемент был бы размещен без позиционирования. Алгоритм относительного позиционирования можно представить следующим образом: сначала браузер размещает элемент на странице, выполняя обычное форматирование, а затем, по указаниям top, left, right, bottom смещает его на заданные значения.

    Откройте Пример 3, измените размер окна и убедитесь, что картинка перемещается по экрану вслед за точкой отсчета — началом абзаца, которому принадлежит тег IMG в коде документа. Начало абзаца меняет свое положение тогда, когда предшествующий заголовок записывается в одну или две экранные строки. Проанализируйте код данной web-страницы.

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

    Фиксированное позиционирование задается стилевым указанием position:fixed . Фиксированное позиционирование позволяет закрепить блок в любом месте страницы. В отличие от абсолютного позиционирования, фиксированные элементы позиционируются только относительно окна браузера.

    Откройте Пример 4, прокрутите содержимое страницы, положение навигационного меню должно остаться прежним. Проанализируйте код данной web-страницы.

    Z-индекс

    Если у элементов один уровень (задан явно или не задан вовсе), то тот из них будет располагаться выше, чей HTML-код идет позже.

    Cвойство z-index работает для элементов, у которых position задано как absolute, fixed или relative.

    В Примере 5 представлены три блока с абсолютным позиционированием, каждый из которых перекрывает остальные. Проанализируйте код данной web-страницы.

    Плавающее размещение

    В Примере 6 показано плавающее размещение изображения, в результате получен эффект обтекания изображения текстом.

    Очистка плавающего размещения служит для того, чтобы размещение элемента оставалось плавающим, однако его не окружали другие элементы. Свойство clear принимает следующие значения: left, right, both .

    В Примере 7 показано очищенное плавающее размещение изображений, таким образом изображения были размещены в два столбца.

    Илон Маск рекомендует:  Как написать add in или большие мучения с маленькой программой
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL