Ширина равна содержанию



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






#container {
width: 30%;
background-color: grey;
}

#container p {
background-color: green;
}

<div id="container">
<p>Sample Text 1</p>
<p>Sample Text 2</p>
<p>Sample Text 3</p>
</div>
422   13  

13 ответов:

по умолчанию p теги block элементы, что означает, что они берут 100% от родителя width.

вы можете изменить их свойство отображения с:

#container p {
   display:inline-block;
}

но это ставит элементы бок о бок.

чтобы сохранить каждый элемент на своей собственной линии вы можете использовать:

#container p {
   clear:both;
   float:left;
}

(если вы используете float и должны очистить после плавающих элементов, см. Эту ссылку для различных методов: http://css-tricks.com/all-about-floats/)

демо: http://jsfiddle.net/CvJ3W/5/

Edit

если вы идете на решение с display:inline-block но хотите сохранить каждый элемент в одной строке, вы можете просто добавить <br> тег после каждого из них:

<div id="container">
  <p>Sample Text 1</p><br/>
  <p>Sample Text 2</p><br/>
  <p>Sample Text 3</p><br/>
</div>

новая демонстрация: http://jsfiddle.net/CvJ3W/7/

Я установил ширину как max-content, и это сработало для меня.

width: max-content;

добавлять display: inline-block; до p стиль должен взять из него:

http://jsfiddle.net/pyq3C/

#container p{
    background-color: green;
    display: inline-block;
}

раствор inline-block заставляет вас вставить <br> после каждого элемента.
Решение с float заставляет вас обернуть все элементы с помощью div "clearfix".

еще одно элегантное решение-использовать display: table для элементов.

С помощью этого решения вам не нужно вставлять разрывы строк вручную (например, с inline-block), вам не нужна обертка вокруг ваших элементов (например, с поплавками), и вы можете центрировать свой элемент, если вы необходимость.

http://jsfiddle.net/8md3jy4r/3/

Set display:inline-block а затем настроить поля.

скрипка здесь:http://jsfiddle.net/Q2MrC/

установить атрибут width как: width: fit-content

demo:http://jsfiddle.net/rvrjp7/pyq3C/114

вы можете использовать любой из ниже :-

1) дисплей: inline-block:

http://jsbin.com/feneni/edit?html, css, js, выход

раскомментируйте строку

 float:left;
 clear:both 

и вы обнаружите, что родительский контейнер рухнул.

2) с помощью display: table

http://jsbin.com/dujowep/edit?html, css, js, выход

попробуйте использовать <span> элемент. Или, если вы предпочитаете, попробуйте display:inline

вы можете использовать flex для достижения этой цели:

.container {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}

flex-start автоматически отрегулирует ширину детей к их содержанию.

при использовании display: inline-block. Мой div будет заполнять ширину экрана, когда дочерние элементы имеют ширину % родитель. Если кто-то еще ищет решение этой проблемы и не возражает использовать пропорцию экрана вместо родительской пропорции, замените % С vw для ширины (ширина окна просмотра), или vh для высоты (Высота видового экрана).

просто используйте display: table; на вашем случае.

Если вы используете display: flex по какой-либо причине и необходимости в браузерах, таких как Edge/IE, вы можете вместо этого использовать:

дисплей: inline-flex

С поддержкой браузера ~97% для встроенного гибкого трубопровода.

используяdisplay:inline-block; он будет работать только для правильного предложения с помещения как

#container {
    width: 30%;
    background-color: grey;
    overflow:hidden;
    margin:10px;
}
#container p{
    display:inline-block;
    background-color: green;
}
<h5>Correct sentence with spaces </h5>
<div id="container">
    <p>Sample Text 1 Sample Text 1 Sample Text 1 Sample Text 1 Sample Text 1 Sample Text 1 Sample Text 1</p>
</div>
<h5>No specaes (not working )</h5>
<div id="container">
    <p>SampleSampleSampleSampleSampleSampleSampleSampleSampleSampleSamplesadasdsadasdasdsa</p>
</div>

почему бы не использовать word-wrap: break-word;? это сделано, чтобы позволить длинным словам быть в состоянии сломать и обернуть на следующую строку.

#container {
    width: 30%;
    background-color: grey;
    overflow:hidden;
    margin:10px;
}
#container p{
   word-wrap: break-word;
    background-color: green;
}
<h5> Correct sentence with spaces </h5>
<div id="container">
    <p>Sample Text 1 Sample Text 1 Sample Text 1 Sample Text 1 Sample Text 1 Sample Text 1 Sample Text 1</p>
</div>
<h5>No specaes</h5>
<div id="container">
    <p>SampleSampleSampleSampleSampleSampleSampleSampleSampleSampleSamplesadasdsadasdasdsa</p>
</div>

Comments

    Ничего не найдено.