Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Позиционирование в CSS кажется довольно простым. Указываете какой блок и где должен находиться. Однако всё не
так просто, как кажется на первый взгляд. Есть несколько моментов, которые могут запутать новичков. Вы сможете
извлечь из позиционирования гораздо больше пользы, если детально разберётесь как оно работает.
Прежде чем приступить, советую вам прочитать статью Box-модель в CSS. В двух словах: каждый
элемент в html - это прямоугольник, для которого можно указать величины внутренних и внешних отступов, а также
границу, которая разделяет их.
Схемы позиционирования определяют где должен располагаться этот прямоугольник, а также как он должен влиять на
элементы вокруг себя.
Свойство position в CSS может принимать пять значений:
Значение static используется по умолчанию. Любой элемент с позиционированием static находится
в общем потоке документа. Правила для его размещения определяются Box-моделью. Для таких элементов, свойства
top, right, bottom и left будут игнорироваться. Для того, чтобы использовать
эти свойства, позиционирование элемента должно быть абсолютным (absolute), относительным (relative) или
фиксированным (fixed).
Значение inherit, как и во всех остальных свойствах CSS, используется для того, чтобы элемент
использовал тоже самое значение, что и родительский элемент.
Абсолютное позиционирование удаляет элемент из общего потока документа. Что касается элементов вокруг, то
в этом случае они просто игнорируют искомый, как будто ему установлено свойство display: none;.
Если вы не хотите чтобы пространство для такого элемента заполнялось другими элементами,
то вам надо придумать другой подход.
Вы устанавливаете расположение элемента с абсолютным позиционированием, используя свойства top,
left, right и bottom. Вам достаточно указать два из них, top или bottom и
left или right. Если ни одного свойства не указано, то устанавливается 0 для пары top-left.
Ключевой момент в абсолютном позиционировании - это понимание того, что является точкой отсчёта. Если свойству
top указано значение 20px, то откуда их необходимо отсчитывать.
Ответ прост: такие элементы позиционируются относительно ближайшего родительского элемента, для которого задано
позиционирование отличное от static. Если такого элемента нет, то элемент позиционируется относительно основного документа.
То есть при установки абсолютного позиционирования, CSS сообщает браузеру, чтобы он посмотрел на родительский
элемент и, если его позиционирование не статическое, то надо выровнять текущий элемент относительно него.
Относительно позиционированные элементы, размещаются на основе своей же
позиции, обычный сдвиг относительно
своего нормального расположения. Это похоже на то, как если бы вы добавили элементу внешние отступы с помощью
свойства margin. Однако есть одно существенное различие: соседние элементы, в случае использования
позиционирования, не учитывают этот сдвиг.
Представьте себе это так: некое изображение сдвигается, а на его месте остаётся "призрак", все элементы располагаются
относительно этого "призрака". Это позволяет нам накладывать элементы друг на друга.
Таким образом, элементы с относительным позиционированием, взяты из нормального потока элемента, но по-прежнему
оказывают влияние на расположение соседних элементов, которые ведут себя так, что исходный элемент всё ещё
находится в потоке документа.
В этом случае мы не должны задавать вопрос относительно чего здесь позиционируется элемент. Ответ всегда:
нормальный поток документа. Очень похоже на то, что вы добавили внешний отступ к элементу, но в то же время не
повлияли на соседние элементы.
Фиксированное позиционирование действует подобно абсолютному, с небольшими различиями.
Во-первых, элемент с фиксированным позиционированием всегда располагается относительно окна браузера, родительские
элементы при этом игнорируются.
Второе отличие исходит из его названия. Фиксированные элементы зафиксированы на странице. Они не смещаются при её
прокручивании.
Страница сайта двумерна. У неё есть ширина и высота. Z-index добавляет третье измерение, глубину.
Чем выше этот индекс тем выше на странице расположен элемент. С помощью него мы можем добиться чтобы один
элемент располагался поверх другого. По умолчанию, его значение - ноль. Отрицательные значения также допустимы.
На самом деле, z-index гораздо сложнее, чем я его здесь описываю, но это тема для отдельной статьи. Сейчас,
главное запомнить саму идею третьего измерения и то, что только позиционируемые элементы могут использовать
это свойство.
Рассмотрим несколько общих проблем, связанных с позиционированием, а также несколько слов об их решении.
Одновременно можно использовать position:relative и float.
Когда одновременно указывается position:absolute и float, то применяется не последнее указанное свойство. В этом случае, независимо от порядка следования этих стилей, применяется position:absolute, а итоговое (или вычисленное) значение свойства float устанавливается в none, независимо от начального значения, т.е. игнорируется.
В IE6 и IE7 есть ещё одна проблема с z-index-ом. IE смотрит на родительский элемент для определения
в какой группе элементов находится вершина стека, остальные браузеры используют глобальный контекст. Например:
<div style="z-index: 0">
<p style="z-index: 10"></p>
</div>
<thumb style="z-index: 5" />
Мы ожидаем, что параграф будет находиться выше, чем изображение, поскольку его z-index больше. Однако
IE6 и IE7 располагают выше картинку, поскольку они находятся в разных стеках документа. Один стек для div,
второй для thumb, а у картинки z-index выше, чем у div-а.
Свойство position устанавливает поведение расположения элемента в соответствии с одной из схем
позиционирования. Доступные значения свойства: absolute, relative, fixed, static
(по умолчанию) и inherit.
Схемы позиционирования определяют правила размещения элемента на web-странице, а также влияние на расположение
соседних элементов.
Свойство z-index может быть применено только для элементов с установленым свойством position.
Оно добавляет третье измерение на странице и устанавливает порядок стека элементов.
Свойство position кажется лёгким для восприятия, но работает немного иначе, чем кажется с первого взгляда.
Зачастую разработчики думают что им необходимо относительное позиционирование, хотя скорее всего надо использовать
абсолютное. В основном при вёрстке используется свойство float, а свойство position необходимо
для элементов, которые вы хотите "вырвать" из общего потока документа.
|
|