108 votes

HTML/CSS: Faire deux divs flottantes à la même hauteur

J'ai un petit problème particulier que j'ai actuellement à résoudre à l'aide d'un table, voir ci-dessous. En gros, je veux avoir deux divs prendre jusqu'à 100% de la largeur disponible, mais seulement de prendre autant d'espace vertical en tant que de besoin (ce qui n'est pas vraiment évident à partir de l'image). Les deux doit à tout moment avoir exactement la même hauteur, avec un peu de ligne entre eux, comme illustré.

alt text

Tout cela est très facile à faire en utilisant table, je suis en train de faire. Cependant, je ne suis pas trop vif sur la solution, tant du point de vue sémantique, ce n'est pas réellement une table.

166voto

Natalie Downe Points 1363

Vous pouvez obtenir la même hauteur des colonnes en CSS par l'application de remplissage en bas d'une grande quantité, en bas à marge négative de la même quantité et environnant les colonnes avec un div qui a débordement caché. Verticalement centrer le texte est un peu plus délicat, mais cela devrait vous aider sur le chemin.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
  <style type="text/css">
    #container {
      overflow: hidden;
      width: 100%;
    }
    #left-col {
      float: left;
      width: 50%;
      background-color: orange;
      padding-bottom: 500em;
      margin-bottom: -500em;
    }
    #right-col {
      float: left;
      width: 50%;
      margin-right: -1px; /* Thank you IE */
      border-left: 1px solid black;
      background-color: red;
      padding-bottom: 500em;
      margin-bottom: -500em;
    }
</style>
</head>
<body>
  <div id="container">

    <div id="left-col">
      <p>Test content</p>
      <p>longer</p>
    </div>

    <div id="right-col">
      <p>Test content</p>
    </div>

  </div>
</body>

Je pense qu'il vaut la peine de mentionner que la réponse précédente par streetpc a du code html non valide, le doctype XHTML et il y a des guillemets autour des attributs. Il faut également noter que vous n'avez pas besoin d'un élément supplémentaire avec l' clear sur pour effacer la flotte interne du conteneur. Si vous utilisez overflow hidden cela efface les flotteurs dans tous les navigateurs IE et puis juste ajouter quelque chose à donner hasLayout, tels que la largeur ou de zoom:1, c'est à dire clair de son interne de la flotte.

J'ai testé dans tous les navigateurs modernes FF3+ Opera9+ Chrome, Safari 3+ et IE6/7/8. Il peut sembler comme un vilain truc, mais il fonctionne bien et je l'utilise dans la production d'un lot.

J'espère que cette aide.

99voto

Dmitry Leskov Points 1566

C'est en 2014, si vous n'avez plus de soins sur IE6/7, display:table, display:table-row et display:table-cell de travail dans tous les navigateurs modernes:

http://www.456bereastreet.com/archive/200405/equal_height_boxes_with_css/

10voto

Andi P. Trix Points 21

vous pouvez vous procurer ce travail avec js:

<script>
    $(document).ready(function() {
        var height = Math.max($("#left").height(), $("#right").height());
        $("#left").height(height);
        $("#right").height(height);
    });
</script>

5voto

Philippe Leybaert Points 62715

C'est un problème classique en CSS. Il n'est pas vraiment une solution pour cela.

Cet article à partir d'Une Liste à Part est une bonne lecture sur ce problème. Il utilise une technique appelée "faux colonnes", fondée sur une verticale arrière-plan en mosaïque de l'image sur l' élément contenant les colonnes qui crée l'illusion de l'égalité des colonnes de longueur. Depuis qu'il est sur le flottait éléments " wrapper, il est aussi long que le plus long de l'élément.


La Une Liste, en dehors des éditeurs cette remarque sur l'article:

Une note de la rédaction: bien qu'excellente pour l'époque, cet article peut ne pas refléter moderne des meilleures pratiques.

La technique nécessite complètement statique de la largeur des dessins qui ne fonctionne pas bien avec le liquide de mises en page et responsive design techniques qui sont populaires aujourd'hui pour le cross-device sites. Pour largeur statique sites, cependant, c'est une option fiable.

4voto

Mr Br Points 213

J'ai eu le même problème et à mon avis, la meilleure option est d'utiliser un peu de javascript ou jquery.

Vous pouvez obtenir voulais divs pour être de la même hauteur en obtenant la plus haute div valeur et de l'application de cette valeur à tous les autres divs. Si vous avez beaucoup de divs et de nombreuses solutions, je suggère d'écrire peu à l'avance du code js pour savoir lequel de tous les divs est le plus élevé et ensuite utiliser la valeur.

Avec jquery et 2 divs c'est très simple, voici un exemple de code:

$('.smaller-div').css('height',$('.higher-div').css('height'));

Et pour la fin, il y a 1 dernière chose. Leur remplissage (haut et bas) doit être le même ! Si l'on avoir plus de rembourrage que vous devez éliminer rembourrage différence.

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