Posición absoluta pero relativa al padre

457

Tengo dos divs dentro de otro div, y quiero colocar un div hijo en la parte superior derecha del div padre, y el otro div hijo en la parte inferior del div padre usando css. Es decir, quiero usar el posicionamiento absoluto con los dos div secundarios, pero posicionarlos en relación con el div primario en lugar de la página. ¿Cómo puedo hacer esto?

Muestra html:

<div id="father">
   <div id="son1"></div>
   <div id="son2"></div>
</div>
BlaShadow
fuente
¿Quieres que hijo1 esté en la esquina superior derecha del padre pero dónde en la parte inferior debe estar hijo2? Inferior izquierda, derecha o centro?
j08691
1
En este caso, necesitaría establecer la posición: relativa al elemento principal y la posición: absoluta a los elementos secundarios. En el primer elemento secundario, debe colocar top: 0 y right: 0 para colocarlo en la parte superior derecha del elemento primario. En el segundo elemento secundario, debe poner bottom: 0 para colocarlo en la parte inferior del elemento primario. Hay un gran artículo aquí kolosek.com/css-position-relative-vs-position-absolute que explica el posicionamiento relativo y absoluto en detalle.
Nesha Zoric

Respuestas:

813
#father {
   position: relative;
}

#son1 {
   position: absolute;
   top: 0;
}

#son2 {
   position: absolute;
   bottom: 0;
}

Esto funciona porque position: absolutesignifica algo así como "el uso top, right, bottom, leftposicionarse en relación con el antepasado más cercano que tiene position: absoluteo position: relative."

Así que hacemos #fatherhave position: relative, y los niños tienen position: absolute, luego usamos topy bottomposicionamos a los niños.

Domenic
fuente
17
¿Por qué se #father { position: relative; }requiere?
joshreesjones
44
se requiere cambiar la "regla de posición" para aquellos que están dentro de él.
BlaShadow
36
@ mathguy54 Debido a que la especificación dice que los elementos posicionados absolutamente se posicionan en relación con el primer padre posicionado , lo que significa cualquier padre que no tenga un valor de posición de static.
Alex W
¿Qué pasa con tal escenario: el PADRE es relativo y su altura es del 100%? ¿Cómo posicionar hijo e hijo2, digamos 20% y 70% de la altura del padre respectivamente?
Rossitten
27
div#father {
    position: relative;
}
div#son1 {
    position: absolute;
    /* put your coords here */
}
div#son2 {
    position: absolute;
    /* put your coords here */
}
Brian Warshaw
fuente
1
¿Qué pasa si necesita cambiar el tamaño del padre con el niño?
FrenkyB
10

En caso de que alguien quiera colocar un div de niño directamente debajo de un padre

#father {
   position: relative;
}

#son1 {
   position: absolute;
   top: 100%;
}

Demo de trabajo Codepen

petergus
fuente
6

Si no le da ninguna posición al padre, por defecto se necesita static . Si desea comprender esa diferencia, consulte este ejemplo

Ejemplo 1::

http://jsfiddle.net/Cr9KB/1/

   #mainall
{

    background-color:red;
    height:150px;
    overflow:scroll
}

Aquí la clase padre no tiene posición, por lo que el elemento se coloca de acuerdo con el cuerpo.

Ejemplo 2 ::

http://jsfiddle.net/Cr9KB/2/

#mainall
{
    position:relative;
    background-color:red;
    height:150px;
    overflow:scroll
}

En este ejemplo, el padre tiene una posición relativa, por lo tanto, los elementos se posicionan absolutos dentro del padre relativo.

anam
fuente
Y, ¿qué pasa si no tienes el #mainall {height: 150px} ...? Quiero decir, si mainall tiene altura dinámica?
Albert Català
entonces su elemento flotante será relativo a la posición que tenía el elemento padre cuando se cargó la página (y el CSS). Si desea actualizar eso después de la carga de la página, use javascript - clientX y clientY son un buen lugar para comenzar
Abraham Brookes