2015-08-25 4 views
3

Я хочу иметь div с заданным max-width, который плотно соответствует ширине его ребенка span. Все работает нормально, пока span - это только одна строка, но как только произойдет разрыв строки, родительский div будет иметь максимальную ширину.Установите ширину div на многострочный интервал

.content { 
 
    margin: 10px; 
 
    max-width: 150px; 
 
    border: 1px dotted black; 
 
    display: inline-block; 
 
}
<div class="content"> 
 
    <span>1 line works</span> 
 
</div> 
 
<br> 
 
<div class="content"> 
 
    <span>2 lines dont workworkwork</span> 
 
</div>

Первый ДИВ имеет плотную посадку, второй DIV однако устанавливается при максимальной ширине - но это может быть крепче, и я хочу его крепче. См. Также мою ручку на http://codepen.io/sheinzle/pen/gpVjbG

Получает более плотную посадку, даже возможную в HTML?

+0

попробовать "слово-брейк: брейк-все" на .content и посмотреть, работает ли это для вас – radiant

+2

Это хороший способ настроить siz e из 'span' в контейнер - но я ищу обратное, я ищу решение, которое настраивает ширину контейнера на' span' –

+1

, который я вижу, член просто отправил ответ. надеюсь, это то, что вы хотите. дополнение к word-break имеет максимальную ширину: 100% свойство – radiant

ответ

0

Спасибо за ответы на все вопросы так далеко. Я все еще очень надеюсь, что у кого-то есть чистое решение HTML/CSS.

В то же время, это быстрое исправление с помощью JavaScript (CSS/HTML без изменений от OP). Вероятно, он не улавливает все крайние случаи, но сейчас работает. Перо в http://codepen.io/sheinzle/pen/MwNdgO

document.addEventListener("DOMContentLoaded", function(event) { 
 
    // get list of all spans 
 
    list = document.querySelectorAll('.content span'); 
 
    for (var i=0; i<list.length; i++) { 
 
    // retrieve width of span and apply it to parent 
 
    w = list[i].offsetWidth; 
 
    list[i].parentNode.style.width = w+"px"; 
 
    } 
 
});
.content { 
 
    margin:10px; 
 
    max-width: 150px; 
 
    border:1px dotted black; 
 
    display:inline-block; 
 
}
<div class="content"> 
 
    <span>1 line works</span> 
 
</div> 
 
<br> 
 
<div class="content"> 
 
    <span>2 lines do workworkwork</span> 
 
</div>

-1

Добавить word-break: break-all; в .content

Вот это demo

+0

, которое соответствовало бы «пробелу» в контейнере, сломав слова, что противоречит тому, что ОП задал для – Luca

+0

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

+0

это неправильная информация. OP хочет, чтобы контейнер был таким же маленьким, как «span» - см. также его последний комментарий к вопросу. – Luca

-1

Добавлено max-width: 150px; обоим div и span

.content { 
 
    margin:10px; 
 
    max-width: 150px; 
 
    border:1px dotted black; 
 
    display:inline-block; 
 
    
 
} 
 

 
.test{ 
 
    max-width: 150px; 
 
    display:inline-block; 
 
    word-break:break-all 
 
}

 

 
    <div class="content"> 
 
     <span class="test">1 line works</span> 
 
    </div> 
 
    
 
    <br> 
 
    
 
    <div class="content"> 
 
     <span class="test">2 is this what you wantsimon</span> 
 
    </div>

+0

@Simon Привет, я надеюсь, что это то, что вы ищете – Webruster

+0

Привет, Downvoter, могу я знать причину downvote? – Webruster

+0

'word-break: break-all;' будет "регулировать размер пролета в контейнере, но я ищу обратное, я ищу решение, которое регулирует ширину контейнера до диапазона" - OP комментарий. Ваш ответ в основном такой же, как и первый комментарий, и другой ответ, и не достигает того, чего хочет OP. – Luca

1

Использование Flexbox и поместите стиль на внутренней пролете:

.content { 
 
    margin:10px; 
 
    max-width: 150px; 
 
    display: flex; 
 
} 
 
.content span{ 
 
    flex: 0 1; 
 
    border:1px dotted black; 
 
}
<div class="content"> 
 
    <span>1 line works</span> 
 
</div> 
 

 
<br> 
 

 
<div class="content"> 
 
    <span>2 lines alsoworkhere</span> 
 
</div>

Смежные вопросы