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.
6 ответов
поскольку этот вопрос набирает много мнений, и это был принятый ответ, я почувствовал необходимость добавить следующий отказ от ответственности:
этот ответ был специфичен для вопроса OP (который имел ширину, установленную в примерах). Пока он работает, он требует, чтобы вы имели ширину на каждом из элементов, изображения и абзаца. Если это не ваше требование, я рекомендую использовать решение Джо Конлина который размещен как еще один ответ на это вопрос.
на 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}
П. С. Вместо float:left
на изображении вы также можете поместить float:right
on 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}
очень простой ответ на эту проблему, которая, кажется, ловит много людей:
<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/
для тех, кто хочет некоторую справочную информацию, вот статейку объясняя, почему overflow: hidden
строительство. Это имеет отношение к так называемому контекст форматирования блока. Это часть спецификации W3C (т. е. не является взломом) и в основном область, занятая элементом с потоком блочного типа.
каждый раз, когда она применяется, overflow: hidden
создает новая блок контексте форматирования. Но это не единственное свойство, способное вызвать такое поведение. Цитирую презентация Фиона Чан из Sydney Web Apps Group:
- поплавок: влево / вправо
- переполнение: скрытый / авто / прокрутка
- дисплей: таблица-ячейка и любые связанные с таблицей значения / встроенный блок
- положение: абсолютный / фиксированный
если вы хотите margin-left
для работы на span
элемент, который вам нужно сделать display: inline-block
или display:block
как хорошо.
оберните 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%;
}
}