2013-02-14 6 views
3

Есть ли способ предотвратить перенос одного или двух слов из одного плавающего числа, но разрешить его, если текст больше? Вот пример, где первый текст проблематичен, но второй текст в порядке.Предотвратить одно слово от обтекания float в css/html

http://jsfiddle.net/wdPCp/

<div class="wrapper"> 
<img src="http://lorempixel.com/100/100/animals" /> 
<div class="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut <span class="last-bit">labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation</span></div> 
</div> 

<div class="wrapper"> 
<img src="http://lorempixel.com/100/100/animals" /> 
<div class="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. <span class="last-text">Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span></div> 
</div> 

CSS:

img { 
    float:left; 
    margin:10px; 
    width:100px; 
    height:100px; 
} 

.wrapper { 
    width:300px; 
    margin-bottom:20px; 
} 

.text { 
} 

.last-text { 
} 

Update: Обратите внимание, что я не знаю заранее, где текст будет обернуть - Я ищу общее решение, если оно существует , Например, некоторый стиль для «.last-text», который заставляет его не обертывать под float.

CSS/HTML-решения предпочтительнее, чем JavaScript.

+0

В чем же проблема с первым битом текста? Скорее, как бы вы хотели выглядеть? – dezman

+0

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

ответ

8

Предотвращения однословной упаковка легко: просто использовать не-брейк пространства между двумя последними словами, вместо нормального пространства (например, , nostrud&nbsp;exercitation).

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

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

3

Просто добавьте padding-bottom: 1px; в img

Demo

img { 
    float:left; 
    margin:10px; 
    width:100px; 
    height:100px; 
    padding-bottom: 1px; 
} 

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

Demo 2

+0

Это работает в этом конкретном случае, но я не знаю заранее, где текст будет обертываться (т. Е. Это в шаблоне, а текст может быть любой длины). Я ищу более общее решение, если оно существует. –

0

Решение состоит в том, чтобы немного увеличить ширину класса .wrapper.

вот .wrapper класса:

.wrapper { 
     width:330px; 
     margin-bottom:20px; 
    } 

http://jsfiddle.net/wdPCp/4/

0

Добавить overflow: hidden в .text, если вы не хотите, чтобы текст обертывался под поплавком.

http://jsfiddle.net/wdPCp/6/

+0

I * do * хочу, чтобы он обернулся, если есть несколько слов. Пробел «последний текст» существует, потому что я пытаюсь переполнить: скрытый на нем, но этот трюк не работает на встроенных элементах. –

+0

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

+0

Уверен - но, как показывает ваш пример, текст может быть стилизован, чтобы не обтекать элемент. Мне было интересно, есть ли способ предотвратить, чтобы последний бит текста не обертывался вокруг него. Но это не выглядит так (без javascript). –

1

К сожалению - не однозначный ответ, но я задал тот же вопрос некоторое время назад. Один из ответов, которые я получил там, был многообещающим (с использованием JS), но до сих пор я не смог его обработать. Мой вопрос также использует изображение, чтобы проиллюстрировать проблему, которая может быть полезна.

Я сталкивалась с этим вопросом всего времени в адаптивном дизайне с использованием CMS

Awkward line wrap around image

0

полистать различные стили отображения. Дисплей таблицы (а не теги) не перекрывает элементы с плавающей точкой.

.text{ 
    display:table; 
}