Центрировать полноэкранное изображение вертикально

Я хочу центрировать полноэкранное изображение вертикально. Я не могу определить изображение в CSS, потому что изображение зависит от параметров URL.

<div>
    <img src="photo.jpg">
</div>

div {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

Если я определю свой CSS изображения следующим образом:

div img {
    width: 100%;
    height: 100%;
}

Мое изображение будет растягиваться и деформироваться по высоте, чтобы поместиться на экране.

Если я определю свой CSS изображения таким образом (просто без определения высоты):

div img {
    width: 100%;
}

Мое изображение не будет растягиваться / деформироваться, но оно начнется с top: 0 изображения. Я хочу, чтобы изображение располагалось по центру по вертикали, а переполнение его высоты было скрыто.

По сути, я хочу получить то же поведение, что и в CSS с фоновым центрированием:

background: url(photo.jpg) no-repeat center;
background-size: cover;

РЕДАКТИРОВАТЬ: я забыл упомянуть, что CSS object-fit: cover работает над этим, но я ищу более кросс-браузерное решение, так как это свойство работает не во всех браузерах.

3 ответа

Попробуйте это CSS

div {
    position: fixed;
    top: 50%;
    left: 0;
    width: 100%;
    height: 100%;
    -webkit-transform: translateY(-50%);
    transform: translateY(-50%);
}

РЕДАКТИРОВАТЬ

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

используйте это для img

div img {
    width: 100%;    
}

Это будет сначала позиционировать подразделение 50% Форма сверху. то есть изображение теперь будет иметь верхнюю часть в 50% высоты страницы, тогда свойство translate переместит изображение вверх на 50% его высоты, по существу, центрируя изображение

Если вы разрешите js, вы можете сделать это (при условии, что изображение имеет идентификатор "img"):

#img {
  width: 100%;
  position: absolute;
  top: 50%;
}

Отрицательный предел должен быть установлен с помощью js или jQuery (при изменении размера):

$('#img').css('margin-top', '-'+($('#img').height()/2)+'px');

Как насчет этого:

div {
    position:fixed;
    top:0;
    left:0;
    width: 100px;
    height: 100px;
    border:1px solid red;
    text-align:center;
    line-height:100px;
    overflow:hidden;
}

img { 
    vertical-align:middle;
    border:1px solid black; 
}
<div>
    <img src="https://www.smallbusinesssaturdayuk.com/Images/Small-Business-Saturday-UK-Google-Plus.gif">
</div>

Другие вопросы по тегам