J'ai un petit problème particulier que je résous actuellement en utilisant un table
, voir ci-dessous. Fondamentalement, je souhaite que deux div occupent 100% de la largeur disponible, mais n'occupent que l'espace vertical nécessaire (ce qui n'est pas vraiment évident sur la photo). Les deux devraient à tout moment avoir exactement la même hauteur avec une petite ligne entre eux, comme indiqué.
(source: pici.se )
Tout cela est très facile à utiliser table
, ce que je fais actuellement. Cependant, je ne suis pas trop intéressé par la solution, car sémantiquement, ce n'est pas réellement une table.
html
css
html-table
Deniz Dogan
la source
la source
Réponses:
Vous pouvez obtenir des colonnes de hauteur égale en CSS en appliquant un remplissage inférieur d'une grande quantité, une marge négative inférieure du même montant et en entourant les colonnes d'un div qui a un dépassement caché. Centrer verticalement le texte est un peu plus délicat, mais cela devrait vous aider en cours de route.
Je pense qu'il vaut la peine de le mentionner
la réponse précédente de streetpc a un code HTML invalide, le doctype est XHTML et il y a des guillemets simples autour des attributs. Il convient également de noter quevous n'avez pas besoin d'un élément supplémentaire avecclear
on pour effacer les flotteurs internes du conteneur. Si vous utilisez overflow hidden, cela efface les flottants dans tous les navigateurs non-IE, puis ajoutez simplement quelque chose pour donner hasLayout tel que width ou zoom: 1 provoquera IE effacer ses floats internes.J'ai testé cela dans tous les navigateurs modernes FF3 + Opera9 + Chrome Safari 3+ et IE6 / 7/8. Cela peut sembler un truc moche mais cela fonctionne bien et je l'utilise beaucoup en production.
J'espère que ça aide.
la source
C'est l'année 2012 + n, donc si vous ne vous souciez plus d'IE6 / 7
display:table
,display:table-row
et que vousdisplay:table-cell
travaillez dans tous les navigateurs modernes:http://www.456bereastreet.com/archive/200405/equal_height_boxes_with_css/
Mise à jour 17/06/2016: Si vous pensez que le temps est venu
display:flex
, consultez Flexbox Froggy .la source
display: flex
?Vous devez utiliser flexbox pour y parvenir. Il n'est pas pris en charge dans IE8 et IE9 et uniquement avec le préfixe -ms dans IE10, mais tous les autres navigateurs le prennent en charge. Pour les préfixes de fournisseur, vous devez également utiliser un autoprefixer .
la source
vous pouvez faire fonctionner cela avec js:
la source
C'est un problème classique en CSS. Il n'y a pas vraiment de solution à cela.
Cet article de A List Apart est une bonne lecture de ce problème. Il utilise une technique appelée «fausses colonnes», basée sur le fait d'avoir une image d'arrière-plan en mosaïque verticale sur l' élément contenant les colonnes, ce qui crée l'illusion de colonnes de longueur égale. Comme il se trouve sur le wrapper des éléments flottants, il est aussi long que l'élément le plus long.
Les éditeurs de A List Apart ont cette note sur l'article:
La technique nécessite des conceptions de largeur complètement statiques qui ne fonctionnent pas bien avec les mises en page liquides et les techniques de conception réactive qui sont populaires aujourd'hui pour les sites multi-appareils. Pour les sites de largeur statique, cependant, c'est une option fiable.
la source
J'ai eu un problème similaire et à mon avis, la meilleure option est d'utiliser juste un peu de javascript ou jquery.
Vous pouvez obtenir que les divs voulus aient la même hauteur en obtenant la valeur div la plus élevée et en appliquant cette valeur à tous les autres div. Si vous avez beaucoup de divs et de nombreuses solutions, je suggère d'écrire un petit code js avancé pour savoir lequel de tous les divs est le plus élevé, puis d'utiliser sa 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 une dernière chose. Leur rembourrage (haut et bas) doit être le même! Si vous avez un rembourrage plus grand, vous devez éliminer la différence de rembourrage.
la source
Pour autant que je sache, vous ne pouvez pas faire cela en utilisant les implémentations actuelles de CSS. Pour créer deux colonnes, de hauteur égale, vous avez besoin de JS.
la source
Cela fonctionne pour moi dans IE 7, FF 3.5, Chrome 3b, Safari 4 (Windows).
Fonctionne également dans IE 6 si vous décommentez le div plus clair en bas. Edit : comme l'a dit Natalie Downe, vous pouvez simplement ajouter
width: 100%;
à la#container
place.Je ne connais pas de moyen CSS pour centrer verticalement le texte dans le bon div si le div n'est pas de hauteur fixe. Si c'est le cas, vous pouvez définir la
line-height
même valeur que la hauteur du div et mettre un div interne contenant votre texte avecdisplay: inline; line-height: 110%
.la source
En utilisant Javascript, vous pouvez faire en sorte que les deux balises div aient la même hauteur. Le plus petit div s'ajustera à la même hauteur que le plus grand tag div en utilisant le code ci-dessous:
Avec "gauche" et "droite" étant les identifiants des balises div.
la source
En utilisant la propriété css -> display: table-cell
la source
En utilisant JS, utilisez
data-same-height="group_name"
dans tous les éléments que vous souhaitez avoir la même hauteur .L'exemple: https://jsfiddle.net/eoom2b82/
Le code:
la source
J'avais besoin de faire quelque chose de similaire, voici ma mise en œuvre. Pour récapituler le but, il est d'avoir 2 éléments occupant la largeur d'un conteneur parent donné, et la hauteur d'être seulement aussi haute que nécessaire. Essentiellement, la hauteur équivaut à la hauteur maximale de la plus grande quantité de contenu, mais l'autre conteneur est affleurant.
html
css
la source
Il y a plusieurs années, la
float
propriété résolvait ce problème avec l'table
approche utilisantdisplay: table;
etdisplay: table-row;
etdisplay: table-cell;
.Mais maintenant, avec la propriété flex, vous pouvez le résoudre avec 3 lignes de code:
display: flex;
etflex-wrap: wrap;
etflex: 1 0 50%;
1 0 50%
sont lesflex
valeurs que nous avons données à:flex-grow flex-shrink flex-basis
respectivement. C'est un raccourci relativement nouveau dans flexbox pour éviter de les taper individuellement. J'espère que cela aide quelqu'un là-basla source