Como você faria a sobreposição de dois <div> s?


154

Eu preciso de duas divs para parecer um pouco com isso:

    |               |
 ---|    LOGO       |------------------------
|   |_______________|  LINKS                |
|             CONTENT                       |

Qual é a maneira mais elegante / elegante de fazê-las se sobrepor perfeitamente? O logotipo terá altura e largura fixas e tocará a borda superior da página.

css  html  overlap 

Respostas:


88

Eu poderia abordá-lo assim (CSS e HTML):

html,
body {
  margin: 0px;
}
#logo {
  position: absolute; /* Reposition logo from the natural layout */
  left: 75px;
  top: 0px;
  width: 300px;
  height: 200px;
  z-index: 2;
}
#content {
  margin-top: 100px; /* Provide buffer for logo */
}
#links {
  height: 75px;
  margin-left: 400px; /* Flush links (with a 25px "padding") right of logo */
}
<div id="logo">
  <img src="https://via.placeholder.com/200x100" />
</div>
<div id="content">
  
  <div id="links">dssdfsdfsdfsdf</div>
</div>


2
existe alguma maneira de criar conteúdo para evitar o espaço usado pelo logotipo?
Javier

1
hmm, você pode esclarecer? Entendo que você quer apenas o logotipo acima do conteúdo? nesse caso, é apenas um fluxo normal de divs (remova a esquerda, a posição superior e a posição de #logo). Tenho a sensação de que você quer dizer outra coisa! :)
Owen

2
Eu acho que o que se pretendia era ter o conteúdo (texto) embrulhar ao redor do logotipo
Davy8

2
ah hmm, tenho certeza que não. o problema de ser um elemento pode ser flutuado ou posicionado, mas não ambos. até que desenvolvam algum tipo de float: idéia central ...
Owen

88

Basta usar margens negativas, na segunda div diga:

<div style="margin-top: -25px;">

E certifique-se de definir a propriedade z-index para obter as camadas desejadas.


9
Esse é de longe o método mais simples e pode ser facilmente adaptado para rodapés sobrepostos usando a margem inferior no conteúdo de uma página. Obrigado!
22812 Peter DeWeese

1
esta solução parece depender do DOCTYPE, não é? porque não funcionou com o HTML5 DOCTYPE quando tentei.
Alumi 12/08

2
Esta deve ser a resposta aceita, posição absoluta tende a causar problemas.
Dmitriy

5

Com o posicionamento absoluto ou relativo, você pode fazer todo tipo de sobreposição. Você provavelmente deseja que o logotipo tenha o seguinte estilo:

div#logo {
  position: absolute;
  left: 100px; // or whatever
}

Nota: posição absoluta tem suas excentricidades. Você provavelmente terá que experimentar um pouco, mas não deve ser muito difícil fazer o que quiser.


1
Isso faria com que o logotipo se sobrepusesse ao texto onde estão os links? Ou empurraria os links para o lado?

1
Não, o absoluto remove efetivamente a tag do fluxo. Seria como se não estivesse lá.
sblundy

2

Usando CSS, você define o div do logotipo para a posição absoluta e a ordem z para estar acima do segundo div.

#logo
{
    position: absolute:
    z-index: 2000;
    left: 100px;
    width: 100px;
    height: 50px;
}

1

Se você deseja que o logotipo ocupe espaço, provavelmente é melhor flutuar para a esquerda e depois mover o conteúdo usando a margem, mais ou menos assim:

#logo {
    flutuar: esquerda;
    margem: 0 10 px 10 px 20 px;
}

#content {
    margem: 10 px 0 0 10 px;
}

ou qualquer margem que você desejar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.