Search code examples
htmlcsswidth

How can I make a div dynamically change to content width and have it remain that width even as the browser window changes size?


Take a look at this: (Scenario 1)

#container {
    height:150px;
    border:1px solid pink;
    width:1100px;
}
#widget {
    display:inline-block;
    width:100px;
    height:100px;
    background-color:red;
}​

http://jsfiddle.net/DQFja/1/

Very simple. A div with a bunch of other divs within it. Parent div has a fixed width of ~1000 pixels, children divs are set to display:inline-block; When you make the browser window smaller than the parent, a scroll bar appears and you can scroll to see the rest.

Now take a look at this: (Scenario 2)

#container {
    height:150px;
    border:1px solid pink;
    float:left;
}
#widget {
    display:inline-block;
    width:100px;
    height:100px;
    background-color:red;
}​

http://jsfiddle.net/zZRq7/

Same parent and children, but the width of the parent is dynamically determined by the number of div children you place in it. Which is dandy. However, when you make the browser window smaller, the parent div becomes as wide as the window and the children start wrapping around, making the parent taller (Even though we set a fixed height!)

How do I make the parent div BOTH dynamic in width as in scenario 2, but then also keep its shape/height/width when the browser window gets smaller so we can get a scrollbar?


Solution

  • Min-width is the way to go:

    #container {
        height:150px;
        border:1px solid pink;
        min-width:1100px; // set the minimum width of the container to 1100px
        width: 100%; // if the window size is bigger than 1100px, then make the container span the entire window
    }
    

    See a live example here.

    A hacky way to achieve is using the white-space property as follows:

    #container {
        border:1px solid pink;
        white-space: nowrap;
    }
    #widget {
        display: inline-block;
        width:100px;
        height:100px;
        background-color:red;
    }​
    

    See a live example here