Search code examples
csswidth

Width equal to content


I'm experiencing some trouble with the width property of CSS. I have some paragraphs inside a div. I'd like to make the width of the paragraphs equal to their content, so that their green background looks like a label for the text. What I get instead is that the paragraphs inherit the width of the div father node which is wider.

#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>


Solution

  • By default p tags are block elements, which means they take 100% of the parent width.

    You can change their display property with:

    #container p {
       display:inline-block;
    }
    

    But it puts the elements side by side.

    To keep each element on its own line you can use:

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

    (If you use float and need to clear after floated elements, see this link for different techniques: http://css-tricks.com/all-about-floats/)

    Demo: http://jsfiddle.net/CvJ3W/5/

    Edit

    If you go for the solution with display:inline-block but want to keep each item in one line, you can just add a <br> tag after each one:

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

    New demo: http://jsfiddle.net/CvJ3W/7/