I'm trying to create <div>s within another <div> at the click of a button. When the button is clicked, a new inner <div> is created (within the outer <div>) with a unique id. Each inner <div> also has a random margin-top CSS value. All this works but I would like to make the outer <div> only scroll horizontally. Therefore, the inner <div>s all have to be created inline. However I cannot use display:inline-block for the inner <div>s because that removes the random margin-top functionality.
(Credit to user totymedli for the code help)
<button id="button1">Add box</button>
<div id="outer"></div>
#outer {
position:absolute;
white-space:nowrap;
height:118px;
overflow:auto;
width:100%;
padding:2px;
}
.box{
float:left;
width:48px;
height:48px;
background-color:#000;
margin-left:5px;
}
var number = 0;
document.getElementById("button1").addEventListener("click", pressButton, false);
function pressButton() {
++number;
makeDiv(number);
};
function makeDiv(x) {
var innerDiv = document.createElement("div");
outer.appendChild(innerDiv);
innerDiv.className += " box";
innerDiv.setAttribute("id", "innerDiv" + x);
innerDiv.setAttribute("style", "margin-top:" + Math.floor(Math.random()*51) + "px;");
};
Here is the working Demo.
As you can see, creating new inner <div>s works and each of them has a random margin-top. How do I make the outer <div> scroll horizontally and prevent the inner <div>s from breaking to the next line?
Actually, you can use inline-block, just add vertical-align:top and it will work as expected.
UPDATED EXAMPLE
It's worth noting that the default value of vertical-align is baseline; that's why the margin didn't seem to be taking effect.
.box{
display:inline-block;
vertical-align:top;
width:48px;
height:48px;
background-color:#000;
margin-left:5px;
}
If, for some reason, you are insistent on floating the elements (which I don't recommend), you would simply have to increase the width of the parent element to therefore contain the children elements.
Try this code:
Instead of inline-block ,you can also use inline-table
Fiddle
.box{
display: inline-table;
vertical-align: top;
width: 48px;
height: 48px;
background-color: #000;
margin-left: 5px;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With