Усадка div на изображение с процентной высотой

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

.img
{
    width: auto;
    height:100%;
}
.container
{
    height:100%;
    width:auto;
}

Вот скрипка:

http://jsfiddle.net/EdgKr/68/

display:table, как и в подобных случаях, не работает, поскольку в качестве ячейки таблицы изображение всегда отображается на 100% от его первоначального размера.

http://jsfiddle.net/EdgKr/67/

Ответ 1

Думаю, я получу лучшее решение этой проблемы. Проверьте мой код:

<!DOCTYPE HTML>
<html>
    <head>
        <title>Knowledge is Power</title>
        <style type="text/css">
            * {
                -webkit-box-sizing: border-box; /* Android = 2.3, iOS = 4 */
                -moz-box-sizing: border-box; /* Firefox 1+ */
                box-sizing: border-box; /* Chrome, IE 8+, Opera, Safari 5.1 */
            }
            html, body
            {
                height:100%;
                width:100%;
                padding:10px;
            }
            .container {
                padding:0;
                background:green;
            }
            .img {
                display: inline;
                height:100%;
            }
        </style>
    </head>
    <body>
       <span class="container">  
            <img class="img" src="a.jpg"/>
        </span>
    </body>
</html>

Ответ 2

Поскольку я задал этот вопрос, я сделал некоторый прогресс, разрешение было невероятно простым: просто добавьте float: left.

* {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}

html,
body {
    height:100%;
    width:100%;
}

.container {
    background: green;
    float: left;
    height: 100%;
}

.img {
    width:auto;
    height:100%;
}

Контейнер сжимается, как ожидалось, даже если изображение имеет процентную высоту. http://jsfiddle.net/EdgKr/74/

Но это очень легко сломать, например, если вы добавите дополнение. http://jsfiddle.net/EdgKr/72/

Ответ 3

Единственный способ, которым я знаю (или могу думать в данный момент), чтобы контейнер соответствовал размеру его содержимого, - это float ing. Если это вариант, это может получить то, что вы ищете. (здесь ваш обновленный скрипт с float:left; добавлен в .vertainer http://jsfiddle.net/EdgKr/61/)

Ответ 4

Если вы просто хотите, чтобы контейнер соответствовал высоте и ширине изображений, aka shrink wrap существует несколько вариантов:

поплавок: левый/правый, Дисплей: встроенный блок, дисплей: стол, позиция: абсолютная;

каждый из них вызовет эффект усадки при отсутствии ширины.

Я рекомендую использовать встроенный блок для этого.

Кроме того, похоже отображение: таблица работает просто отлично:

http://jsbin.com/isayar/1/edit

однако он не поддерживается в IE7, поэтому лично я бы пошел с встроенным блоком.

Ответ 5

Довольно простой

добавить display: inline-block в .container

причина, по которой он показывает зеленый цвет на вашей скрипке, - это блок отображения, который делает его пригодным для всей ширины

http://jsfiddle.net/z7CT6/