Ограничить текст шириной родственного изображения/автоматической ширины в CSS
Вопрос
По сути, я пытаюсь создать версию элемента «фигура» (которая появится в HTML5), в результате чего у меня будет изображение с кратким описанием под ним.
Однако я хочу ограничить ширину всего этого элемента шириной изображения, чтобы текст не был шире изображения (при необходимости перенос на несколько строк).
Базовый HTML:
<div class="figure">
<img src="..." alt="..." width="..." height="..." /><br />
A description for the image
</div>
Я хорошо разбираюсь в CSS, но не могу придумать ни одного чистого CSS-решения без добавления style="width:100px"
к div
чтобы соответствовать ширине изображения.
Обновлять:После небольшого поиска и размышлений лучшим методом оказалось использование встроенной ширины в div.Я оставлю атрибут ширины изображения на тот случай, если захочу, чтобы элемент div был немного шире изображения (например, чтобы разместить более длинный заголовок).
Этот подход также означает, что я могу разместить два изображения рядом с подписью ниже.Если у меня есть набор изображений одинакового размера, я, конечно, могу добавить к каждому дополнительный стиль. div
.
Спасибо всем, кто ответил!
Решение
Таблица стилей
div.figure img,
div.figure div.caption {
width: 100%;
}
div.figure div {
overflow: hidden;
white-space: nowrap;
}
примечание:чтобы включить перенос, просто удалите последнюю строку CSS
HTML
<div class="figure" style="width:150px;">
<img src="logo.png" alt="logo" />
<div class="caption">A description for the image</div>
</div>
Я проверил это в Chrome, Firefox и IE7, и во всех трёх оно выглядит хорошо.Я понимаю, что ширина указана в div, а не в img, но, по крайней мере, вам нужно установить ширину только в одном месте.Если не считать использования css-выражений (только для IE), я не вижу способа установить ширину внешнего элемента div равной ширине первого дочернего элемента.
Другие советы
Этого также можно достичь, используя 'display: table-caption'
для заголовка, следующим образом:
HTML
<div class="wrapper">
<img src="image.jpg" />
<div class="caption">My caption...</div>
</div>
Stylesheet
.wrapper {
display: table;
}
.caption {
display: table-caption;
caption-side: bottom;
}
Этот блок также может быть перемещен слева направо от другого текста. Я проверял это в IE8 +. Вот пример JSBin: http://jsbin.com/xiyevovelixu/1
Для настройки ширины в соответствии с изображением автоматически вы можете использовать
.figure {
display: table;
width: 1px;
}
Это заставляет div вести себя как таблица (не поддерживается в Internet Explorer). Или вы можете использовать таблицу вместо div. Я не думаю, что есть другой способ установить ширину автоматически.
Изменить . Самый простой способ - забыть об автоматической ширине и установить ее вручную. Если это действительно необходимо, вы можете использовать JavaScript или таблицу. В этом случае использование таблицы не так страшно, потому что вы обращаетесь к ограничению HTML-версии. В случае сценариев на стороне сервера вы также можете установить ширину при создании страницы.
У меня была та же проблема, и после прочтения этого решил использовать встроенный стиль для окружающего элемента. Кажется, лучшее решение по сравнению с использованием таблицы для меня.
Вы можете использовать решение display: table
для всех других браузеров и поведение CSS для Internet Explorer.