22 CSS-свойства для позиционирования
![]()
В статье пойдет речь о нескольких редко упоминаемых в технической литературе свойствах CSS. Тем не менее их использование повлечет за собой повышение скорости и качества разработки веб-интерфейсов.
Экспериментальные свойства также рассматриваются в статье, но большинство функционала все-таки доступно во всех современных браузерах. Однако следует уточнить перед запуском производственного решения, какие браузеры поддерживают каждое из используемых вами свойств.
Итак, вы готовы к небольшому путешествию в удивительный и почти безграничный мир CSS?
Свойства display: grid и place-items
CSS-свойства grid и place-items позволяют удобно выравнивать элементы по горизонтали и вертикали с помощью всего двух строк кода:
Свойство place-items похоже на сокращенную для удобства версию свойств justify-items и align-items .
Его можно применять к одной или нескольким (дочерним) ячейкам одновременно.
Свойства display: flex и margin: auto
Еще один современный способ выравнивания элементов по горизонтали и вертикали — комбинирование свойства display: flex с margin: auto :
Было бы справедливо сказать, что тот же самый результат достигается с помощью следующей инструкции:
Свойства display: flex и gap
Раз уж статья затрагивает использование Flexbox, то стоит упомянуть: наконец-то реализована возможность устанавливать промежутки между элементами flex с помощью свойства gap (очень полезный функционал):
Свойство display: inline-flex
Использование свойства display: inline-flex позволяет создавать строчные элементы ( inline ), которые ведут себя с окружающими их элементами похоже на свойство Flexbox. Вместо тысячи слов — один пример!
- HTML-файл:
- CSS-файл:
Свойства column-count, column-gap и column-rule для создания колонок таблицы
Использование вышеперечисленных свойств позволяет разделить текст внутри элемента-блока на колонки.
- column-count задает количество колонок;
- column-gap указывает размер промежутка между колонками;
- column-rule отвечает за стиль отображения вертикальной линии между колонками.
Существует также сокращенное свойство columns , заменяющее column-count и column-width .
- HTML-файл:
- CSS-файл:
Свойство background-repeat
Свойство background-repeat задает порядок заполнения фона указанным изображением. Значение round равномерно распределяет изображения по всей ширине контейнера, а значение space добавляет небольшие отступы между изображениями.
- HTML-файл:
- CSS-файл:
Свойство background-blend-mode
Свойство background-blend-mode задает порядок, в котором фоновое изображение и цвет (или несколько фоновых изображений/цветов) должны смешиваться друг с другом.
Данному свойству можно задать следующие значения:
- color
- color-burn
- color-dodge
- darken
- difference
- exclusion
- hard-light
- hue
- lighten
- luminosity
- multiply
- overlay
- saturation
- screen
- soft-light
Вы когда-нибудь работали с Photoshop? Тогда, скорее всего, вы поймёте, о чем сейчас пойдёт речь.
Предположим, что в вашем распоряжении находится черно-белое изображение, подобранное вами для фона. Но в то же время вы хотите, чтобы изображение было цветным. Как же вам этого добиться?
- HTML-файл:
- CSS-файл:
Свойство background-clip
Свойство background-clip определяет, насколько фоновый цвет или фоновое изображение может выйти за пределы padding элемента. Одним из самых интересных значений данного свойства можно назвать text , как в следующем примере.
- HTML-файл:
- CSS-файл:
Свойство filter
Данное свойство позволяет применять к элементам некоторые визуальные эффекты.
Функции из следующего списка доступны в качестве возможных значений свойства filter :
- url()
- blur()
- brightness()
- contrast()
- drop-shadow()
- grayscale()
- hue-rotate()
- invert()
- opacity()
- saturate()
- sepia()
Теперь ознакомимся с примером реализации функционала изменения цветовых тем (или схем) на сайте для тех, кто ленится.
- HTML-файл:
- CSS-файл:
На сайте CSSgram вы найдете пример использования CSS-свойства filter для создания фильтров, очень похожих на те, что есть в Instagram.
Свойство filter со значением drop-shadow
Свойство filter с установленным значением drop-shadow() , в отличие от box-shadow , которое аналогично по применяемому эффекту, позволяет добавить тень к самому изображению (в формате PNG), а не к блочному элементу, который её обрамляет.
- HTML-файл:
- CSS-файл:
Свойство object-fit
Свойство object-fit управляет соотношением сторон заменяемых элементов, таких как img и video , если они имеют ширину или высоту, а также руководит процессом масштабирования.
Например, значение scale-down позволяет сохранить соотношение сторон изображения независимо от размера блока.
- HTML-файл:
- CSS-файл:
Свойство object-position используется для выравнивания содержимого в любом выбранном заменяемом элементе в пределах родительского блочного элемента.
Свойство cursor для настройки параметров отображения курсора
Знаете ли вы, что помимо значков курсора, по умолчанию предоставляемых браузером (например, cursor: pointer ), мы можем задавать собственные растровые и векторные изображения в формате SVG?
- HTML-файл:
- CSS-файл:
Свойство scroll-behavior
Свойство scroll-behavior с установленным для него значением smooth , позволяет легко реализовать плавную прокрутку между подразделами страницы.
- HTML-файл:
- CSS-файл:
Свойство text-overflow
Свойство text-overflow со значением, установленным как ellipsis , позволяет добавить символ троеточия в конец текста, но только в том случае, если текст начинает выходить за пределы контейнера.
- CSS-файл:
Свойство caret-color
Свойство caret-color задает цвет для каретки текста. Это такой видимый маркер (символ |), явно указывающий, куда прямо сейчас вставляется следующий набранный пользователем символ.
- CSS-файл:
CSS-правило @supports
Правило @supports позволит вам выполнить проверку используемого свойства или комбинации свойства со значением на поддерживаемость конкретным браузером пользователя.
- CSS-файл:
Функция var()
Функция var() позволяет использовать значения пользовательских переменных в качестве значений для свойств CSS. Вторым необязательным параметром этой функции передается резервное значение.
Функция calc()
Функция calc() используется для указания уже посчитанного значения тем свойствам, которые применяют в качестве значений показатель размера, угла, времени или числа. Это позволяет основывать эти значения на результате операций сложения или вычитания различных единиц измерения.
Обычно абсолютно позиционированный элемент выравнивается по горизонтали и вертикали следующим образом.
- CSS-файл:
Когда нам известны размеры элемента, можно сделать следующее.
- CSS-файл:
Функция attr()
С помощью функции attr() можно получить значение атрибута выбранного элемента и использовать его в стилях CSS.
Всплывающие подсказки реализуются с помощью CSS следующим образом.
- HTML-файл:
- CSS-файл:
Псевдокласс :target
С помощью псевдокласса :target создаются модальные окна, которые работают без использования JavaScript.
- HTML-файл
- CSS-файл
Псевдокласс ::marker
Ранее было весьма распространено удаление маркеров списка с помощью свойства list-style: none , а также добавление собственных изображений для маркеров с помощью псевдоэлементов ::before или ::after . Теперь есть более простой способ настройки маркеров списка — можно использовать псевдоэлемент ::marker .
- HTML-файл:
- CSS-файл:
Псевдокласс ::selection
Псевдоэлемент ::selection позволяет настроить внешний вид для выделения текста.
Методы позиционирования элементов в CSS

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

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

В-третьих, положение элемента в потоке зависит от значения свойства display .

Например, элементы, имеющее блочное отображение ( display: block ) отображаются в потоке как прямоугольные области, каждый из них на новой линии друг под другом сверху вниз.
Ширина элементов с блочным отображением по умолчанию равна доступной ширине родительского элемента, т.е. элемента, в который каждый из них непосредственно вложен. Высота их по умолчанию равна такой величине, которой будет достаточно, чтобы отобразить весь контент, который находится в каждом из них.
Элементы со строчным отображением ( display: inline ) выводятся иначе. Они в отличии от блочных элементов не размещаются каждый на новой строке, а следуют друг за другом слево направо. Если пространство справа закончилось, то они переносятся на следующую строку, а не на новую линию как элементы с блочным отображением.
Кроме block , inline есть и другие варианты отображения элементов, но все они располагаются в базовом потоке документа.
В CSS есть свойства, с помощью которых элементы можно «вырвать» из основного потока документа и задать им другое положение вне базового потока элементов.
К этим свойствам относятся position и float .
CSS-свойство position
CSS свойство position — это одно из свойств с помощью которого можно изменить базовое поведение элементов в потоке. Другими словами, данное свойство позволяет «выдернуть» любой элемент из потока документа и разместить его в другом месте относительно окна браузера или других элементов на веб-странице.
Свойство position имеет 5 значений:
- static (статичное позиционирование);
- relative (относительное);
- absolute (абсолютное);
- fixed (фиксированное);
- sticky (липкое).
static — это значение по умолчанию. Оно означает что элемент находится в базовом потоке.
Каждый элемент в потоке занимает определённую область. Но область элемента не всегда сохраняется за ним при его позиционировании.
Это, например, происходит при задании элементу position: absolute или position: fixed . В этом случае место не сохраняется за элементом. Другие элементы его «не видят» и располагаются, игнорируя его присутствие в коде.
Статичное позиционирование (static)
Свойство position со значением static элементам назначается по умолчанию . Это значение означает что элемент является не позиционированным , т.е. отображается как обычно (в потоке).
Явная установка элементу CSS-свойства position: static может понадобиться только в том случае, когда нужно переопределить другое значение position установленное элементу.
Установка CSS свойств для задания положения элемента left , top , right и bottom никакого влияния на него не оказывают, т.к. его местонахождение определяется потоком документа .
Пример выстраивания статично позиционированных элементов:

Относительное позиционирование (relative)
Установка относительного позиционирования элементу осуществляется посредством задания ему CSS свойства position: relative .
Относительно позиционированный элемент ведёт себя как элемент в потоке за исключением того, что его текущее положение можно при помощи определённых CSS свойств сместить. К этим CSS свойствам относятся left , top , right и bottom .
Например, для того чтобы элемент сдвинуть вверх или вниз относительного его исходного положения к нему нужно применить CSS свойство top или bottom :
Если одновременно установить top и bottom , то будет применено значение top , т.к. оно является более приоритетным, чем bottom :
Для сдвига элемента вправо или влево используется CSS свойство left или right :
Если одновременно установить left и right , то приоритетным будет значение, находящееся в left :
Для сдвига по двум осям нужно использовать top или bottom , и left или right :
Пример, в котором 2 элементу установим относительное позиционирование и сместим его на 20px вверх и влево относительно его исходного положения:

Если в некоторой области страницы оказываются несколько позиционированных элементов, то они перекрывают друг на друга в определённом порядке. При этом по умолчанию выше оказывается тот элемент, который ниже описан в коде. Но порядок перекрытия элементов (их положение перпендикулярное экрану, т.е. вдоль оси Z) можно изменить. Осуществляется в CSS это с помощью свойства z-index . z-index может принимать отрицательные и положительные целые число, auto и 0 . Но, хорошей практикой является использование в качестве z-index чисел из диапазона 0-9999 .
При этом чем больше у элемента значение z-index , тем ближе он располагается к нам, и, следовательно, перекрывает все элементы в данной области, у которых значение z-index меньше.
Абсолютное позиционирование (absolute)
Установка абсолютного позиционирования элементу осуществляется посредством задания ему position: absolute .
Этот тип позиционирования позволяет разместить элемент именно там, где вы хотите.
Позиционирование выполняется относительно ближайшего позиционированного предка.
Под позиционированным элементом понимается элемент с position , равным relative , absolute , fixed или sticky .
В этом примере позиционирование элемента #id-3 будет выполнять относительно #id-2 , т.к. он является позиционированным и является по отношению к нему более близким предком.
Если данный элемент не был бы позиционированным, то позиционирование #id-3 выполнялось бы относительно #id-1 :
Если среди предков у элемента с position: absolute нет позиционированного элемента, то в этом случае он будет позиционироваться относительно HTML страницы, т.е. элемента body .
Когда элементу устанавливаем position: absolute без указания CSS-свойств ( top , left , right и bottom ), определяющих его положение , он будет находиться в том месте, в котором он был бы расположен, если бы находился в потоке (при этом при вычислении его положения учитываются только элементы, расположенные до него в коде и находящиеся в потоке).
При этом другие элементы его видеть не будут, и, следовательно, они будут расположены на странице, не обращая никакого внимание на него.

CSS-свойства для управления положением абсолютно позиционированного элемента работают по-другому чем с position: relative .
CSS-свойства top , bottom , left и right задают положение элемента относительно ближайшего позиционированного предка или body , если такого предка нет.
Установить ширину (высоту) абсолютно позиционированному можно с помощью установки ему двух координат top и bottom ( left и right ).
Если элементу одновременно установить top , bottom и height , то предпочтение будет отдано top и height .
Абсолютное позиционирование применяется очень часто совместно с относительным позиционированием в дизайнерских целях, когда необходимо разместить различные элементы относительного друг друга, так же может применяться для создания выпадающих меню, разметки сайта и т.д.

Фиксированное позиционирование (fixed)
Задание элементу фиксированного позиционирования осуществляется посредством установки ему position: fixed .
Фиксированное позиционирование похоже на абсолютное, но в отличии от него оно всегда привязывается к краям окна браузера (viewport), и остаётся в таком положении даже при скроллинге страницы.
Фиксированное позиционирование применяется для закрепления на странице навигационных меню, кнопки «вверх», панелей с социальными кнопками и многого другого.

Совместное использование относительного и абсолютного позиционирования
Относительное позиционирование очень часто используется вместе с абсолютным позиционированием.
-
Если расположить блоки с абсолютным позиционированием в блок с относительным, то расстояния будут уже задаваться не от края окна браузера, а от границ относительного блока.
5: Позиционирование
Этот раздел посвящен размещению блочных элементов HTML-разметки в рабочей области браузера с точностью до пиксела. До появления спецификации CSS-P , которая вошла в спецификацию CSS2, ничего подобного делать на HTML-страницах было нельзя. Некоторые наиболее пристрастные читатели могут спросить: «А как насчет элемента разметки LAYER ?». Во-первых, LAYER был введен Netscape практически одновременно с появлением CSS-P, а во-вторых, он поддерживается только браузерами Netscape.
Позиционирование и его программирование на JavaScript — это сплошное «минное поле» между двумя основными браузерами. При просмотре этих страниц следует отдавать себе отчет в том, что для каждого браузера загружается своя страница описания свойств позиционирования и программирования этих свойств.
До появления CSS-P единственным средством относительно точного позиционирования были таблицы. Они позволяли точно расположить компоненты HTML-страницы относительно друг друга на плоскости. CSS-P позволяет точно разместить элемент разметки не только относительно других компонентов страницы, но и относительно границ страницы.
Кроме того, CSS-P добавляет странице еще одно измерение — элементы разметки могут «наезжать» друг на друга.
При этом можно менять порядок «наезда» — перекладывать слои . Чтобы в этом убедиться, достаточно воспользоваться ссылкой из приведенного примера.
Свойство position
Свойство position позволяет сдвигать элемент со своего обычного места. Цель этой главы – не только напомнить, как оно работает, но и разобрать ряд частых заблуждений и граблей.
position: static
Статическое позиционирование производится по умолчанию, в том случае, если свойство position не указано.
Его можно также явно указать через CSS-свойство:
Такая запись встречается редко и используется для переопределения других значений position .
Здесь и далее, для примеров мы будем использовать следующий документ:
В этом документе сейчас все элементы отпозиционированы статически, то есть никак.
Элемент с position: static ещё называют не позиционированным.
position: relative
Относительное позиционирование сдвигает элемент относительно его обычного положения.
Для того, чтобы применить относительное позиционирование, необходимо указать элементу CSS-свойство position: relative и координаты left/right/top/bottom .
Этот стиль сдвинет элемент на 10 пикселей относительно обычной позиции по вертикали:
Координаты
Для сдвига можно использовать координаты:
- top – сдвиг от «обычной» верхней границы
- bottom – сдвиг от нижней границы
- left – сдвиг слева
- right – сдвиг справа
Не будут работать одновременно указанные top и bottom , left и right . Нужно использовать только одну границу из каждой пары.
Возможны отрицательные координаты и координаты, использующие другие единицы измерения. Например, left: 10% сдвинет элемент на 10% его ширины вправо, а left: -10% – влево. При этом часть элемента может оказаться за границей окна:
Свойства left/top не будут работать для position:static . Если их всё же поставить, браузер их проигнорирует. Эти свойства предназначены для работы только с позиционированными элементами.
position: absolute
Абсолютное позиционирование делает две вещи:
- Элемент исчезает с того места, где он должен быть и позиционируется заново. Остальные элементы, располагаются так, как будто этого элемента никогда не было.
- Координаты top/bottom/left/right для нового местоположения отсчитываются от ближайшего позиционированного родителя, т.е. родителя с позиционированием, отличным от static . Если такого родителя нет – то относительно документа.
- Ширина элемента с position: absolute устанавливается по содержимому. Детали алгоритма вычисления ширины описаны в стандарте.
- Элемент получает display:block , который перекрывает почти все возможные display (см. Relationships between „display“, „position“, and „float“).
Например, отпозиционируем заголовок в правом-верхнем углу документа:
Важное отличие от relative : так как элемент удаляется со своего обычного места, то элементы под ним сдвигаются, занимая освободившееся пространство. Это видно в примере выше: строки идут одна за другой.
Так как при position:absolute размер блока устанавливается по содержимому, то широкий Заголовок «съёжился» до прямоугольника в углу.
Иногда бывает нужно поменять элементу position на absolute , но так, чтобы элементы вокруг не сдвигались. Как правило, это делают, меняя соседей – добавляют margin/padding или вставляют в документ пустой элемент с такими же размерами.
В абсолютно позиционированном элементе можно одновременно задавать противоположные границы.