У меня есть следующий код, который устанавливает контейнер, высота которого изменяется в зависимости от ширины при изменении размера браузера (для сохранения квадратного соотношения сторон).
HTML
<div class="responsive-container">
<div class="dummy"></div>
<div class="img-container">
<IMG HERE>
</div>
</div>
CSS
.responsive-container {
position: relative;
width: 100%;
border: 1px solid black;
}
.dummy {
padding-top: 100%; /* forces 1:1 aspect ratio */
}
.img-container {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
Как я могу вертикально выровнять IMG внутри контейнера? Все мои изображения имеют переменную высоту, и контейнер не может иметь фиксированную высоту / высоту строки, потому что он отзывчивый ... Пожалуйста, помогите!
html
css
responsive-design
vertical-alignment
user1794295
источник
источник
Ответы:
Вот методика выравнивания встроенных элементов внутри родителя , по горизонтали и вертикали одновременно:
Вертикальное выравнивание
1) В этом подходе мы создаем
inline-block
(псевдо) элемент в качестве первого (или последнего) дочернего элемента родителя и устанавливаем егоheight
свойство,100%
чтобы принимать всю высоту его родителя .2) Кроме того, добавление
vertical-align: middle
сохраняет встроенные элементы (-block) в середине строки. Итак, мы добавляем эту декларацию CSS к первому дочернему элементу и нашему элементу ( изображению ).3) Наконец, чтобы удалить пробел между символами inline (-block) , мы можем установить нулевой размер шрифта родительского элемента
font-size: 0;
.Примечание: я использовал технику замены изображения Николаса Галлахера в следующем.
Каковы преимущества?
Нет необходимости явно указывать размеры элемента изображения.
Мы можем легко использовать этот подход для выравнивания
<div>
элемента по вертикали ; который может иметь динамическое содержимое (высота и / или ширина). Но обратите внимание, что вы должны повторно установитьfont-size
свойствоdiv
для отображения внутреннего текста. Демо онлайн .Выход
Отзывчивый Контейнер
Этот раздел не собирается отвечать на вопрос, так как ОП уже знает, как создать адаптивный контейнер. Однако я объясню, как это работает.
Чтобы высота элемента контейнера изменялась в зависимости от его ширины (с учетом соотношения сторон), мы могли бы использовать процентное значение для
padding
свойства top / bottom .Процентное значение на верхней / нижней прокладкой или краями является относительно ширины содержащего блока.
Например:
Вот онлайн демо . Закомментируйте линии снизу и измените размер панели, чтобы увидеть эффект.
Кроме того, мы можем применить
padding
свойство к фиктивному дочернему элементу или:before
/:after
псевдоэлементу для достижения того же результата. Но к сведению , что в этом случае процентное значение наpadding
это по отношению к ширине от.responsive-container
себя.Демо № 1 .
Демонстрация № 2 (Использование
:after
псевдоэлемента)Добавление контента
Использование
padding-top
свойства приводит к появлению огромного пространства в верхней или нижней части содержимого внутри контейнера .Для того , чтобы исправить это, мы должны обернуть содержимое с помощью элемента - оболочки, удалите этот элемент из документа нормального потока, используя абсолютное позиционирование , и , наконец , развернуть обертку (бушель , используя
top
,right
,bottom
иleft
свойство) , чтобы заполнить все пространство своего родителя, контейнер .Вот так:
Вот онлайн демо .
Собираем все вместе
Вот РАБОЧАЯ ДЕМО .
Очевидно, что вы можете избежать использования
::before
псевдоэлемента для совместимости с браузером и создать элемент в качестве первого потомка.img-container
:ОБНОВЛЕНО ДЕМО .
Использование
max-*
свойствЧтобы сохранить изображение внутри рамки на более низкой ширине, вы можете установить
max-height
иmax-width
свойство на изображении:Вот ОБНОВЛЕНИЕ ДЕМО .
источник
font-size: 0;
!С flexbox это легко:
FIDDLE
Просто добавьте следующее в контейнер изображений:
источник
-webkit-
префикс или попробуйте такую библиотеку, как prefixfree.js :)Используйте этот CSS, так как у вас уже есть разметка для него:
Вот рабочий JsBin: http://jsbin.com/ihilUnI/1/edit
Это решение работает только для квадратных изображений (так как процентное значение на полях зависит от ширины контейнера, а не от высоты). Для изображений произвольного размера вы можете сделать следующее:
Рабочее решение JsBin: http://jsbin.com/ihilUnI/2/edit
источник
Вы можете центрировать изображение как по горизонтали, так и по вертикали, используя
margin: auto
и абсолютное позиционирование. Также:источник
Попробуй это
источник
.img-container
абсолютно позиционирован - это необходимо для сохранения квадратного соотношения сторон / динамической высоты.Вот техника, которая позволяет вам центрировать ЛЮБОЙ контент как по вертикали, так и по горизонтали!
По сути, вам просто нужны два контейнера и убедитесь, что ваши элементы соответствуют следующим критериям.
Внешний контейнер:
display: table;
Внутренний контейнер:
display: table-cell;
vertical-align: middle;
text-align: center;
Контент окно:
display: inline-block;
Если вы используете эту технику, просто добавьте свое изображение (вместе с любым другим контентом, который вы хотите использовать с ним) в поле контента.
Демо:
Смотрите также эту скрипку !
источник
Я наткнулся на эту тему в поисках решения, которое:
Тестируя некоторые решения, опубликованные выше, я не нашел ни одного, который соответствовал бы всем этим критериям, поэтому я собрал этот простой, который может быть полезен для других людей, которым необходимо сделать то же самое:
Рабочий пример на JSFiddle
источник
Пытаться
Html
CSS
источник
HTML-код
<div class="image-container"> <img src=""/> </div>
код CSS
источник
Создайте еще один div и добавьте в него и «dummy», и «img-container»
Делайте HTML и CSS как следует
Вместо 100% для «отзывчивого контейнера» вы можете указать желаемую высоту.
источник