CSS, чтобы остановить перенос текста под изображение
У меня есть следующая разметка:
<li id="CN2787">
<img class="fav_star" src="images/fav.png">
<span>Text, text and more text</span>
</li>
Я хочу, чтобы, если текст обертывается, он не входит в "столбец" для изображения. Я знаю, что могу сделать это с помощью table
(что я делал), но это не работает для этой причины.
Я пробовал следующее без успеха:
li span {width: 100px; margin-left: 20px}
.fav_star {width: 20px}
Я также пробовал float: right
.
Спасибо.
EDIT: Я хочу, чтобы это выглядело так:
IMG Text starts here and keeps going... and
wrap starts here.
Не так:
IMG Text starts here and keeps going... and
wrap starts in the space left for the image.
Ответы
Ответ 1
Поскольку этот вопрос набирает много точек зрения, и это был принятый ответ, я почувствовал необходимость добавить следующее выражение об отказе от ответственности:
Этот ответ был специфичен для вопроса ОП (который имел ширину, установленную в примерах). Хотя он работает, он требует, чтобы вы имели ширину для каждого из элементов, изображения и абзаца. Если это не ваше требование, я рекомендую использовать решение Joe Conlin, которое опубликовано как еще один ответ на этот вопрос.
Элемент span
является встроенным элементом, вы не можете изменить его ширину в CSS.
Вы можете добавить следующий CSS в свой диапазон, чтобы вы могли изменить его ширину.
display: block;
Другим способом, который обычно имеет смысл, является использование элемента <p>
в качестве родителя для вашего <span>
.
<li id="CN2787">
<img class="fav_star" src="images/fav.png">
<p>
<span>Text, text and more text</span>
</p>
</li>
Так как <p>
является элементом block
, вы можете установить его ширину с помощью CSS, не изменяя ничего.
Но в обоих случаях, так как теперь у вас есть элемент блока, вам нужно будет плавать изображение, чтобы ваш текст не все шел ниже вашего изображения.
li p{width: 100px; margin-left: 20px}
.fav_star {width: 20px;float:left}
P.S. Вместо float:left
на изображении вы также можете поместить float:right
на li p
, но в этом случае вам также понадобится text-align:left
, чтобы правильно переписать текст.
P.S.S. Если вы решили использовать первое решение, не добавляющее элемент <p>
, ваш CSS должен выглядеть так:
li span{width: 100px; margin-left: 20px;display:block}
.fav_star {width: 20px;float:left}
Ответ 2
Очень простой ответ на эту проблему, которая, кажется, ломает много людей:
<img src="url-to-image">
<p>Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
img {
float: left;
}
p {
overflow: hidden;
}
См. пример: http://jsfiddle.net/vandigroup/upKGe/132/
Ответ 3
Для тех, кто хочет получить некоторую справочную информацию, здесь короткая статья, объясняющая, почему работает overflow: hidden
. Это связано с так называемым контекстом форматирования блока. Это часть спецификации W3C (т.е. Не является взломом) и в основном является областью, занятой элементом с блочным типом потока.
Каждый раз, когда он применяется, overflow: hidden
создает новый контекст форматирования блока. Но это не единственное свойство, способное вызвать это поведение. Цитируя презентацию Фионы Чан из Сиднейской группы веб-приложений:
- float: left/right
- переполнение: скрытое/авто/прокрутка
- display: table-cell и любые связанные с таблицей значения/встроенный блок
- позиция: абсолютная/фиксированная
Ответ 4
Если вы хотите, чтобы margin-left
работал с элементом span
, вам нужно сделать его display: inline-block
или display:block
.
Ответ 5
Оберните div вокруг изображения и диапазона и добавьте следующее в CSS так:
HTML
<li id="CN2787">
<div><img class="fav_star" src="images/fav.png"></div>
<div><span>Text, text and more text</span></div>
</li>
CSS
#CN2787 > div {
display: inline-block;
vertical-align: top;
}
#CN2787 > div:first-of-type {
width: 35%;
}
#CN2787 > div:last-of-type {
width: 65%;
}
МЕНЬШЕ
#CN2787 {
> div {
display: inline-block;
vertical-align: top;
}
> div:first-of-type {
width: 35%;
}
> div:last-of-type {
width: 65%;
}
}
Ответ 6
настройка display:flex
для текста, который работал у меня.