46

Here's what I am trying to accomplish...

  1. "parent" has position:relative
  2. "div 1-3" have position:absolute

However, whenever I do this, I find myself having to assign specific "top" values in my CSS. So div 1 might be top:50px, div 2 would be top:150px, and div 3 would be top:225px;

Is there a way to make sure the divs continue to stack inside the parent without assigning top values and/or absolute positioning?

1
  • Can you post your code? They should have that behavior by default. Commented Oct 10, 2013 at 0:15

7 Answers 7

41

A div should already display as a block and take up a full "row". Here is some HTML and CSS to give an example, compare it to your code:

http://jsfiddle.net/mWcWV/

<div id="parent">

    <div class="child">Foo</div>
    <div class="child">Bar</div>
    <div class="child">Baz</div>

</div>
0
9

Should be straight:

HTML:

<div class="container">
    <div class="red"></div>
    <div class="blue"></div>
    <div class="green"></div>
</div>

CSS:

.container {
    position: relative;
    width: 500px;
    height: 500px;
    background-color: #ffbf00;
}
.red {
    background-color: #f00;
    width: 200px;
    height: 150px;
    margin: 5px auto;
}
.blue { 
    background-color: #0f0;
    width: 200px;
    height: 150px;
    margin: 5px auto;
}
.green {
    background-color: #00f;
    width: 200px;
    height: 150px;
    margin: 5px auto;
}

Check this fiddle.

6

In css file use...

div
{
    display : block;
}

Which will give a break line for each div block and that feature is by default and don't use relative - absolute technique.

2
  • But the question is: if I have an inline menu and that three boxes arranged inline style using (parent -child) (relative -absolute) technique. How can that be possible
    – Osahady
    Commented Apr 29, 2017 at 15:09
  • Doing this will place each div immediately after its predecessor in a vertical manner rather than in a horizontal manner (i.e. in a column rather than in a row). It will not place any space between them, which the Question's illustration suggests is desired behaviour. Also, you should explain why you think they should not use the relative/ absolute technique.
    – toonice
    Commented Apr 29, 2017 at 15:49
3

Div elements are block elements, which means that they will take a full row and that any element next to them will skip a line. Just do:

<div></div>
<div></div>
<div></div>

If that does not work, you probably need to put them in display: inline-block;

1

HTML:

<div class="parent">
  <div class="child"></div>
  <div class="child"></div>
  <button class="child"></button>
</div>

CSS:

.parent {
  display: block;
}

.child {
  margin: auto;
}
1
  • Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
    – DSDmark
    Commented May 27, 2023 at 15:01
0

Just remove absolute positioning. Center the divs using margin:auto and then provide whatever vertical margins you like.

-1

You can give margin to inner div.

1
  • 4
    Please try and explain your answer with an example or a demo. It is too short to be accepted as an answer. Commented Oct 10, 2013 at 0:34

Not the answer you're looking for? Browse other questions tagged or ask your own question.