2015-12-06 3 views
2

Так что я работаю на галерее, где изображения показаны в элементе списка 200x200pxПочему не правильно масштабируется высота изображения?

#gallery-list-ui li { 
    display: block; 
    margin: 10px; 
    height: 200px; 
    width: 200px; 
    overflow: hidden; 
} 

Для того, чтобы иметь портрет/пейзаж изображения использовать всю высоту/ширину, я использую JavaScript, чтобы решить, если я должен установить либо высоту, либо ширину до 100%.

var portrait = ($img.height() > $img.width() ? true : false); 

if(portrait){ 
    $img.css({'width' :'100%', 'height' : 'auto'}); 
} else { 
    $img.css({'height' :'100%', 'width' : 'auto'}); 
} 

В результате, портретные изображения весы правильно

<img src="img.jpg" style="width: 100%; height: auto;"> 

но ландшафтные изображения масштабируется 100% своей первоначальной высоты и не ограничивается высотой списка.

<img src="img.jpg" style="height: 100%; width: auto;"> 

enter image description here

Что я здесь отсутствует? Может ли кто-нибудь объяснить, почему это происходит? Смотрите мою скрипка здесь: https://jsfiddle.net/smyhbckx/5/

+0

Похоже, что ваш родительский контейнер 'img' не имеет определенного' height' и поэтому не будет останавливать 'img' от полного экрана' height', но 'width' работает, даже если он не установлен, как 'div' по умолчанию 100%. – LGSon

ответ

5

Добавить высоту .img-контейнер:

.img-container{ 
    height: 100%; 
} 

Высота CSS очень строгая. Он основан на прямой родительской высоте элемента. Прямым родителем img является .img-container - который не имеет высоты (то есть height: auto;). Анализатор распознает это как неизвестное число, и поэтому высота img не масштабируется.

+1

Ну, так как веб-страница была предназначена для потока первичной вертикали (так как вы можете заметить, что ваша мышь имеет только вертикальную прокрутку). Высота большинства элементов предназначена для «потока» как можно больше, а ширина в основном ограничена. Вы можете увидеть эту функцию наиболее четко в элементах 'display: block;', которые по умолчанию равны 100% родительской ширине, но при этом допускают гибкую высоту. – AVAVT

+0

Отлично, спасибо за объяснение :) – Steven

+1

Единственное отличие - это поведение 'width: auto;' vs 'height: auto;'. Когда изображение попытается сравнить с его родительской шириной и обнаружит, что его родитель имеет 'width: auto;', он может автоматически распознать значение этого как «100% от следующей ширины родителя следующего уровня». Хотя это не то же самое для высоты, 'height: auto;' означает неопределенное число. Фактически, высота '.img-container' сама по себе может течь намного больше 200px, несмотря на наличие родительской высоты 200px, потому что' height: auto; 'в HTML означает« столько, сколько вы хотите ». – AVAVT

1

Попробуйте с object-fit:cover;height:100% собственности на изображение, а также добавить следующие стили в контейнер

.img-container { 
    width: 200px; 
    height: 200px; 
} 

Я надеюсь, что это позволит решить проблему

https://jsfiddle.net/smyhbckx/7/

+0

Да ... добавление высоты и ширины в 'img-container' сработало. Но почему он работает на ширину, а не на высоту в первую очередь? – Steven

Смежные вопросы