Опубликован: 01.09.2010 | Уровень: для всех | Доступ: платный | ВУЗ: Сибирский федеральный университет
Лекция 5:

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

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

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

Не существует такого вида позиционирования как "плавающий", и "плавающие" элементы должны быть позиционированы статически (что автоматически достигается при отсутствии определения свойства 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. Позиционирование на основе плавающих элементов. Плавающий блочный элемент и обтекающий его блочный элемент
Плавающий блочный элемент и обтекающий его блочный элемент

Рис. 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. Плавающий блочный элемент и обтекающий его слева текст
Плавающий блочный элемент и обтекающий его слева текст

Рис. 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. Методы центрирования элементов на странице. Горизонтальное центрирование разметки
Горизонтальное центрирование разметки

Рис. 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. Вертикальное центрирование
Вертикальное центрирование

Рис. 6.7. Вертикальное центрирование
Упражнение. Разместите в центре страницы изображение с подписью.
Юрий Шах
Юрий Шах

Профессиональный веб-дизайн: Введение в современные веб-технологии
Самостоятельная работа 4

"3. Создание внешней таблицы.

Теперь создайте таблицу с двумя строками. Во второй строке создайте две ячейки - в первую переместите таблицу цифр, а во вторую - таблицу знаков."

Как в ячейку <td> поместить таблицу? Таблица же сама состоит из ячеек. Исходя из задания следует, что <td> может быть родителем для <td>, но это противоречит правилам HTML?
Если не прав - поправьте.
Также прошу разъяснить, как именно выполнить занное условие - поместить в табличную ячейку таблицу цифр, а в другую ячейку - таблицу знаков? 

Елена Сапегова
Елена Сапегова

После прохождения теоретической части пришло письмо об окончании теоретической части курса, будет ли практическая часть?

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Галина Матрук
Галина Матрук
Молдова, Республика, Кишинев, UTM, 2010