Центрируем неизвестное

Когда приходится центрировать элементы в веб дизайне, информация о самом элементе и его родителе очень облегчает задачу. Ну а когда неизвестно ничего, что делать? Но задача имеет решение.

 

Когда известны размеры элемента, центрирование выполняется легко

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

Допустим, что мы знаем точно ширину и высоту элемента для центрирования, но его родитель может изменять значения габаритов.

Абсолютно позиционируем элемент для центрирования и устанавливаем значения свойств top и left равными 50%, а значения свойств margin-top и margin-left равными отрицательному значению половине высоты и ширины. Это широко известный метод.

 

Более сложный случай: об элементе неизвестно ничего

Сложности начинаются, когда размеры элемента для центрирования неизвестны.

Самый примитивный метод - использовать таблицу:

<table style="width: 100%;">
  <tr>
     <td style="text-align: center; vertical-align: middle;">
          Неизвестный элемент для центрирования.
     </td>
  </tr>
</table>

Если вы заботитесь о семантичности кода, то можно его немного причесать:

<div class="something-semantic">
   <div class="something-else-semantic">
       Неизвестный элемент для центрирования.
   </div>
</div>


И получить результат, схожий с использованием таблицы:

.something-semantic {
   display: table;
   width: 100%;
}
.something-else-semantic {
   display: table-cell;
   text-align: center;
   vertical-align: middle;
}

Таблицы CSS могут быть для вас подходящим решением. Или нет. Таблицы выводятся с небольшими отличиями от обычного блочного элемента div. Например, 100% ширина. Таблица растянется только на ширину, достаточную для вывода содержания внутри, а блочный элемент по умолчанию растянется на всю ширину родительского элемента. Также проблемы могут возникнуть, если вам нужно позиционировать  другой элемент внутри div или что-то еще, действие чего не согласуется с ячейкой таблицы.

Есть другой метод, очень хитрый и дающий тот же результат. Если мы установим элемент призрак с высотой 100%  внутри родительского элемента, а затем используем свойство vertical-align: middle для обоих внутренних элементов (центрируемый элемент и элемент призрак), то получим тот же эффект.

Будет ли элемент призрак выходить за рамки требований семантичности кода? Нет, он будет псевдо-элементом.

/* Это родитель. Он может иметь любую ширину и высоту */
.block {
  text-align: center;
}

/* Элемент призрак, нужен для центрирования */
.block:before {
  content: '';
  display: inline-block;
  height: 100%;
  vertical-align: middle;
  margin-right: -0.25em; /* Задаем небольшой отступ */
}

/* Элемент для центрирования.
   Он может иметь любую ширину и высоту */
.centered {
  display: inline-block;
  vertical-align: middle;
  width: 300px;
}

Техника использования элемента призрака может стать стандартом де факто на годы. Но в действительности, она является тем же, что и трюк с таблицами. У нее есть хорошая поддержка в браузерах (включая IE 8+). IE 7 не поддерживает псевдо-элементы. Но он не поддерживает и таблицы CSS. Если требуется поддержка в IE <= 7 , то наступает время <table> (или эквивалентных не семантических решений на основе <span> или других элементов для организации призрака).


Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/FeDUwEid2WE/lessons.php

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

Центрируем неизвестное | | 2012-06-19 12:01:41 | | Статьи Web-мастеру | | Когда приходится центрировать элементы в веб дизайне, информация о самом элементе и его родителе очень облегчает задачу. Ну а когда неизвестно ничего, что делать? Но задача имеет решение. Когда | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: