Почему не vertical-align: middle
работает? И тем не менее, vertical-align: top
делает работу.
span{
vertical-align: middle;
}
<div>
<img src="http://lorempixel.com/30/30/" alt="small img" />
<span>Doesn't work.</span>
</div>
Почему не vertical-align: middle
работает? И тем не менее, vertical-align: top
делает работу.
span{
vertical-align: middle;
}
<div>
<img src="http://lorempixel.com/30/30/" alt="small img" />
<span>Doesn't work.</span>
</div>
vertical-align
Ответы:
На самом деле, в этом случае все довольно просто: примените вертикальное выравнивание к изображению. Поскольку все это в одной строке, это действительно изображение, которое вы хотите выровнять, а не текст.
Проверено в FF3.
Теперь вы можете использовать flexbox для этого типа макета.
источник
span
размер шрифта. Смотри мой ответ .width:16px;height:16px
), вы увидите, что изображение будет слишком низким ...Вот несколько простых методов вертикального выравнивания:
Вертикальное выравнивание по одной линии: середина
Это легко: установите высоту строки текстового элемента равной высоте контейнера
Вертикальное выравнивание нескольких линий: внизу
Абсолютно поместите внутренний div относительно его контейнера
Несколько строк по вертикали: середина
Если вы должны поддерживать древние версии IE <= 7
Для того, чтобы заставить это работать правильно по всем направлениям, вам придется немного взломать CSS. К счастью, есть ошибка IE, которая работает в нашу пользу. Установив
top:50%
на контейнер иtop:-50%
на внутренний div, вы можете добиться того же результата. Мы можем объединить их, используя другую функцию, которую IE не поддерживает: расширенные селекторы CSS.Переменная высота контейнера по вертикали: средняя
Это решение требует немного более современного браузера, чем другие решения, поскольку оно использует
transform: translateY
свойство. ( http://caniuse.com/#feat=transforms2d )Применение следующих 3 строк CSS к элементу будет центрировать его по вертикали в пределах его родителя, независимо от высоты родительского элемента:
источник
display:table
Иdisplay:table-cell
CSS селекторы работают отлично, за исключением, конечно, в IE7 и ниже. Вырвав свои волосы в течение нескольких часов, я решил, что мне не нужно иметь дело с кем-то, кто все еще использует IE7-.display:table
имеет некоторые ограничения в различных браузерах (в IE11max-height
не работает, если элемент находится внутри ячейки таблицы), поэтому в некоторых крайних случаях не рекомендуется выравнивать по вертикали, используя ячейки таблицы.Измените ваш
div
в гибкий контейнер:Теперь есть два метода для центрирования выравнивания для всего контента:
Способ 1:
DEMO
Способ 2:
DEMO
Попробуйте разные значения ширины и высоты в
img
и различные значения размера шрифта в,span
и вы увидите, что они всегда остаются в середине контейнера.источник
justify-content: center;
интервал (без использования тегов <br/>), который вы можете добавитьpadding: 1em;
. Отличное обновление для нас современных разработчиков браузеров.Вы должны применить
vertical-align: middle
к обоим элементам, чтобы он был идеально отцентрирован.Общепринятый ответ делает отцентрировать значок около половины х высоты текста рядом с ним (как определено в CSS спецификации ). Что может быть достаточно хорошим, но может выглядеть немного не так, если текст имеет восходящие или спусковые элементы, выделяющиеся сверху или снизу:
Слева текст не выровнен, справа - как показано выше. В этой статье вы найдете живую демонстрацию о вертикальном выравнивании .
Кто-нибудь говорил о том, почему
vertical-align: top
работает в сценарии? Изображение в вопросе, вероятно, выше текста и поэтому определяет верхний край строки.vertical-align: top
на элемент span, а затем просто размещает его в верхней части строки строки.Основное различие в поведении между
vertical-align: middle
иtop
заключается в том, что первый перемещает элементы относительно базовой линии блока (который размещен везде, где необходимо выполнить все вертикальные выравнивания и, таким образом, чувствует себя довольно непредсказуемым ), а второй - относительно внешних границ линейного блока (который является более ощутимый).источник
Техника, использованная в принятом ответе, работает только для однострочного текста ( демо ), но не для многострочного текста ( демо ) - как отмечено там.
Если кому-то нужно расположить по центру многослойный текст по изображению, вот несколько способов (методы 1 и 2, вдохновленные этой статьей CSS-хитрости )
Метод № 1: таблицы CSS ( FIDDLE ) (IE8 + ( caniuse ))
CSS:
Метод № 2: псевдоэлемент на контейнере ( FIDDLE ) (IE8 +)
CSS:
Метод № 3: Flexbox ( FIDDLE ) ( caniuse )
CSS (приведенная выше скрипка содержит префиксы поставщиков):
источник
Этот код работает как в IE, так и в FF:
источник
Потому что вы должны установить
line-height
высоту div, чтобы это работалоисточник
По сути, вам придется перейти к CSS3.
источник
Для записи, выравнивания «команды» не должны работать на пролете, потому что это рядный тег, а не на уровне блоков тегов. Такие вещи, как выравнивание, поля, отступы и т. Д., Не будут работать с встроенным тегом, поскольку точка вставки не должна нарушать поток текста.
CSS разделяет HTML-теги на две группы: встроенные и на уровне блоков. Ищите "css block vs inline", и появляется отличная статья ...
http://www.webdesignfromscratch.com/html-css/css-block-and-inline/
(Понимание основных принципов CSS является ключом к тому, чтобы не быть таким раздражающим)
источник
text-align
иvertical-align
(за исключением его применения наtd
элементы для устаревших целей), специально предназначенные дляinline
иinline-block
элементов (span
,img
, и т.д.).Используйте
line-height:30px
для диапазона так, чтобы текст совпал с изображением:источник
Еще одна вещь, которую вы можете сделать, это установить
line-height
размер текста в соответствии с размером изображения<div>
. Затем установите изображения наvertical-align: middle;
Это серьезно самый простой способ.
источник
Еще не нашел решения
margin
ни в одном из этих ответов, так что вот мое решение этой проблемы.Это решение работает, только если вы знаете ширину вашего изображения.
HTML
CSS
источник
Я обычно использую 3px вместо
top
. Увеличивая / уменьшая это значение, изображение можно изменить до необходимой высоты.источник
Напишите эти свойства span
Использование
display:inline-block;
Когда вы используетеvertical-align
свойство. Это связанные свойстваисточник
Вы можете установить изображение как
inline element
использованиеdisplay
свойстваисточник
Например, на кнопке в jQuery mobile вы можете немного ее настроить, применив этот стиль к изображению:
источник
Многострочное решение:
http://jsfiddle.net/zH58L/6/
Работает во всех браузерах и ie9 +
источник
Это может сбить с толку, я согласен. Попробуйте использовать функции таблицы. Я использую этот простой трюк CSS, чтобы расположить модалы в центре веб-страницы. Он имеет большую поддержку браузера:
и CSS часть:
Обратите внимание, что вам нужно стилизовать и отрегулировать размер контейнера изображения и таблицы, чтобы он работал по вашему желанию. Наслаждаться.
источник
Во-первых, встроенный CSS вообще не рекомендуется, он действительно портит ваш HTML.
Для выравнивания изображения и диапазона вы можете просто сделать
vertical-align:middle
.источник
Не уверен, почему он не отображается в браузере вашей навигации, но я обычно использую такой фрагмент при попытке отобразить заголовок с изображением и центрированным текстом, надеюсь, это поможет!
https://output.jsbin.com/jeqorahupo
источник
источник
Вы, вероятно, хотите это:
Как предложили другие, попробуйте
vertical-align
на изображении:CSS не раздражает. Вы просто не читаете документацию . ;П
источник