2015-11-03 1 views
4

Я ищу решение HTML/CSS для проблемы, с которой мы столкнулись на сайте, который мы создаем. Я с удовольствием реализую решение на основе JavaScript, если нужно, но я бы предпочел, чтобы он обрабатывался изначально.CSS text wrapping collapse container

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

Когда текст короток, из-за поплавка контейнер сжимается до ширины текста. Когда текст длинный и происходит обертка, контейнер висит на максимальной ширине, даже если текст внутри завернут снизу, поэтому на правой стороне есть небольшая часть цвета фона (что недостаточно для обернутое слово) Я хочу, чтобы контейнер обрушился на край предыдущего слова, поэтому он не «похож» на пространство, в котором оно было закрыто, когда оно очень близко.

HTML

<div> 
    <p>Crack the Shutters Open Wide for Parkside Paradise</p> 
</div> 

CSS

body div { 
    background-color: #AAFF3B; 
    max-width:80%; 
    padding:20px; 
    display:inline-block; 
    float:left; 
} 
body p { 
    display:inline-block; 
    background-color: #FFAA3B; 
    position: relative; 
    float:left; 
    white-space:pre-line; 
    clear:left; 
} 

Вот JSFiddle: http://jsfiddle.net/nmuot8bm/3/

Если посмотреть на 3-м, например, вы можете увидеть небольшое количество дополнения на правой стороне оранжевой коробки, где слово porttitor имеет обертку d под новой строкой, но оранжевый контейнер все еще сидит на максимальной ширине, несмотря на поплавок. Если разрывы строк вводятся редакторами содержимого (например, между vestibulum и porttitor в соответствии с примером 4), тогда контейнер сбрасывается правильно.

Что я думаю, что контейнер растет до того, как текст обертывается, и браузер не перепродает ширину после упаковки?

Вот фотография моего тестового примера показано на JSFiddle: enter image description here

Вот картина неисправности на месте промежуточной (до отделяется в JSFiddle): example 2

Вы можете увидеть что текст завернут, но контейнер не рухнул, оставив большой пробел цвета фона.

n.b. Мы можем эмулировать это, выполнив text-align:justify, но затем расстояние между словами не согласуется с остальной частью текста на сайте.

Редактировать: Я вижу, что этот вопрос может быть дубликатом. Клянусь, что я занимался исследованиями до того, как отправил!

max-width adjusts to fit text?

CSS Width/Max-Width on Line Wrap?

Wrapping text forces containing element to max-width

Shrink DIV to text that's wrapped to its max-width?

Я думаю, что общий консенсус/вывод состоит в том, что невозможно без кровотечения края CSS, и я должен использовать решение JavaScript.

Я добавил несколько примеров в моей JSFiddle: http://jsfiddle.net/nmuot8bm/6/ включая решение JavaScript отсюда: https://stackoverflow.com/a/33246364/647728

+0

Как уже упоминался, не представляется возможным с помощью CSS ... это способ строкового блока модель работает. –

+0

Это, вероятно, то же самое, что и этот вопрос: * [CSS float, чтобы свернуть div с обернутым текстом до минимума) (https://stackoverflow.com/questions/18965694/css-float-to-collapse-a-div -with-wrapped-text-to-the-minimum-needed? rq = 1) * –

ответ

0

Не возможен с помощью CSS ... это способ модели строкового блока работает JS пример/решение может быть найдено на JSFiddle

-1

Если проблема плавал элементы рушатся родительский контейнер, есть много решений; самым простым среди них является добавление overflow: hidden или display: table к родительскому объекту (дело сворачивается). Также имейте в виду, что inline-block и плавающие элементы по существу являются избыточными.

+0

Я был после инверсии - я хочу заставить контейнер свернуть, когда обертка заставила его быть более крупным по горизонтали, но затем текстовые обертывания оставляя зазор на краю – agrath

+0

Хорошо, вам нужно установить максимальную ширину на контейнере :) Если, свернув, вы имеете в виду что-то вроде «div начинается с высоты 950px, я хочу, чтобы он достиг высоты 650px, когда контейнер растянутый на большом экране ", тогда вы должны написать медиа-запрос. медиа-запрос будет выглядеть так, как будто бы максимальная ширина этого элемента могла быть: экран @media и (max-width: 1020px) или что угодно. – Gina

+0

И если совпадение текста вашего абзаца выходит за пределы поля, убедитесь в некоторых вещах: 1. Если он плавает, родитель имеет переполнение: скрытое или отображаемое: таблица 2. У него и у родителя есть размер окна: рамка 3. Он позиционируется абсолютным или относительным внутри родителя без позиционирования? Добавьте позиционирование к родительскому (обычно относительному положению), потому что по умолчанию он статичен. – Gina