163 votes

Comment faire en sorte que deux <div>s se chevauchent ?

J'ai besoin de deux divs qui ressemblent un peu à ceci :

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

Quelle est la façon la plus élégante de les faire se chevaucher proprement ? Le logo aura une hauteur et une largeur fixes et touchera le bord supérieur de la page.

101voto

TravisO Points 6257

Il suffit d'utiliser des marges négatives, dans la deuxième div dire :

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

Et assurez-vous de définir la propriété z-index pour obtenir la superposition que vous souhaitez.

9 votes

C'est de loin la méthode la plus simple, et elle peut facilement être adaptée à des pieds de page qui se chevauchent en utilisant margin-bottom sur le contenu d'une page. Nous vous remercions de votre attention.

1 votes

Cette solution semble dépendre du DOCTYPE, n'est-ce pas ? car elle n'a pas fonctionné avec le DOCTYPE HTML5 lorsque j'ai essayé.

2 votes

Cela devrait être la réponse acceptée, la position absolue a tendance à poser des problèmes.

92voto

Owen Points 36009

Je pourrais l'aborder comme ça :

CSS :

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
}

HTML :

<div id="logo"><img src="logo.jpg" /></div>
<div id="content">
  <div id="links"></div>
</div>

2 votes

Y a-t-il un moyen de faire en sorte que le contenu n'occupe que l'espace utilisé par le logo ?

1 votes

Si c'est le cas, c'est juste un flux normal de divs (donc enlever left, top, position de #logo). J'ai l'impression que tu veux dire quelque chose d'autre ! :)

2 votes

Je pense que l'intention était de faire en sorte que le contenu (texte) s'enroule autour du logo.

5voto

sblundy Points 27163

Avec un positionnement absolu ou relatif, vous pouvez faire toutes sortes de superpositions. Vous souhaitez probablement que le logo soit stylisé de la sorte :

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

Remarque : la position absolue a ses excentricités. Vous devrez probablement expérimenter un peu, mais il ne devrait pas être trop difficile de faire ce que vous voulez.

1 votes

Cela aurait-il pour effet de faire chevaucher le logo sur le texte où se trouvent les liens ? Ou est-ce que cela pousserait les liens sur le côté ?

1 votes

Non, l'absolu supprime effectivement la balise du flux. Ce serait comme si elle n'existait pas.

2voto

FlySwat Points 61945

À l'aide de CSS, vous définissez la position absolue de la division logo et l'ordre z pour qu'elle soit au-dessus de la deuxième division.

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

1voto

jishi Points 10442

Si vous souhaitez que le logo prenne de la place, il est probablement préférable de le faire flotter à gauche, puis de déplacer le contenu vers le bas en utilisant la marge, comme ceci :

#logo {
    float: left;
    margin: 0 10px 10px 20px;
}

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

ou la marge que vous souhaitez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X