Введение в современные веб-технологии

Позиционирование средствами CSS

Разбить на страницы
Показывать лекцию целиком

CSS предлагает четыре типа позиционирования.

  • Абсолютное ( position:absolute; ). Такое позиционирование позволяет определять расположение элемента, задавая позиции left, right, top или bottom в любых единицах измерения CSS. Кроме того, абсолютно размещенные элементы полностью изъяты из потока страницы, определенного HTML-кодом: остальные элементы на странице размещаются без учёта абсолютно позиционированных элементов.
  • Относительное ( position:relative; ). Элемент с таким позиционированием размещается относительно его текущего положения в потоке HTML. Так, например, устанавливая значение top равным 20 пикселов и значение left равным 200 пикселов для относительно размещенного заголовка, вы переместите его на 20 пикселов вниз и 200 пикселов влево от того места, где он появился бы на странице. В отличие от абсолютного позиционирования, здесь остальные элементы страницы регулируют старое HTML-размещение относительно позиционированного объекта. Соответственно, перемещение объекта с относительным позиционированием оставляет "дыру", на месте которой он должен был находиться. Основная польза относительного позиционирования не в том, чтобы переместить элемент, а в установке новой точки привязки для абсолютно позиционированных элементов, которые вложены в него.
  • Фиксированное ( position:fixed; ). Фиксированный элемент закрепляется в определенном месте на экране. Определение такого позиционирования играет ту же роль, что и установка значения fixed для свойства background-attachment при позиционировании фоновых изображений. Когда посетитель прокручивает страницу, фиксированные элементы остаются на экране как абзацы и заголовки, в то время как фотографии прокручиваются вместе со страницей. Использование фиксированных элементов — отличный способ создать неподвижное боковое меню или воспроизвести эффект HTML-фреймов, где только определенная часть страницы прокручивается.
  • Статическое позиционирование соответствует нормальному потоку HTML.
  • Статическое и абсолютное позиционирование

    Основной механизм позиционирования. Нормальный поток.

    В отсутствие каких-либо дополнительных указаний (в виде правил CSS или атрибутов HTML) браузер размещает содержимое на странице по следующим правилам:

  • Ширина блочного элемента равна ширине его контейнера; ширина строчного элемента такова, как требует его содержимое.
  • Высота и для блочных, и для строчных элементов равна высоте их содержимого.
  • Браузер размещает элементы в их контейнерах слева направо, затем сверху вниз, начиная с контейнера body.
  • body {
          background-image: url(Pos_divs_body.png);
        }
        div {
          color: Blue;
          border: solid 1px blue;
          margin: 2px;
          padding: 4px;
          font-size: large;
        }
        div div {
          color: Red;
          border: solid 1px red;
        }
      ...
      <div>
        Это текст в контейнере div - Lorem ipsum...
        <div>
          Это текст в контейнере div - Lorem ipsum... </div>
        Это текст в контейнере div - Lorem ipsum...
      </div>
    (рис 6.1) Нормальный поток Упражнение.Откройте пример в отдельном окне и убедитесь, что все div-контейнеры всегда занимают всю ширину окна, независимо от её величины. Уменьшите ширину контейнеров div (например, width:40%; ) и убедитесь, что появившееся пространство остаётся незаполненным.

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

    Однако в нормальном потоке невозможно разместить два (и более) смежных по горизонтали блока: любой блочный элемент всегда занимает всю ширину своего контейнера. Невозможно дать браузеру команду: "Элемент X следует разместить справа (слева) от элемента Y", не прибегая к использованию других механизмов.

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

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

    <style type="text/css">
            body {
                padding: 0;
                margin: 0;
            }
            div {
                border: solid 1px blue;
                padding: 4px;
            }
            .static {
                color: Blue;
                padding: 2em;
            }
            .abs {
                position: absolute;
                top: 0px; right: 0px;
                color: Red;
                border: solid 1px red;
            }
        </style>
       ...
        <div class="static">
            Это текст в обычном (статически позиционированном) контейнере div - Lorem ipsum...
            <div class="abs">
                Этот контейнер div позиционирован абсолютно вправо (top: 0px; right: 0px;) - Lorem ipsum dolor sit amet
            </div>
        </div>
    (рис 6.2) Абсолютно позиционированный блок в правом верхнем углу
    <style type="text/css">
        body {
          padding: 0;
          margin: 0;
        }
        div {
          border: solid 2px blue;
          padding: 4px;
        }
        .static {
          position: absolute;
          color: Blue;
          padding: 2em;
        }
        .abs {
          position: absolute;
          bottom: 0px;
          right: 0px;
          color: Red;
          border: solid 2px red;
        }
      ... 
      <div class="static">
        Это текст в <b>абсолютно позиционированном</b> контейнере div - Lorem ipsum...
        <div class="abs">
          Этот контейнер div позиционирован абсолютно вправо и вниз (bottom: 0px; right: 0px;)
          - Lorem ipsum dolor sit amet
        </div>
      </div>
    (рис 6.3) Абсолютно позиционированный блок в абсолютно позиционированном блоке

    Очевидно, абсолютное позиционирование даёт полную свободу поместить любой элемент в любую точку - достаточно знать её координаты, выраженные в какой-либо из единиц измерения CSS. Однако часто координаты заранее неизвестны (они могут зависеть, например, от высоты текстового блока). В этом случае средства абсолютного позиционирования недостаточно. Нет способа выразить, например, такую команду: "Элемент X следует поместить слева (справа, сверху, снизу) от элемента Y".

    Позиционирование на основе плавающих элементов. Центрирование

    Позиционирование на основе плавающих элементов.

    Не существует такого вида позиционирования как "плавающий", и "плавающие" элементы должны быть позиционированы статически (что автоматически достигается при отсутствии определения свойства position ). Однако свойство float позволяет модифицировать нормальный поток ещё одним способом. "Плавающий" (floating) элемент примыкает к левой ( float:left ) либо правой ( float:right ) границе своего контейнера, а последующие элементы (как блочные, так и строчные) обтекают его с противоположной стороны. Это нашло чрезвычайно широкое применение в CSS-вёрстке (об этом говорится в отдельной лекции).

    div {
          width: 40%;
          float: left;
          margin: 3px;
          padding:3px;
          border:solid 1px blue;
          color:Blue;
        }
      ...
      <div>
        Это плавающий контейнер div - Lorem ipsum... </div>
      <div>
        Это плавающий контейнер div - Lorem ipsum ...</div>
    (рис 6.4) Плавающий блочный элемент и обтекающий его блочный элемент
    .floating {
          float: right;
          width: 40%;
          margin-right: 3px;
          padding: 3px;
          border: solid 1px blue;
          color: Blue;
        }
      ... 
      <div>
     
        <div class="floating">
          Это плавающий контейнер div - Lorem ipsum...
        </div>
     
        Это текст, обтекающий плавающий контейнер - Lorem ipsum ...
      </div>
    (рис 6.5) Плавающий блочный элемент и обтекающий его слева текст Упражнения.
  • Уберите указание ширины контейнеров. Почему пропал эффект плавающей разметки?
  • Добавьте третий контейнер, добейтесь размещения всех контейнеров в один горизонтальный ряд.
  • Что произойдёт, если упаковать все div-контейнеры в ещё один div-контейнер?
  • В примере с обтекающим текстом увеличьте отступ для плавающего контейнера (чтобы обтекающий его текст располагался дальше от рамки). Контейнер в рамке не должен опуститься вниз.
  • Центрирование элементов на странице

    Если задать блочному элементу значение auto в свойствах margin-left и margin-right, то он центрируется по горизонтали в своём контейнере. При этом у элемента должна быть задана ширина. Для старых браузеров (IE5-) этот приём не срабатывает, и тогда применяются менее изящные способы. Чтобы центрировать строчный элемент (например, img), его обычно помещают в блочный (либо назначают ему свойство display:block, тем самым делая блочным его самого).

    Для вертикального центрирования применяют другую технологию: позиционируют блочный элемент абсолютно левым верхним углом в центр экрана ( top:50%; left:50%; ) и затем смещают влево и вверх путём задания отрицательных отступов.

    div {
          margin-left: auto;
          margin-right: auto;
          width: 300px;
          background: #ccc;
        }
      ...
      <div>
        Если задать блочному элементу значение auto в свойствах margin-left и
        margin-right, то он центрируется по горизонтали в своём контейнере...
      </div>
    (рис 6.6) Горизонтальное центрирование разметки
    img {
            width:747px;
            height:500px;
            position:absolute;
            top:50%;
            left:50%;
            margin-top:-250px;
            margin-left:-373px;
        }
      ...
       <div>
        <img src="Cypripedium M.jpg" alt="Cypripedium macranthos Sw" />
      </div>
    (рис 6.7) Вертикальное центрирование Упражнение. Разместите в центре страницы изображение с подписью.

    Относительное и фиксированное позиционирование. Наложение элементов

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

    Один из эффективных приёмов позиционирования состоит в том, чтобы размещать маленькие объекты относительно других объектов на странице, например, блок внутри блока. Для этого блок-контейнер позиционируют относительно (при этом он остаётся на месте и не выбивается из нормального потока), а внутренний блок - абсолютно. Точнее, абсолютная позиция отсчитывается от первого блока в ряду контейнеров, который имеет позиционирование absolute, relative или fixed (но не static ). Если такого контейнера нет, то им считается окно. Пример 6.8 показывает размещение абсолютно позиционированного элемента span в правом нижнем углу его контейнера div.

    div {
          width: 70%;
          border: 4px dotted gray;
          padding: 4px;
          padding-bottom: 30px;
          position: relative;
          margin: 10px auto;
        }
        div span {
          position: absolute;
          bottom: 0;
          right: 0;
          background: #ddd;
          padding: 2px;
          margin: 2px;
        }
      ...
      <div>
        <span>Внутренний блок 1</span> Один из эффективных приёмов позиционирования
        состоит в том, чтобы размещать маленькие объекты относительно других объектов
        на странице, например, блок внутри блока. Для этого блок-контейнер позиционируют
        относительно (при этом он остаётся на месте и не выбивается из нормального
        потока), а внутренний блок - абсолютно.
      </div>
    
      <div>
        <span>Внутренний блок 2</span> Данный пример показывает размещение абсолютно
        позиционированных элементов span в правых нижних углах их контейнеров.
        Внутренние блоки позиционированы посредством задания свойств bottom: 0;
        right: 0;
      </div>
    (рис 6.8) Применение относительного позиционирования Упражнение. Позиционируйте элемент span в правый верхний угол секции. Подберите для секции подходящее значение отступа.

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

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

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

    Часто бывает нужно, чтобы некоторые элементы страницы были постоянно видимыми, например, навигационная панель, поле для поиска или логотип сайта, а, как известно, большинство веб-страниц длиннее высоты экрана. Используя значение fixed свойства position, вы можете зафиксировать некоторые элементы в определенных местах, разрешая при этом пользователям прокручивать содержимое очень длинной веб-страницы. Фиксированное позиционирование работает во многом подобно абсолютному — вы точно так же можете использовать свойства top, bottom, left или right для размещения элемента. Как и абсолютное, фиксированное позиционирование удаляет элемент из потока HTML. Он "плавает" над другими частями страницы, которые просто игнорируют его. Фиксированное позиционирование не работает в Internet Explorer версий 6 и ниже.

    div {
          margin-left: 210px;
        }
        .fixed {
          position: fixed;
          left: 10px;
          top: 100px;
          list-style-position: inside;
          margin: 10px;
          border: 1px solid black;
          background: #ccc;
          padding: 3px;
          width: 170px;
        }
      ...
      <ul class="fixed">
        <li>Это список,</li>
        <li>позиционированный фиксированно</li>
        <li>в точке (10px; 100px)</li>
      </ul>
    
      <div>
        <p>
          Это длинный блок текста, и для его полного просмотра нужно прокручивать
          страницу вниз. Фиксированно позиционированный список при этом остаётся
          на месте.
        </p>
      ...
      </div>
    (рис 6.9) Применение фиксированного позиционирования Упражнение. Переместите фиксированный блок в правую часть страницы. Подберите отступ для основного содержимого.

    Наложение элементов

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

    img {
          position: absolute;
          width: 50%;
        }
        img:hover {
          z-index: 1000;
        }
      ...
      <img src="Crataegus.jpg" alt="Crataegus" title="Crataegus" />
      <img style="top: 10%; right: 0" src="Cypripedium C.jpg" alt="Cypripedium C" title="Cypripedium calceolus" />
      <img style="top: 40%; right: 30%;" src="Cypripedium M.jpg" alt="Cypripedium M" title="Cypripedium macranthos Sw" />
    (рис 6.10) Наложение элементов Упражнение. Измените порядок наложения изображений на противоположный, задав каждому из них атрибут z-index. Упражнения.
  • Поместите всплывающую подсказку а) в левый верхний угол изображения; б) ниже левого нижнего угла.
  • Уберите встроенные стили у всех секций и установите свойство position в relative.
  • Вопросы

  • Перечислите типы позиционирования CSS.
  • Каковы правила размещения элементов в нормальном потоке?
  • Охарактеризуйте абсолютное позиционирования и область его применения.
  • Как задаётся позиционирование на основе плавающих элементов?
  • Для чего обычно применяется относительное позиционирование?
  • Как достичь центрирования элемента на странице по горизонтали и по вертикали?
  • Как работает фиксированное позиционирование?
  • Как можно регулировать порядок наложения элементов?
  • Страницы:

    CSS предлагает четыре типа позиционирования.

  • Абсолютное ( position:absolute; ). Такое позиционирование позволяет определять расположение элемента, задавая позиции left, right, top или bottom в любых единицах измерения CSS. Кроме того, абсолютно размещенные элементы полностью изъяты из потока страницы, определенного HTML-кодом: остальные элементы на странице размещаются без учёта абсолютно позиционированных элементов.
  • Относительное ( position:relative; ). Элемент с таким позиционированием размещается относительно его текущего положения в потоке HTML. Так, например, устанавливая значение top равным 20 пикселов и значение left равным 200 пикселов для относительно размещенного заголовка, вы переместите его на 20 пикселов вниз и 200 пикселов влево от того места, где он появился бы на странице. В отличие от абсолютного позиционирования, здесь остальные элементы страницы регулируют старое HTML-размещение относительно позиционированного объекта. Соответственно, перемещение объекта с относительным позиционированием оставляет "дыру", на месте которой он должен был находиться. Основная польза относительного позиционирования не в том, чтобы переместить элемент, а в установке новой точки привязки для абсолютно позиционированных элементов, которые вложены в него.
  • Фиксированное ( position:fixed; ). Фиксированный элемент закрепляется в определенном месте на экране. Определение такого позиционирования играет ту же роль, что и установка значения fixed для свойства background-attachment при позиционировании фоновых изображений. Когда посетитель прокручивает страницу, фиксированные элементы остаются на экране как абзацы и заголовки, в то время как фотографии прокручиваются вместе со страницей. Использование фиксированных элементов — отличный способ создать неподвижное боковое меню или воспроизвести эффект HTML-фреймов, где только определенная часть страницы прокручивается.
  • Статическое позиционирование соответствует нормальному потоку HTML.
  • Статическое и абсолютное позиционирование

    Основной механизм позиционирования. Нормальный поток.

    В отсутствие каких-либо дополнительных указаний (в виде правил CSS или атрибутов HTML) браузер размещает содержимое на странице по следующим правилам:

  • Ширина блочного элемента равна ширине его контейнера; ширина строчного элемента такова, как требует его содержимое.
  • Высота и для блочных, и для строчных элементов равна высоте их содержимого.
  • Браузер размещает элементы в их контейнерах слева направо, затем сверху вниз, начиная с контейнера body.
  • body {
          background-image: url(Pos_divs_body.png);
        }
        div {
          color: Blue;
          border: solid 1px blue;
          margin: 2px;
          padding: 4px;
          font-size: large;
        }
        div div {
          color: Red;
          border: solid 1px red;
        }
      ...
      <div>
        Это текст в контейнере div - Lorem ipsum...
        <div>
          Это текст в контейнере div - Lorem ipsum... </div>
        Это текст в контейнере div - Lorem ipsum...
      </div>
    (рис 6.1) Нормальный поток Упражнение.Откройте пример в отдельном окне и убедитесь, что все div-контейнеры всегда занимают всю ширину окна, независимо от её величины. Уменьшите ширину контейнеров div (например, width:40%; ) и убедитесь, что появившееся пространство остаётся незаполненным.

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

    Однако в нормальном потоке невозможно разместить два (и более) смежных по горизонтали блока: любой блочный элемент всегда занимает всю ширину своего контейнера. Невозможно дать браузеру команду: "Элемент X следует разместить справа (слева) от элемента Y", не прибегая к использованию других механизмов.

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

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

    <style type="text/css">
            body {
                padding: 0;
                margin: 0;
            }
            div {
                border: solid 1px blue;
                padding: 4px;
            }
            .static {
                color: Blue;
                padding: 2em;
            }
            .abs {
                position: absolute;
                top: 0px; right: 0px;
                color: Red;
                border: solid 1px red;
            }
        </style>
       ...
        <div class="static">
            Это текст в обычном (статически позиционированном) контейнере div - Lorem ipsum...
            <div class="abs">
                Этот контейнер div позиционирован абсолютно вправо (top: 0px; right: 0px;) - Lorem ipsum dolor sit amet
            </div>
        </div>
    (рис 6.2) Абсолютно позиционированный блок в правом верхнем углу
    <style type="text/css">
        body {
          padding: 0;
          margin: 0;
        }
        div {
          border: solid 2px blue;
          padding: 4px;
        }
        .static {
          position: absolute;
          color: Blue;
          padding: 2em;
        }
        .abs {
          position: absolute;
          bottom: 0px;
          right: 0px;
          color: Red;
          border: solid 2px red;
        }
      ... 
      <div class="static">
        Это текст в <b>абсолютно позиционированном</b> контейнере div - Lorem ipsum...
        <div class="abs">
          Этот контейнер div позиционирован абсолютно вправо и вниз (bottom: 0px; right: 0px;)
          - Lorem ipsum dolor sit amet
        </div>
      </div>
    (рис 6.3) Абсолютно позиционированный блок в абсолютно позиционированном блоке

    Очевидно, абсолютное позиционирование даёт полную свободу поместить любой элемент в любую точку - достаточно знать её координаты, выраженные в какой-либо из единиц измерения CSS. Однако часто координаты заранее неизвестны (они могут зависеть, например, от высоты текстового блока). В этом случае средства абсолютного позиционирования недостаточно. Нет способа выразить, например, такую команду: "Элемент X следует поместить слева (справа, сверху, снизу) от элемента Y".

    Позиционирование на основе плавающих элементов. Центрирование

    Позиционирование на основе плавающих элементов.

    Не существует такого вида позиционирования как "плавающий", и "плавающие" элементы должны быть позиционированы статически (что автоматически достигается при отсутствии определения свойства position ). Однако свойство float позволяет модифицировать нормальный поток ещё одним способом. "Плавающий" (floating) элемент примыкает к левой ( float:left ) либо правой ( float:right ) границе своего контейнера, а последующие элементы (как блочные, так и строчные) обтекают его с противоположной стороны. Это нашло чрезвычайно широкое применение в CSS-вёрстке (об этом говорится в отдельной лекции).

    div {
          width: 40%;
          float: left;
          margin: 3px;
          padding:3px;
          border:solid 1px blue;
          color:Blue;
        }
      ...
      <div>
        Это плавающий контейнер div - Lorem ipsum... </div>
      <div>
        Это плавающий контейнер div - Lorem ipsum ...</div>
    (рис 6.4) Плавающий блочный элемент и обтекающий его блочный элемент
    .floating {
          float: right;
          width: 40%;
          margin-right: 3px;
          padding: 3px;
          border: solid 1px blue;
          color: Blue;
        }
      ... 
      <div>
     
        <div class="floating">
          Это плавающий контейнер div - Lorem ipsum...
        </div>
     
        Это текст, обтекающий плавающий контейнер - Lorem ipsum ...
      </div>
    (рис 6.5) Плавающий блочный элемент и обтекающий его слева текст Упражнения.
  • Уберите указание ширины контейнеров. Почему пропал эффект плавающей разметки?
  • Добавьте третий контейнер, добейтесь размещения всех контейнеров в один горизонтальный ряд.
  • Что произойдёт, если упаковать все div-контейнеры в ещё один div-контейнер?
  • В примере с обтекающим текстом увеличьте отступ для плавающего контейнера (чтобы обтекающий его текст располагался дальше от рамки). Контейнер в рамке не должен опуститься вниз.
  • Центрирование элементов на странице

    Если задать блочному элементу значение auto в свойствах margin-left и margin-right, то он центрируется по горизонтали в своём контейнере. При этом у элемента должна быть задана ширина. Для старых браузеров (IE5-) этот приём не срабатывает, и тогда применяются менее изящные способы. Чтобы центрировать строчный элемент (например, img), его обычно помещают в блочный (либо назначают ему свойство display:block, тем самым делая блочным его самого).

    Для вертикального центрирования применяют другую технологию: позиционируют блочный элемент абсолютно левым верхним углом в центр экрана ( top:50%; left:50%; ) и затем смещают влево и вверх путём задания отрицательных отступов.

    div {
          margin-left: auto;
          margin-right: auto;
          width: 300px;
          background: #ccc;
        }
      ...
      <div>
        Если задать блочному элементу значение auto в свойствах margin-left и
        margin-right, то он центрируется по горизонтали в своём контейнере...
      </div>
    (рис 6.6) Горизонтальное центрирование разметки
    img {
            width:747px;
            height:500px;
            position:absolute;
            top:50%;
            left:50%;
            margin-top:-250px;
            margin-left:-373px;
        }
      ...
       <div>
        <img src="Cypripedium M.jpg" alt="Cypripedium macranthos Sw" />
      </div>
    (рис 6.7) Вертикальное центрирование Упражнение. Разместите в центре страницы изображение с подписью.

    Относительное и фиксированное позиционирование. Наложение элементов

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

    Один из эффективных приёмов позиционирования состоит в том, чтобы размещать маленькие объекты относительно других объектов на странице, например, блок внутри блока. Для этого блок-контейнер позиционируют относительно (при этом он остаётся на месте и не выбивается из нормального потока), а внутренний блок - абсолютно. Точнее, абсолютная позиция отсчитывается от первого блока в ряду контейнеров, который имеет позиционирование absolute, relative или fixed (но не static ). Если такого контейнера нет, то им считается окно. Пример 6.8 показывает размещение абсолютно позиционированного элемента span в правом нижнем углу его контейнера div.

    div {
          width: 70%;
          border: 4px dotted gray;
          padding: 4px;
          padding-bottom: 30px;
          position: relative;
          margin: 10px auto;
        }
        div span {
          position: absolute;
          bottom: 0;
          right: 0;
          background: #ddd;
          padding: 2px;
          margin: 2px;
        }
      ...
      <div>
        <span>Внутренний блок 1</span> Один из эффективных приёмов позиционирования
        состоит в том, чтобы размещать маленькие объекты относительно других объектов
        на странице, например, блок внутри блока. Для этого блок-контейнер позиционируют
        относительно (при этом он остаётся на месте и не выбивается из нормального
        потока), а внутренний блок - абсолютно.
      </div>
    
      <div>
        <span>Внутренний блок 2</span> Данный пример показывает размещение абсолютно
        позиционированных элементов span в правых нижних углах их контейнеров.
        Внутренние блоки позиционированы посредством задания свойств bottom: 0;
        right: 0;
      </div>
    (рис 6.8) Применение относительного позиционирования Упражнение. Позиционируйте элемент span в правый верхний угол секции. Подберите для секции подходящее значение отступа.

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

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

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

    Часто бывает нужно, чтобы некоторые элементы страницы были постоянно видимыми, например, навигационная панель, поле для поиска или логотип сайта, а, как известно, большинство веб-страниц длиннее высоты экрана. Используя значение fixed свойства position, вы можете зафиксировать некоторые элементы в определенных местах, разрешая при этом пользователям прокручивать содержимое очень длинной веб-страницы. Фиксированное позиционирование работает во многом подобно абсолютному — вы точно так же можете использовать свойства top, bottom, left или right для размещения элемента. Как и абсолютное, фиксированное позиционирование удаляет элемент из потока HTML. Он "плавает" над другими частями страницы, которые просто игнорируют его. Фиксированное позиционирование не работает в Internet Explorer версий 6 и ниже.

    div {
          margin-left: 210px;
        }
        .fixed {
          position: fixed;
          left: 10px;
          top: 100px;
          list-style-position: inside;
          margin: 10px;
          border: 1px solid black;
          background: #ccc;
          padding: 3px;
          width: 170px;
        }
      ...
      <ul class="fixed">
        <li>Это список,</li>
        <li>позиционированный фиксированно</li>
        <li>в точке (10px; 100px)</li>
      </ul>
    
      <div>
        <p>
          Это длинный блок текста, и для его полного просмотра нужно прокручивать
          страницу вниз. Фиксированно позиционированный список при этом остаётся
          на месте.
        </p>
      ...
      </div>
    (рис 6.9) Применение фиксированного позиционирования Упражнение. Переместите фиксированный блок в правую часть страницы. Подберите отступ для основного содержимого.

    Наложение элементов

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

    img {
          position: absolute;
          width: 50%;
        }
        img:hover {
          z-index: 1000;
        }
      ...
      <img src="Crataegus.jpg" alt="Crataegus" title="Crataegus" />
      <img style="top: 10%; right: 0" src="Cypripedium C.jpg" alt="Cypripedium C" title="Cypripedium calceolus" />
      <img style="top: 40%; right: 30%;" src="Cypripedium M.jpg" alt="Cypripedium M" title="Cypripedium macranthos Sw" />
    (рис 6.10) Наложение элементов Упражнение. Измените порядок наложения изображений на противоположный, задав каждому из них атрибут z-index. Упражнения.
  • Поместите всплывающую подсказку а) в левый верхний угол изображения; б) ниже левого нижнего угла.
  • Уберите встроенные стили у всех секций и установите свойство position в relative.
  • Вопросы

  • Перечислите типы позиционирования CSS.
  • Каковы правила размещения элементов в нормальном потоке?
  • Охарактеризуйте абсолютное позиционирования и область его применения.
  • Как задаётся позиционирование на основе плавающих элементов?
  • Для чего обычно применяется относительное позиционирование?
  • Как достичь центрирования элемента на странице по горизонтали и по вертикали?
  • Как работает фиксированное позиционирование?
  • Как можно регулировать порядок наложения элементов?
  • Вернуться к учебному плану