Как сделать отзывчивую сетку фотографий с помощью Twitter Bootstrap, если высоты разные

Как я могу щелкать изображения Bootstrap 3 'img-responsive', но позволяю им иметь заданную высоту, чтобы сетка фотографий перетекала (в отличие от нижнего изображения)?

Я попытался установить атрибут высоты изображения и атрибут max-height, но, похоже, игнорирует те, если я не установил его высоту с помощью "! important", но тогда они выглядят плохо и на самом деле не в сетке, потому что они принимают так мало горизонтального пространства.

Я пробовал несколько трюков, связанных с их помещением в качестве фоновых изображений divs, и overflow:hidden, но все, что я пробовал 1) не работает, и 2) кажется хакерским 3) выглядит испорченным. (в качестве примера пробовал этот)

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

Кажется, что это должно быть обычным явлением - есть ли несколько простой способ справиться с этим?

photo gallery

Ответ 1

Я не знаком с загрузкой, но я уверен, что вы можете обернуть каждый img в div.wrapper, и примените что-то вроде этого к divs:

div.wrapper {
    width: 33%;
    height: 200px; /* or whatever... */
    overflow: hidden;
    float: left;
}

Затем для обработки масштабирования изображения:

.wrapper img {
    max-width: 100%;
    height: auto;
} 

ИЗМЕНИТЬ - АЛЬТЕРНАТИВНЫЙ МЕТОД

Чтобы достичь желаемого, я думаю, что лучший способ - использовать фоновые изображения для альтернативного элемента с background-size: cover вместо тегов img.

HTML:

<a href="path/to/full_size.jpg" class="image" style="background-image: url(path/to/image.jpg);">Link Text Here</a>

Повторите для каждого из ваших изображений в сетке вместо использования тегов img.

CSS

.image {
    display: block;
    text-indent: -1000px; /* hide link text */
    overflow: hidden;
    background-size: cover;
    width: 33%;
    height: 200px;
    float: left;
}

Обратите внимание, что размер фона не поддерживается в версиях IE 8 и ниже, если это имеет к вам значение.

Ответ 2

В Bootstrap есть 3 общих подхода к выравниванию/высоте сетки

CSS подходит только для этого.

http://bootply.com/85737

Подход "clearfix" подобен этому (требуется итерация каждые x столбцов).

http://bootply.com/89910

Наконец, вы можете использовать плагин Isotope или Masonry. Вот рабочий пример, который использует Isotope + Bootstrap 3:

http://bootply.com/109446

Подробнее о выпуске Bootstrap

Ответ 3

Никто еще не предложил обрезать, поэтому я брошу свои 2 цента.

Я бы использовал предопределенную ширину x height в сетчатой ​​версии изображений с более крупной нерегулярной версией. На самом деле, даже если более крупная версия не была нерегулярной, я бы, вероятно, все еще это сделал. Основная разметка все равно будет сеткой, будь то Foundation, Bootstrap, что угодно.

Таким образом, вы всегда можете ссылаться на большой/оригинальный размер и использовать сетку или уменьшенные изображения, если это необходимо. Для статического сайта я сделал бы это вручную, для динамического сайта я бы использовал процессор изображений, который автоматически меняет разные стили, например. example.com/image-styles/thumb/photo.jpg.

Очевидно, что разные изображения нужно обрезать по-разному, но если вам не важно, где происходит урожай, вы можете просто установить изображение внутри div и overflow: hidden; всего: http://jsfiddle.net/785gN/

Недостатком этого является то, что вы считаете, что все изображения квадратные или ландшафтные, а не портрет (или наоборот). Альтернативно, используйте фоновое изображение с background-size: cover;, как было предложено.