Posição absoluta, mas relativa ao pai

457

Eu tenho duas divs dentro de outra div e quero posicionar uma div filho no canto superior direito da div pai e a outra div filho na parte inferior da div pai usando css. Ou seja, eu quero usar o posicionamento absoluto com os dois divs filhos, mas posicione-os em relação ao div pai em vez da página. Como posso fazer isso?

Exemplo de html:

<div id="father">
   <div id="son1"></div>
   <div id="son2"></div>
</div>
BlaShadow
fonte
Você quer que o filho1 esteja no canto superior direito do pai, mas onde na parte inferior o filho2 deve estar? Inferior esquerdo, direito ou central?
j08691
1
Nesse caso, você precisaria definir position: relativo ao elemento pai e position: absoluto para os elementos filhos. No primeiro elemento filho, você deve colocar top: 0 e right: 0 para posicioná-lo no canto superior direito do elemento pai. No segundo filho, você deve colocar bottom: 0 para posicioná-lo na parte inferior do elemento pai. Há um ótimo artigo aqui, kolosek.com/css-position-relative-vs-position-absolute, que explica detalhadamente o posicionamento relativo e absoluto.
Nesha Zoric

Respostas:

812
#father {
   position: relative;
}

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

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

Isso funciona porque position: absolutesignifica algo como "uso top, right, bottom, leftpara posicionar-se em relação ao predecessor mais próximo que tem position: absoluteou position: relative."

Assim, fazemos #fathertem position: relative, e as crianças têm position: absolute, em seguida, usar tope bottomposicionar as crianças.

Domenic
fonte
17
Por que é #father { position: relative; }necessário?
Joshreesjones
4
é necessário alterar a "regra de posição" para aqueles que estão dentro dele.
BlaShadow
36
@ mathguy54 Como a especificação diz que elementos absolutamente posicionados são posicionados em relação ao primeiro pai posicionado , o que significa qualquer pai que não tenha um valor de posição static.
Alex W
e quanto a esse cenário: PAI é relativo e sua altura é 100% como posicionar filho e filho2, digamos 20% e 70% da altura do pai, 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
fonte
1
E se você precisar redimensionar pai com filho?
precisa saber é o seguinte
10

Caso alguém queira posicionar um filho div diretamente sob um pai

#father {
   position: relative;
}

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

Demonstração de trabalho Codepen

petergus
fonte
6

Se você não der nenhuma posição aos pais, por padrão, será necessário static. Se você deseja entender essa diferença, consulte este exemplo

Exemplo 1::

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

   #mainall
{

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

Aqui a classe pai não tem posição, então o elemento é colocado de acordo com o corpo.

Exemplo 2 ::

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

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

Neste exemplo, pai possui posição relativa, portanto, o elemento é posicionado absoluto dentro do pai relativo.

anam
fonte
E se você não tiver o #mainall {height: 150px} ...? Quero dizer, se mainall tem altura dinâmica?
Albert Català
seu elemento flutuante será relativo à posição que o elemento pai ocupava quando a página (e o css) foi carregado. Se você deseja atualizar que, após o carregamento da página, use javascript - clientX e clientY são um bom lugar para começar
Abraham Brookes