Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

Previously my assumption about width: auto was that the width is set to that of the contents. Now I see that it takes the full width of the parent.

Can anyone please describe the differences between these?

In a nutshell: 1) auto, parent div width/height will be the sum of its children. 2) 100 percent, its width/height will be its parents'. See article here Alan Dong Apr 27, 2015 at 17:42

The initial width of a block level element like div or p is auto. This makes it expand to occupy all available horizontal space within its containing block. If it has any horizontal padding or border, the widths of those do not add to the total width of the element.

Width 100%

On the other hand, if you specify width:100%, the element’s total width will be 100% of its containing block plus any horizontal margin, padding and border (unless you’ve used box-sizing:border-box, in which case only margins are added to the 100% to change how its total width is calculated). This may be what you want, but most likely it isn’t.

To visualise the difference see this picture:

Source

For those who are curious about why width: auto behaves that way: stackoverflow.com/questions/28353625/… Hashem Qolami Feb 7, 2015 at 22:13 So basically it has nothing to do with the size of the elements content, but totally refers to the parent width? haemse May 23, 2018 at 0:52
  • width: auto; will try as hard as possible to keep an element the same width as its parent container when additional space is added from margins, padding, or borders.

  • width: 100%; will make the element as wide as the parent container. Extra spacing will be added to the element's size without regards to the parent. This typically causes problems.

  • Width 100% : It will make content width 100%. margin, border, padding will be added to this width and element will overflow if any of these added.

    Width auto : It will fit the element in available space including margin, border and padding. space remaining after adjusting margin + padding + border will be available width/ height.

    Width 100% + box-sizing: border box : It will also fits the element in available space including border, padding (margin will make it overflow the container).

    As long as the value of width is auto, the element can have horizontal margin, padding and border without becoming wider than its container (unless of course the sum of margin-left + border-left-width + padding-left + padding-right + border-right-width + margin-right is larger than the container). The width of its content box will be whatever is left when the margin, padding and border have been subtracted from the container’s width.

    On the other hand, if you specify width:100%, the element’s total width will be 100% of its containing block plus any horizontal margin, padding and border (unless you’ve used box-sizing:border-box, in which case only margins are added to the 100% to change how its total width is calculated). This may be what you want, but most likely it isn’t.

    Source:

    http://www.456bereastreet.com/archive/201112/the_difference_between_widthauto_and_width100/

    The initial width of a block level element like div or p is auto.

    Use width:auto to undo explicitly specified widths.

    if you specify width:100%, the element’s total width will be 100% of its containing block plus any horizontal margin, padding and border.

    So, next time you find yourself setting the width of a block level element to 100% to make it occupy all available width, consider if what you really want is setting it to auto.

    width will never exceed the total width of parent element. Maximum width is it's parent width. Even if we add border, padding and margin, content of element itself will become smaller in order to give space for border, padding and margin. In case if space required for border + padding + margin is greater than total width of parent element then width of content will become zero.

    When we say

    width:100%;
    

    width of content of element will become 100% of parent element and from now if we add border, padding or margin then it will cause child element to exceed parent element's width and it will starts overflowing out of parent element.

    For positioning elements, width: 100%, not relative to the parent, but the nearest positioned element.

    If they are all statically positioned, it is the nearest parent element.

    Yes, I know but I am trying to show here about width: auto and display: inline-block. When we want to auto increase width of any block level element then we can use this. And difference between 100% & auto – Mohammed Javed Aug 18, 2017 at 11:40

    Thanks for contributing an answer to Stack Overflow!

    • Please be sure to answer the question. Provide details and share your research!

    But avoid

    • Asking for help, clarification, or responding to other answers.
    • Making statements based on opinion; back them up with references or personal experience.

    To learn more, see our tips on writing great answers.