background-attachment — CSS | MDN
Если указано background-image
, CSS свойство background-attachment
определяет, является ли позиция этого изображения фиксированной в области просмотра, или прокручивается вместе с содержащим его блоком.
background-attachment: scroll;
background-attachment: fixed;
background-attachment: local;
background-attachment: inherit;
background-attachment: initial;
background-attachment: unset;
Значение свойства background-attachment
задаётся одним из ключевых значений из списка ниже.
Значения
fixed
- Фон фиксируется относительно области просмотра. Даже если элемент имеет механизм прокрутки, фон не перемещается вместе с элементом. (Это значение несовместимо с
background-clip: text
.) local
- Фон фиксируется относительно содержимого элемента. Если элемент имеет механизм прокрутки, фон прокручивается с содержимым элемента, и область рисования фона и область позиционирования фона относятся к прокручиваемой области элемента, а не к границе, обрамляющей их.
scroll
- Фон фиксируется относительно самого элемента и не прокручивается с его содержимым. (Он фактически прикреплён к границе элемента.)
Формальный синтаксис
Простой пример
HTML
<p>
There were doors all round the hall, but they were all locked; and when
Alice had been all the way down one side and up the other, trying every
door, she walked sadly down the middle, wondering how she was ever to
get out again.
</p>
CSS
p { background-image: url("https://mdn.mozillademos.org/files/12057/starsolid.gif"); background-attachment: fixed; }
Результат
Поддержка нескольких фоновых изображений
Это свойство поддерживает несколько фоновых изображений. Вы можете указать разные <attachment>
для каждого фона, разделённых запятыми. Каждое изображение сопоставляется с соответствующим типом вложения, от первого указанного до последнего.
HTML
<p> There were doors all round the hall, but they were all locked; and when Alice had been all the way down one side and up the other, trying every door, she walked sadly down the middle, wondering how she was ever to get out again. Suddenly she came upon a little three-legged table, all made of solid glass; there was nothing on it except a tiny golden key, and Alice's first thought was that it might belong to one of the doors of the hall; but, alas! either the locks were too large, or the key was too small, but at any rate it would not open any of them. However, on the second time round, she came upon a low curtain she had not noticed before, and behind it was a little door about fifteen inches high: she tried the little golden key in the lock, and to her great delight it fitted! </p>
CSS
p { background-image: url("https://mdn.mozillademos.org/files/12057/starsolid.gif"), url("https://mdn.mozillademos.org/files/12059/startransparent.gif"); background-attachment: fixed, scroll; background-repeat: no-repeat, repeat-y; }
Результат
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | 1.0 | 1.0 (1.7 или ранее) | 4.0 | 3.5 | 1.0 |
Multiple backgrounds | 1.0 | 3.6 (1.9.2) | 9.0 | 10.5 | 1.3 |
local | 4.0 | Нет | 9.0 | 10.5 | 5.0 |
Feature | Android | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
Basic support | 2.1 | 1.0 (1.9.2) | ? | 10.0 | 3.2 |
Multiple backgrounds | 2.1 | 1.0 (1.9.2) | ? | 10.0 | 3.2 |
local | ? | Нет | ? | ? | ? |
background-attachment | CSS справочник
Поддержка браузерами
12.0+ | 1.0+ | 1.0+ | 3.5+ | 1.0+ |
Описание
CSS свойство background-attachment устанавливает, будет ли фоновое изображение прокручиваться вместе с содержимым элемента.
Допускается указывать несколько значений для ряда фоновых изображений, перечисляя их через запятую. Каждое новое значение применяется к соответствующему фоновому изображению в том порядке, который определён в свойстве background-image.
Значение по умолчанию: | scroll |
---|---|
Применяется: | ко всем элементам, а также к псевдо-элементам ::first-letter и ::first-line |
Анимируется: | нет |
Наследуется: | нет |
Версия: | CSS1 |
Синтаксис JavaScript: | object.style.backgroundAttachment=»fixed» |
Синтаксис
background-attachment: scroll|fixed|local|inherit;
Значения свойства
Значение | Описание |
---|---|
scroll | Фоновое изображение фиксируется по отношению к самому элементу и не прокручивается вместе с его содержимым, т.е. если элемент имеет прокрутку, то изображение остаётся на месте. Если страница имеет прокрутку, то фоновое изображение прокручивается вместе с элементом. |
fixed | Фоновое изображение фиксируется по отношению к области просмотра окна браузера, поэтому фон остаётся не подвижным при прокрутке содержимого страницы и/или содержимого элемента. Примечание: фиксированное фоновое изображение располагается относительно верхнего левого угла области просмотра окна браузера, а не элемента. |
local | Фоновое изображение фиксируется по отношению к содержимому элемента, т.е. если элемент имеет прокрутку, фоновое изображение прокручивается вместе с содержимым элемента. |
Пример
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Название документа</title> <style> body { height: 1000px; margin: 0; } div { width: 300px; height: 200px; margin-bottom: 10px; overflow: auto; } #scroll { background: #00ff00 url('cogs.png') no-repeat scroll; } #local { background: #00ff00 url('cogs.png') no-repeat local; } #fixed { background: #00ff00 url('cogs.png') no-repeat fixed; } </style> </head> <body> <div>scroll<br>scroll<br>scroll<br>scroll<br> scroll<br>scroll<br>scroll<br>scroll<br>scroll<br>scroll<br> scroll<br>scroll<br>scroll<br>scroll<br>scroll<br>scroll<br> scroll<br>scroll<br>scroll<br>scroll<br></div> <div>fixed<br>fixed<br>fixed<br>fixed<br>fixed<br> fixed<br>fixed<br>fixed<br>fixed<br>fixed<br>fixed<br> fixed<br>fixed<br>fixed<br>fixed<br>fixed<br>fixed<br> fixed<br>fixed<br>fixed<br></div> <div>local<br>local<br>local<br>local<br>local<br> local<br>local<br>local<br>local<br>local<br>local<br> local<br>local<br>local<br>local<br>local<br>local<br> local<br>local<br>local<br></div> </body> </html>
фиксация фона — учебник CSS
По умолчанию, когда вы скроллите веб-страницу с фоном, фон прокручивается вместе с другими элементами. Иногда это уместно, а иногда хочется, чтобы изображение, заданное через background-image
, всегда оставалось на виду. Для управления этим состоянием существует свойство background-attachment
.
Значения background-attachment
scroll
(значение по умолчанию) — фоновое изображение перемещается вместе с другими элементами при скролле веб-страницы.fixed
— значение фиксирует фоновое изображение, делая его нечувствительным к скроллу. При прокручивании страницы фон на заднем плане останется неподвижным.local
— данное значение было добавлено из-за того, что в случае с локальным скроллом фон со значением scroll ведет себя как fixed. При значении local фон прокручивается вместе с содержимым элемента, и не прокручивается, если содержимое не скроллится (но прокручивается вместе с самим элементом).
Для лучшего понимания работы свойства взгляните на примеры ниже. Чтобы вы могли их сравнить, ваш браузер должен поддерживать все три значения background-attachment (надеемся, что при изучении CSS вы пользуетесь современным десктопным браузером!).
background-attachment: scroll
background-attachment: fixed
background-attachment: local
Поддержка браузерами
Полная поддержка всех значений свойства background-attachment
есть у десктопных браузеров IE9+, Edge 12+, Firefox 25+, Chrome (все версии), Safari 5+, Opera 11.5+. Из мобильных браузеров все значения понимают Opera Mobile, Firefox для Android, IE Mobile и QQ Browser. В других браузерах поддержка либо частичная, либо отсутствует.
Далее в учебнике: свойства background-origin и background-clip для позиционирования фоновых изображений и управления обрезкой.
10 фиксированных фонов CSS
Коллекция отобранных вручную фиксированных фонов HTML и CSS примеров кода.
- CSS Анимированные фоны
- CSS-фоновые узоры
- CSS-фоны частиц
- CSS Треугольные фоны
- Плагины фона jQuery
О коде
Фиксированное прикрепление фона
Фиксированный фон с прокруткой содержимого.
Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari
отзывчивый: да
Зависимости: —
О коде
background-attachment: исправлено;
Фон с CSS-свойствами. Вложение фона: исправлено;
Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari
отзывчивый: да
Зависимости: —
Автор
- ковры нумидиум
О коде
Эффект фоновой прокрутки
Эффект прокрутки фонового изображения на чистом CSS.
Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari
отзывчивый: да
Зависимости: —
Автор
- Али Кляйн
О коде
Фиксированное прикрепление фона
Вложение фона на чистом CSS исправлено в контейнере.
Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari
Адаптивный: нет
Зависимости: —
Автор
- Джефф Грэм
О коде
Фон прокрутки в CSS
Поездка в Сиэтл: прокрутка фонов в CSS с привязкой фона : исправлено;
Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari
отзывчивый: да
Зависимости: —
Автор
- Джастин Авен
О коде
Фиксированный фон, полные разделы
Определенные полноэкранные разделы с указанием разделов с фиксированными фоновыми изображениями / без прокрутки.
Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari
отзывчивый: да
Зависимости: —
Автор
- codyhouse.co
О коде
Фиксированный фоновый эффект
Простой шаблон, использующий свойство CSS background-attachment для создания фиксированного фонового эффекта.
Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari
отзывчивый: да
Зависимости: jquery.js
О коде
Магия прокрутки на простом CSS
Если колесо мыши вниз … прокрутите вправо.
Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari
отзывчивый: да
Зависимости: —
Автор
- Джошуа Митчелл
О коде
Ретро слайд-шоу CSS
CSS-слайд-шоу с прикреплением фона : исправлено;
Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari
отзывчивый: да
Зависимости: —
Автор
- Дерек Палладино
О коде
Книжка-книжка со прокруткой
Использование фоновых изображений и различных разделов, раскрывающих каждое фиксированное фоновое изображение для создания эффекта книжки-книжки.
Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari
Адаптивный: нет
Зависимости: —
CSS2 — прикрепление фона к любому элементу
CSS2 — прикрепление фона к любому элементуфон-прикрепление к любому элементу
background-attachment
требуется три значения, но все браузеры поддерживают
только два.
Спецификация
W3C говорит:
‘background-attachment’
Если задано фоновое изображение, это свойство указывает, является ли оно фиксированным относительно области просмотра («фиксированный») или прокручивается вместе с документом («прокрутка»).
фоновое приложение: свиток
Фоновое изображение прокручивается вместе с документом . Поскольку прокрутка div не прокручивается
документ, фоновое изображение моего div с переполнением : auto
не должно реагировать.
scroll
не означает: пусть изображение прокручивается вместе с элементом. Значение местное
Является ли это. Тем не менее проводник Windows интерпретирует scroll
как таковой.
фоновое прикрепление: фиксированное
Для элементов, отличных от тела, это значение не соответствует ожиданиям.Фоновое изображение фиксируется не относительно элемента, а относительно всего окна . Для непосвященных эффект может быть довольно поразительным.
Лучше всего рассматривать элемент как своего рода «окно», через которое вы просматриваете фоновое изображение. Если это «окно» движется, вы видите другую часть фонового изображения.
Посмотрите мой пример, чтобы понять точка.
фоновое приложение: местное
Это значение CSS3 говорит, что фон должен прокручиваться вместе с элементом.В настоящее время ни один браузер не поддерживает его. я надеюсь, поддержка скоро придет; нам нужно это значение.
Совместимость
местный Прокручивает с элементом.Тестовая страница | Алтер | № | № | № | № | № | Алтер | ||||||||
Если браузер не поддерживает local , он использует значение по умолчанию свиток .Любопытно, что поскольку scroll означает локальный в IE и
Konqueror, эти браузеры случайно оказались единственными, поддерживающими local , хотя
по неправильным причинам. | |||||||||||||||
свиток Фиксированное положение относительно элемента; прокручивается с документомТестовая страница | местный | Есть | Есть | Есть | Есть | Есть | местный | ||||||||
фиксированная Фиксированное положение относительно окна; не прокручиваетсяТекстовая страница | свиток | Есть | Есть | Есть | № | Есть | Есть | Есть | |||||||
Какого хрена фоновая привязанность локальная
Недавно я наткнулся на background-attachment: local
из-за этого супер-удивительного трюка в Smashing Magazine, который добавляет градиент по бокам стола … только если таблица переполнена.Это действительно здорово, но хотя я знал о scroll
и с фиксированными значениями
для background-attachment
, я никогда раньше не слышал о local
.
Чтобы понять, что делает local
, вам нужно знать, что сначала делают scroll
и fixed
, так что действительно быстрое руководство по ним:
-
scroll
по умолчанию — фон прокручивается вместе со страницей, как и следовало ожидать. -
fixed
позволяет зафиксировать изображение на месте во время прокрутки страницы.Это как бы дает эффект типа параллакса.
Однако есть проблема с scroll
, и это означает, что он не работает так, как вы ожидали, если этот изолированный элемент имеет полосу прокрутки. Если это так, на самом деле он ведет себя как фиксированный
. Вот пример, чтобы проиллюстрировать, что я имею в виду.
См. Перо background-attachment: scroll — что за фиг ?! Автор: Кевин (@kevinpowell) на CodePen.
Обратите внимание, что при прокрутке страницы фон работает так, как вы ожидали, но если вы прокручиваете внутри самого элемента, он действует как фиксированный фон
. Это связано с тем, что фон элемента с background-attachement: scroll
прокручивается с его границей . Когда прокручивается вся страница, фон перемещается вместе с ней, но когда вы прокручиваете внутри этого элемента, граница этого элемента не перемещается, следовательно, фон также не перемещается.
местный
на помощь Это то, для чего предназначен local
. Он фиксирует фон содержимого вместо границы элемента.Ниже приведен пример работы всех трех. Обратите внимание, что если вы прокручиваете страницу, первый и последний элементы ( scroll
и local
соответственно) ведут себя одинаково … но затем прокручиваются внутри элемента. Тот, у которого локальный
, вероятно, то, что вы искали в первую очередь.
См. Перо background-attachment: местное от Кевина (@kevinpowell) на CodePen.
Я счастлив, что узнал об этом до того, как столкнулся с проблемой, потому что это одна из тех причуд CSS, которые действительно могут спровоцировать вас, когда вы не можете понять, почему он ведет себя не так, как вы ожидаете.
Подписаться Мы не будем рассылать вам спам. Отпишитесь в любой время.10 фрагментов CSS и JavaScript для создания эффекта прокрутки параллакса
Есть много недоразумений в отношении дизайна параллакса и того, как он работает в Интернете. Вообще говоря, дизайн с параллаксом — это использование движения для создания иллюзии глубины на странице.
Это может относиться к изменениям фона или элементам полуфиксированного положения, которые перемещаются вместе с прокруткой пользователя.Мы рассмотрели множество примеров с веб-сайтов, но не вдавались в подробности используемых методов.
Для этой коллекции я выбрал свои любимые дизайны с параллаксом, которые предлагают бесплатный исходный код, с которым вы можете поиграть и даже добавить в свои собственные проекты.
Панель инструментов веб-дизайнера
Неограниченное количество скачиваний: более 1 000 000 веб-шаблонов, тем, плагинов, ресурсов дизайна и многое другое!
1. Великое падение
The Great Fall, разработанный CJ Gammon, — один из самых уникальных интерфейсов, которые я когда-либо встречал.
Он использует специальный сценарий для создания спрайта водопада, который, кажется, бесконечно течет вниз по странице. Он построен на элементах холста, управляемых с помощью JavaScript, поэтому имеет довольно техническую настройку.
Не говоря уже о том, что на странице также есть небольшие всплывающие окна с полями с соответствующей информацией. Этот эффект безумно крутой, и его можно воспроизвести, обладая приличными знаниями JavaScript.
Но по большей части это действительно свидетельство того, что возможно в современной веб-разработке.Изучение элемента холста дает вам полный контроль над вашим дизайном.
2. Параллакс прокрутки CSS
Вот гораздо более практичный эффект параллакса с фиксированным фоном и большими страницами вверху.
При прокрутке каждый раздел страницы появляется «над» фоном. Это создает иллюзию глубины и является одним из ключевых элементов великолепного дизайна с параллаксом.
Разработчик Себастьян Шепис использовал чистый CSS для этой страницы, и это довольно простая концепция.Я думаю, что любой мог бы легко клонировать это, не говоря уже о том, что дизайн фона можно было бы значительно улучшить.
3. Параллакс тега простого изображения
Часто можно встретить дизайн с параллаксом в сочетании с большими полноэкранными фоновыми изображениями. Все они слишком распространены на сайтах компаний и стартапах, где они обычно имеют определенную «скорость прокрутки» параллакса для фона.
В этом фрагменте разработчик Ренан Брено потратил некоторое время на изменение скорости прокрутки, чтобы показать, как она может сильно варьироваться.
Разница здесь не столько в том, насколько быстро вы прокручиваете страницу или насколько велико место размещения изображения. Скорее вы видите, как быстро изображение перемещается через фон страницы во время прокрутки. Это очень тонкий эффект параллакса, но этот макет является отличным шаблоном, чтобы увидеть различные скорости анимации в действии.
4. #Maincode Hackdays
Фиксированные фоны изображений хорошо подходят для разделения страниц и равномерного разделения содержимого. Вы можете увидеть прекрасный пример в этой ручке, созданной для мероприятия Hackdays.
При прокрутке может казаться, что отдельные разделы страницы «выше» фоновых изображений. Все это сделано для того, чтобы вдохнуть жизнь в эффект параллакса при прокрутке.
Я бы не стал использовать этот точный макет, потому что области содержимого кажутся немного тонкими. Но если вам нравится этот стиль, я бы порекомендовал перемежать каждый раздел страницы другим изображением, имеющим отношение к вашему сайту.
5. CSS Parallax
Это перо с параллаксом, созданное Пауло Кунья, является уникальным примером того, как работают эффекты параллакса.
Все содержимое страницы находится под большим изображением главного героя, которое исчезает под содержимым при прокрутке. При этом также используется фиксированное положение изображения, чтобы оно выглядело так, как будто страница перемещается на поверх изображения, а не изображение остается на месте.
Вы можете использовать тот же эффект с макетом с длинной прокруткой, и он будет иметь похожий стиль дизайна.
Я думаю, что это лучше всего подойдет для отдельных сообщений в блогах с большими избранными изображениями или для целевых страниц, на которых используются большие герои для привлечения внимания.
6. Параллакс дизайн
Вот интересный параллакс-дизайн для образца свадебной страницы, созданный Кэти Роджерс.
Он имеет дизайн разделенной страницы, где изображения разделяют множество различных областей содержимого с фиксированным параллаксом прокрутки. Все работает на CSS, что приятно, и все фоновые изображения остаются неизменными при перемещении вниз по странице.
Этот эффект работает, потому что области содержимого имеют большие тени, падающие на фон. Естественно, это создает иллюзию глубины , давая странице теоретический источник света и иерархию.Очень хорошая идея для одностраничного макета.
7. Параллакс прокрутки фонового изображения
Ранее я упоминал, как скорость прокрутки может изменяться в зависимости от скорости изменения положения фона.
Что ж, этот пример, разработанный Ричем Хауэллом, является прекрасным сравнением, чтобы увидеть, как это работает в действии.
Примечание для этого пера, вам нужно будет использовать полосу прокрутки, чтобы увидеть эффекты. Я попробовал с помощью колесика мыши и не заметил никакой разницы, но когда вы перемещаете полосу прокрутки, вы видите изменение скорости в столбцах.
Ни одна из этих скоростей не является неправильным или неточным отображением параллакса. Это просто разные методы создания движения на странице, и это маленькое перо — отличный способ визуализировать множество вариантов.
8. Звездный фон
Хотя этот эффект не относится к прокрутке, он напрямую связан с дизайном параллакса. Он использует чистый CSS для создания анимации звезды параллакса на заднем плане страницы. Вы можете добавить текст и даже область содержимого поверх страницы, но звезды сразу же создают глубину с первого взгляда.
Все анимации проходят через CSS, но это перо использует Sass и Compass, поэтому их будет полезно понять, прежде чем вносить изменения.
Но вы можете просто скопировать / вставить это в свой макет, не внося слишком много изменений. CodePen позволяет компилировать Sass в CSS одним нажатием кнопки, поэтому получить исходный код также не составит труда.
9. Холст Parallax Skyline
Иногда дизайн с параллаксом также нацелен на движение мыши вместе с функциями прокрутки.Этот дизайн холста создает эффект бесконечной линии горизонта, который реагирует на движение мыши по странице.
При перемещении мыши угол обзора изменяется. Но анимация остается прежней, и вы можете видеть, как эта линия горизонта движется с четкой визуальной иерархией.
Естественно, это требует JavaScript для анимации, потому что это довольно сложная идея. Но это также не то, что вы найдете на многих веб-сайтах, так что это тоже не то, что вы скопируете на свой сайт. Но как концепция параллакса это действительно интересно.
10. Параллакс наведения
Еще один эффект параллакса, нацеленный на мышь, — это дизайн, созданный Тулио Филипе. Он не занимает всю страницу, поэтому у него совершенно другая концепция параллакса.
Вместо того, чтобы создавать глубину с помощью содержимого, он использует движение против мыши, чтобы создать глубину внутри изображения.
Каждый элемент внутри контейнера имеет свой собственный «слой» в HTML. Когда вы перемещаете указатель мыши по этому контейнеру, кажется, что одни изображения появляются поверх других.
Все это работает через JavaScript, и это довольно крутой эффект для Интернета. Вы можете попробовать использовать это в дизайне баннера или в собственном заголовке страницы.
11. Фильтр разбитого стекла
Я видел этот эффект на веб-сайтах раньше, и он создает очень своеобразный дизайн. Фильтр с разбитым стеклом создает иллюзию того, что фоновое изображение разделено на множество частей. Это почти похоже на то, как будто изображение было на стекле, и оно разбилось, расколов изображение и искривив изображение.
Вы можете воспроизвести этот эффект с помощью чистого CSS, и это один из тех изящных эффектов, которые классно делать, но, возможно, не имеет практического применения в реальном мире, кроме причудливого дизайна.
Тем не менее, это впечатляющий пример глубины параллакса и движения при прокрутке.
Расширенные макеты с абсолютным и фиксированным позиционированием · Документы WebPlatform
Резюме
В этой статье рассматривается абсолютное и фиксированное позиционирование.
Введение
Теперь пора обратить ваше внимание на вторую пару значений свойства position
— absolute
и fixed
.Первая пара значений — статический
и относительный
— тесно связаны, и мы подробно рассмотрели их в предыдущей статье.
Абсолютно позиционированные элементы полностью удаляются из потока документов. Это означает, что они вообще не влияют на их родительский элемент или на элементы, следующие за ними в исходном коде. Таким образом, абсолютно позиционированный элемент будет перекрывать другой контент, если вы не предпримете никаких действий по его предотвращению. Иногда, конечно, это совпадение — именно то, что вам нужно, но вы должны знать об этом, чтобы убедиться, что вы получаете желаемый макет!
Фиксированное позиционирование — это просто специализированная форма абсолютного позиционирования; элементы с фиксированным позиционированием фиксируются относительно окна просмотра / браузера, а не содержащего элемента; даже если страница прокручивается, они остаются в том же положении внутри окна браузера.
В этой статье мы рассмотрим несколько практических примеров использования позиционирования absolute
и fixed
, рассмотрим некоторые особенности поддержки браузеров и исследуем концепцию z-index.
Но прежде чем все это, давайте рассмотрим важную предварительную концепцию — содержание блоков.
Содержащие блоки
Важным понятием, когда дело доходит до абсолютного позиционирования, является содержащий блок: блок блока, относительно которого расположены положение и размеры абсолютно позиционированного блока.Для статических блоков и блоков, расположенных относительно друг друга, содержащий блок является ближайшим предком на уровне блока, другими словами, родительским элементом. Однако для абсолютно позиционированных элементов все немного сложнее. В этом случае содержащий блок — это ближайший -позиционный предок . Под «позиционированным» мы подразумеваем элемент, для которого свойство position
установлено на относительно
, absolute
или fixed
— другими словами, все, кроме обычных статических элементов.
Итак, установив position: relative
для элемента, вы сделаете его содержащим блоком для любого абсолютно позиционированного потомка (дочерних элементов), независимо от того, появляются ли они сразу под относительно позиционированным элементом в иерархии или ниже по иерархии.
Если абсолютно позиционированный элемент не имеет позиционированного предка, то содержащий блок — это то, что называется «начальным содержащим блоком», что на практике приравнивается к элементу html
.Если вы смотрите на веб-страницу на экране, это означает окно браузера; если вы печатаете страницу, это означает границу страницы.
Элементы с фиксированным позиционированием немного отличаются от этого — они всегда имеют начальный содержащий блок в качестве содержащего их блока.
Итак, давайте суммируем это в виде набора простых шагов — чтобы найти содержащий блок для элемента с позицией : абсолютное
, это то, что вам нужно сделать:
- Посмотрите на родительский элемент абсолютно позиционированного элемента — имеет ли свойство
position
этого элемента одно из значенийотносительно
,абсолютного
илификсированного
? - Если да, то вы нашли содержащий блок.
- Если нет, перейдите к родительскому элементу и повторите, начиная с шага 1, пока не найдете содержащий блок или не исчерпаете предков.
- Если вы достигли элемента
html
, не найдя позиционированного предка, то содержащим блоком является элементhtml
.
Абсолютное позиционирование
Фиксированное позиционирование — это особая форма абсолютного позиционирования, поэтому мы изучим это позже и сконцентрируемся здесь на более общем случае. Если не указано иное, когда я использую термин «абсолютно позиционированный» с этого момента и до конца статьи, я буду ссылаться на оба элемента с положением : фиксированное
, и элементы с положением : абсолютное
.
Указание позиции
Используя относительное позиционирование, вы узнали, что свойства верхний
, правый
, нижний
и левый
могут использоваться для определения положения поля. Вы используете те же свойства, чтобы указать положение абсолютно позиционированного блока, но способ их использования совершенно другой.
Для относительно позиционированного элемента четыре свойства определяют относительное расстояние для смещения созданного блока.Помните, что в случае относительного позиционирования они дополняют друг друга, так что top: 1em
и bottom: -1em
означают одно и то же, и не имеет смысла указывать одновременно top
и bottom
(или left
и справа
) для того же элемента, потому что одно из значений будет проигнорировано.
Эти точки неверны в случае абсолютного позиционирования. Здесь все четыре свойства могут использоваться одновременно, чтобы указать расстояние от каждого края позиционированного элемента до соответствующего края содержащего блока.Вы также можете указать положение одного из углов абсолютно позиционированного блока — скажем, используя верхний
и левый
— а затем указать размеры блока, используя ширину
и высоту
(или просто не используйте ширина
и высота
, если вы хотите, чтобы он был упакован в термоусадочную пленку по размеру содержимого)
Microsoft Internet Explorer версии 6 и старше не поддерживает метод указания всех четырех краев, но они поддерживают метод указания одного угла плюс размеры.
/ * Этот метод работает в IE6 * /
#foo {
позиция: абсолютная;
верх: 3em;
слева: 0;
ширина: 30em;
высота: 20em;
}
/ * Этот метод не работает в IE6 * /
#foo {
позиция: абсолютная;
верх: 3em;
справа: 0;
внизу: 3em;
слева: 0;
}
Здесь следует помнить, что значения, которые вы устанавливаете для свойств top
, right
, bottom
и left
, определяют расстояния от краев элемента до их , соответствующих , содержащих края блока.Это не похоже на систему координат, где каждое значение относится к одной исходной точке. Например, right: 2em
означает, что правый край абсолютно позиционированного блока будет на 2em от правого края содержащего блока.
Когда вы используете абсолютное позиционирование, абсолютно необходимо знать, какой у вас содержащий блок. Вот почему установка position: relative
в содержащем блоке так полезна, даже если вы на самом деле не меняете положение поля.Он позволяет вам сделать элемент содержащим блоком для его абсолютно позиционированных потомков — это дает вам контроль.
Давайте попробуем пример, чтобы увидеть, как это работает.
Скопируйте приведенный ниже код в текстовый редактор и сохраните документ как absolute.html.
Абсолютное позиционирование Затем скопируйте следующий код в новый файл и сохраните его как absolute.css.
html, body { маржа: 0; отступ: 0; } #outer { маржа: 5em; граница: 1px solid # f00; } #внутренний { ширина: 6em; высота: 4em; цвет фона: # 999; }
Сохраните оба файла и загрузите HTML-документ в браузер.Вы увидите серый прямоугольник, окруженный несколько более широкой красной рамкой.
Элемент
#inner
имеет заданную ширину и высоту, а также серый цвет фона. Элемент#outer
, который является структурным родительским элементом#inner
, имеет красную границу. Он также имеет поле 5em по периметру, чтобы сместить его от краев окна браузера и позволить нам более четко видеть, что происходит. Пока ничего удивительного, правда? Высота элемента#outer
задается его дочерним элементом (#inner
), а ширина — горизонтальными полями.Теперь посмотрите, что произойдет, если вы сделаете
#inner
абсолютно позиционированным! Добавьте следующее выделенное объявление к правилу#inner
:#inner { ширина: 6em; высота: 4em; цвет фона: # 999; позиция: абсолютная; }
Сохранить и перезагрузить. Вместо красной границы вокруг серого прямоугольника теперь есть только более толстая верхняя граница. А серая коробка вообще не двигалась! Вы этого ожидали?
Здесь происходят две интересные вещи.
Прежде всего, если сделать #inner
абсолютно позиционированным, это полностью удалило его из документооборота. Это означает, что его родительский элемент #outer
теперь не имеет дочерних элементов, находящихся в нормальном потоке, поэтому его высота уменьшается до нуля. То, что выглядит как красная линия толщиной 2 пикселя, на самом деле является границей в 1 пиксель вокруг элемента с нулевой высотой — вы видите верхнюю и нижнюю границы, между которыми ничего нет.
Вторая интересная вещь — абсолютно позиционированная коробка не двигалась.Значение по умолчанию для свойств верхний
, правый
, нижний
и левый
: авто
, что означает, что абсолютно позиционированный прямоугольник появится именно там, где он был бы, если бы он не был размещен. Однако, поскольку он удален из потока, он будет перекрывать любые элементы в нормальном потоке, следующие за ним. На самом деле это очень полезно — вы можете положиться на это, если хотите переместить сгенерированный блок только в одном измерении. Например, в раскрывающемся меню, управляемом CSS, «раскрывающиеся» панели могут быть абсолютно позиционированы с указанием только свойства top
.Затем они появятся в ожидаемых координатах по оси X (так же, как их родительские), автоматически.
Затем давайте установим высоту для элемента
#outer
, чтобы он снова выглядел как прямоугольник, и переместим#inner
в сторону. Добавьте следующие выделенные строки в свои правила CSS:#outer { маржа: 5em; граница: 1px solid # f00; высота: 4em; } #внутренний { ширина: 6em; высота: 4em; цвет фона: # 999; позиция: абсолютная; слева: 1em; }
Сохраните и перезагрузите, и вы увидите некоторые изменения.Элемент
#outer
теперь снова является прямоугольником, поскольку вы задали для него высоту. Элемент#inner
сместился в сторону, но не туда, где вы могли ожидать. Это не 1em от левого края своего родителя, а 1em от левого края окна! Причина в том, что, как объяснялось выше,#inner
не имеет позиционированного предка, поэтому его содержащий блок является начальным содержащим блоком. Если вы укажете позицию, отличную отauto
, она будет относиться к соответствующему краю содержащего блока.Когда вы устанавливаетеleft: 1em
, левый край#inner
заканчивается на 1em от левого края окна.- Сохранить и перезагрузить — о чудо! Серый прямоугольник теперь находится на расстоянии 1em от левой границы родительского элемента. Установка
position: relative
в правиле#outer
сделало его позиционированным и установило его как содержащий блок для любых абсолютно позиционированных потомков, которые он мог иметь. Значениеleft: 1em
, которое вы установили для#inner
, теперь отсчитывается от левого края#outer
, а не от левого края окна браузера.
- Сохранить и перезагрузить — о чудо! Серый прямоугольник теперь находится на расстоянии 1em от левой границы родительского элемента. Установка
Указание размеров
Абсолютно позиционированные элементы будут сжаты, чтобы соответствовать их содержимому, если вы не укажете их размеры. Вы можете указать ширину, задав свойства left
и right
или задав свойство width
. Вы можете указать высоту, задав свойства top
и bottom
или задав свойство height
.
Любое из этих шести свойств может быть указано в процентах.Проценты по самой своей природе относятся к чему-то другому. В этом случае они относятся к размерам содержащего блока.
Для абсолютно позиционированного элемента процентные значения для свойств left
, right
и width
относятся к ширине содержащего блока. Значения в процентах для свойств top
, bottom
и height
относятся к высоте содержащего блока.
Internet Explorer 6 и старше, а также Opera 8 и старше ошиблись и использовали вместо этого размеры родительского блока .Давайте поэкспериментируем с другим примером, чтобы увидеть, как это может иметь большое значение.
Начните с указания размеров
#inner
с использованием процентных значений — внесите следующие изменения в правило#inner
:#inner { ширина: 50%; высота: 50%; цвет фона: # 999; позиция: абсолютная; слева: 1em; }
Сохраните и перезагрузите, и вы увидите, что серый прямоугольник становится шире и короче (по крайней мере, если вы используете современный браузер).Содержащий блок по-прежнему имеет номер
#outer
, поскольку он имеет позицию: относительно
. Ширина элемента# inner
теперь вдвое меньше, чем#outer
, а его высота составляет половину высоты#outer
.Давайте снова сделаем область просмотра содержащим блоком, чтобы увидеть разницу! Внесите следующие изменения в
#outer
:#outer { маржа: 5em; граница: 1px solid # f00; высота: 4em; положение: статическое; }
Сохранить и перезагрузить — большая разница, а? Серое поле теперь вдвое меньше ширины и вдвое меньше окна браузера.Как видите, знание содержащихся блоков абсолютно необходимо!
Третье измерение — z-index
Естественно рассматривать веб-страницу как двумерную. Технологии еще недостаточно развиты, чтобы 3D-дисплеи стали обычным явлением, поэтому нам приходится довольствоваться шириной и высотой и поддельными 3D-эффектами. Но на самом деле рендеринг CSS происходит в трех измерениях! Это не значит, что вы можете заставить элемент зависать перед монитором — но вы можете делать некоторые другие полезные вещи с позиционированными элементами.
Две основные оси на веб-странице — это горизонтальная ось X и вертикальная ось Y. Начало этой системы координат находится в верхнем левом углу области просмотра, то есть там, где значения X и Y равны 0. Но есть также ось Z, которую мы можем представить как идущую перпендикулярно поверхности монитора. (или на бумагу при печати). Более высокие значения Z указывают на положение «перед» более низкими значениями Z. Значения Z также могут быть отрицательными, что указывает на положение «позади» некоторой точки отсчета (я объясню эту точку отсчета через минуту).
Прежде чем мы продолжим, предупреждаем, что это одна из самых сложных тем в CSS, поэтому не расстраивайтесь, если вы не поймете ее при первом чтении.
Позиционированные элементы (включая относительно позиционированные элементы) визуализируются в рамках так называемого контекста наложения. Элементы в контексте наложения имеют одну и ту же точку отсчета по оси Z. Подробнее об этом я расскажу ниже. Вы можете изменить положение Z (также называемое уровнем стека) позиционированного элемента, используя свойство z-index
.Значение может быть целым числом (которое может быть отрицательным) или одним из ключевых слов auto
или inherit
. Значение по умолчанию — auto
, что означает, что элемент имеет тот же уровень стека, что и его родительский элемент.
Следует отметить, что вы можете указать только позицию индекса вдоль оси Z. Вы не можете заставить один элемент отображаться на 19 пикселей позади или на 5 сантиметров впереди другого. Думайте об этом как о колоде карт: вы можете складывать карты и решать, что пиковый туз должен быть поверх трех бубен — у каждой карты есть свой уровень стека или Z-индекс.
Если вы указываете z-index
как положительное целое число, вы назначаете ему уровень стека «перед» другими элементами в том же контексте стекирования, которые имеют более низкий уровень стека. 0 (ноль) z-index
означает то же самое, что и auto
, но есть разница, к которой я вернусь через минуту. Отрицательное целочисленное значение для z-index
назначает уровень стека «позади» родительского уровня стека.
Когда два элемента в одном контексте стекирования имеют одинаковый уровень стека, тот, который появляется позже в исходном коде, будет отображаться поверх его предыдущих братьев и сестер.
Фактически может быть не менее семи слоев в одном контексте наложения и любое количество элементов в этих слоях, но не беспокойтесь — вам вряд ли придется иметь дело с семью слоями в контексте наложения. Порядок, в котором элементы (все элементы, а не только позиционированные) в одном контексте наложения визуализируются, от задней части к передней, выглядит следующим образом:
- Фон и границы элементов, образующих контекст наложения
- Позиционированные потомки с отрицательными уровнями стека
- Потомки на уровне блока в нормальном потоке
- Плавучие потомки
- Потомки встроенного уровня в нормальном потоке
- Позиционированные потомки с установленным уровнем стека
авто
или (ноль) - Позиционированные потомки с положительными уровнями стека
Выделенные записи — это элементы, уровень стека которых мы можем изменить с помощью свойства z-index
.
Все это довольно сложно представить, поэтому давайте проведем несколько практических экспериментов, чтобы проиллюстрировать Z-индекс.
Начните с добавления следующей выделенной строки в ваш небольшой образец документа:
<тело>