Динамическое уменьшение изображения при сохранении пропорции

0

Я пытаюсь динамически масштабировать переменные портретные и ландшафтные изображения, чтобы соответствовать пропорционально в окне браузера.

Моя текущая попытка изменения размера изображения находится здесь: http://jsfiddle.net/6pnCH/4/

Мне нужно, чтобы изображение было масштабировано вертикально при загрузке браузера.

На данный момент у меня только началось масштабирование при onBrowserResize.

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

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

Код Javascript:

$(window).resize(function(){
  $('.slide img').css({
    maxHeight: $('.slide').height() * 0.8,
    maxWidth: $('.slide').width() * 0.8
  });
});

Код CSS:

#slide {
    text-align: center;
    background-color: green;
    height: 100%;
    width: 100%;
    display: inline-block;
    }

.slide {
    vertical-align: middle; 
    display: table-cell;
}

.slide:after {
    content: ' ';
    height: 100%;
    display: inline-block;
    vertical-align: middle
}

.slide img {
    vertical-align: middle;
    max-width: 100%;
    height: auto;
    width: auto\9; /* ie8 */
} 

Код HTML:

<div id="slide" class="slide"><img src="image.jpg"></div>
Теги:
image

3 ответа

0

это прекрасно иллюстрирует, что я сделал после и сделал без javascript в конце концов!

http://codepen.io/jasonbradberry/pen/sHJhl

для кого-то еще после того же, мой измененный код будет выглядеть так:

.slide img {
    vertical-align: middle;
    max-width: 100%;
    max-height: 100%;
    width: auto;
} 
0

Как насчет использования css3 background-size: cover или background-size:contain?

что-то вроде этого:

<div style="width:100%; height:100%; background-size:cover; background-image:url(YOUR_IMAGE.jpg);"></div>
  • 0
    это размещает изображение по вертикали и не масштабирует изображение, когда оно слишком высокое для div.
  • 0
    попробуйте с помощью then then ... и используйте background-repeat: no-repeat;
Показать ещё 4 комментария
0

Вот обновленный Fiddle

На этот раз вам не нужно использовать Javascript.

Вы не хотите растягивать img поэтому не используйте ширину и высоту, применяемые к нему, посмотрите.

Только CSS все еще может сделать трюк:

#slide {
    text-align: center;
    background-color: green;
    height: 100%;
    width: 100%;
    display: inline-block;
    }

.slide {
    vertical-align: middle; 
    display: table-cell;
}

.slide:after {
    content: ' ';
    height: 100%;
    display: inline-block;
    vertical-align: middle
}

.slide img {
    vertical-align: middle;
    max-width: 100%;
    background-color: blue;
    padding: 10%; //here is the trick
} 
  • 0
    Это растягивает изображения и не сохраняет пропорции. Мне нужно, чтобы изображение сохраняло такое же соотношение сторон при уменьшении.
  • 0
    см. edit @ user3058496 теперь он не меняет размер изображения
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню