2016-03-25 2 views
1

У меня есть встроенный блок элемент, содержащий плавающий элемент, и текст, который должен течь вокруг него:Как получить встроенные блоки, чтобы освободить место для поплавков?

<div style="background: yellow; display: inline-block"> 
    <div style="float: left; width: 128px; height: 128px; background: cyan">Float</div> 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br><br> 
    Vivamus blandit porta rhoncus.<br><br> 
    Integer egestas, lectus ac finibus sagittis, nisl diam scelerisque risus, id malesuada odio tortor in elit.<br><br> 
    Sed pellentesque ligula enim, at porta nibh viverra quis.<br><br> 
    Integer egestas, lectus ac finibus sagittis, nisl diam scelerisque risus, id malesuada odio tortor in elit. 
</div> 

В Internet Explorer, это делает, как и ожидалось: enter image description here Firefox и Chrome делают то же HTML разному: enter image description here

Обратите внимание, как в рендеринге Firefox, ширина инлайн-блок такова, что оно точно соответствует тексту без поплавка. Это приводит к тому, что строки не подходят после того, как float добавлен для бесполезного разрыва.

Похоже, что Firefox и Chrome выполняют эту конструкцию сначала (1), вычисляя предпочтительную ширину встроенного блока, как если бы поплавок не был там, (2) добавление поплавка и (3) выкладка плавающий текст вокруг поплавка, используя ширину, вычисленную в (1), как ширину встроенного блока.

Поведение I хочу вот поведение, выполняемое Internet Explorer. Есть ли способ добиться такого же эффекта в других браузерах, таких как Firefox и Chrome?

+1

Никогда, НИКОГДА не используйте IE как ссылку на то, как все должно работать. Первый вопрос, вы используете doctype и какой? – Rob

+1

@Rob: я не использую IE как ссылку на то, как вещи * должны работать, я использую его как пример того, как я * хочу, чтобы все работало. Я уверен, что спецификация CSS оставляет эту деталь неопределенной, что позволяет использовать оба поведения. Это IE11 с использованием html5 doctype. – redlizard

+0

№ CSS не делает этого. Мой комментарий был только для того, чтобы быть уверенным, что вы знаете, что никакой версии IE нельзя доверять, чтобы делать что-либо правильно. – Rob

ответ

0

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

+0

Я не хочу, чтобы встроенный блок имел одинаковое пространство в обоих браузерах. Я хочу, чтобы у них было пространство, необходимое для размещения текста, без возможности перебора строк, если это возможно. – redlizard