Выравнивание картинки по вертикали

Все способы вертикального выравнивания в CSS


Я думаю, многие из вас, кому приходилось заниматься версткой, сталкивались с необходимостью выравнивать элементы по вертикали и знают, какие сложности возникают при выравнивании элемента по центру.
Да, для вертикального выравнивания в CSS есть специальное свойство vertical-align с множеством значений. Однако на практике оно работает совсем не так, как ожидается. Давайте попробуем в этом разобраться.
Сравним следующие подходы. Выравнивание с помощью:

  • таблицы,
  • отступов,
  • line-height,
  • растягивания,
  • отрицательного margin,
  • transform,
  • псевдоэлемента,
  • flexbox.

В качестве иллюстрации рассмотрим следующий пример.

Есть два элемента div, при этом один из них вложен в другой. Дадим им соответствующие классы − outer и inner.
<div class=»outer»> <div class=»inner»></div> </div>
Задача состоит в том, чтобы выровнять внутренний элемент по центру внешнего элемента.
Для начала рассмотрим случай, когда размеры внешнего и внутреннего блока известны. Добавим внутреннему элементу правило display: inline-block, а внешнему − text-align: center и vertical-align: middle.
Нпомню, что выравнивание применяется только к элементам, которые имеют режим отображения inline или inline-block.
Зададим блокам размеры, а также фоновые цвета, чтобы видеть их границы.
.outer { width: 200px; height: 200px; text-align: center; vertical-align: middle; background-color: #ffc; } .inner { display: inline-block; width: 100px; height: 100px; background-color: #fcc; }
После применения стилей мы увидим, что внутренний блок выровнялся по горизонтали, а по вертикали нет:
http://jsfiddle.net/c1bgfffq/
Почему так произошло? Дело в том, что свойство vertical-align влияет на выравнивание самого элемента, а не его содержимого (кроме случаев, когда оно применяется к ячейкам таблицы). Поэтому применение данного свойства к внешнему элементу ничего не дало. Более того, применение этого свойства к внутреннему элементу также ничего не даст, поскольку строчные блоки (inline-block) выравниваются по вертикали относительно соседних блоков, а в нашем случае у нас один строчный блок.
Для решения данной проблемы существует несколько техник. Ниже подробнее рассмотрим каждую из них.

Какой способ выбрать?

Нужно исходить из постановки задачи:

  • Для вертикального выравнивания текста лучше использовать вертикальные отступы или свойство line-height.
  • Для абсолютно позиционированных элементов с известной высотой (например, иконок) идеально подойдет способ с отрицательным свойством margin-top.
  • Для более сложных случаев, когда неизвестна высота блока, нужно использовать псевдоэлемент или свойство transform.
  • Ну а если вам повезло настолько, что не нужно поддерживать старые версии браузера IE, то, конечно, лучше использовать Flexbox.

Выравнивание изображения

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

Есть множество вариантов выравнивания картинок относительно текста, и за все отвечает атрибут align элемента IMG. Он позволяет выравнивать изображения с правой, с левой стороны окна или относительно элементов строки.

У атрибута align много значений, которые позволяют установить картинку именно так, как надо, и именно там, где надо.

Горизонтальное выравнивание:

• left – по левому краю;

• right – по правому краю.

Вертикальное выравнивание:

• top – выравнивание верхней границы картинки по самому высокому элементу строки;

• texttop – выравнивание верхней границы картинки по самому высокому элементу текста;

• middle – середина изображения выравнивается по базовой линии строки;

• absmiddle – середина изображения выравнивается по середине строки;

• baseline – выравнивание нижней границы изображения по базовой линии строки;

• bottom – аналогично baseline;

• absbottom – нижняя граница изображения выравнивается по нижней границе текущей строки.

Примечание

Базовая линия строки – это линия, на которой расположены все элементы. При этом некоторые буквы выступают за эту линию, например буква «р». Ее палочка заканчивается ниже базовой линии и будет самым нижним элементом строки. Заглавные буквы, наоборот, выступают сверху этой линии.

В листинге 4.3 приведены примеры выравнивания картинок относительно текста по вертикали.

Листинг 4.3. Выравнивание картинки по вертикали

<title>Встраивание изображения</title>

<img src=»image.jpg» width=»70″ align=»top»/>Выравнивание по самому верхнему элементу в строке<br/>

<img src=»image.jpg» width=»70″ align=»absbottom»/>Нижняя граница изображения выравнивается по нижней границе текущей строки<br/>

<img src=»image.jpg» width=»70″ align=»bottom»/>Нижняя граница изображения выравнивается по базовой линии строки<br/>

<img src=»image.jpg» width=»70″ align=»middle»/>Середина изображения выравнивается по базовой линии строки<br/> </body>

На рис. 4.3 показан результат обработки кода из листинга 4.3, где можно увидеть разницу между выравниваниями по базовой линии и по границам строки.

Рис. 4.3. Выравнивание по вертикали

С выравниваниями по горизонтали все проще. Код для выравнивания по горизонтали приведен в листинге 4.4.

Листинг 4.4. Выравнивание картинки по горизонтали

<title>Встраивание изображения</title>

<img src=»image.jpg» width=»100″ align=»right» />

Кролики – потрясающие животные, особенно декоративные. Многие люди заводят их дома вместо кошек или собак, потому что они менее прихотливы. Кролики – чистоплотные животные, и их хозяева не испытывают проблем с воспитанием. Кормить этих зверюшек просто: овощи, сено и немного специального корма. Следите, чтобы клетка была чистой и в ней всегда лежали свежие опилки. Если вы рискуете выпускать зверя на прогулки по дому, то следите за проводами. Кролик может решить, что провода – это сено, и перегрызть их. </html>

На рис. 4.4 виден результат обработки браузером кода из листинга 4.4, текст обтекает картинку слева.

Рис. 4.4. Выравнивание по горизонтали

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

Поделитесь на страничке

Следующая глава >

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *