J'utilise Bootstrap. Comment faire trois colonnes de même hauteur?
Voici une capture d'écran du problème. J'aimerais que les colonnes bleues et rouges aient la même hauteur que la colonne jaune.
Voici le code:
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container-fluid">
<div class="row">
<div class="col-xs-4 panel" style="background-color: red">
some content
</div>
<div class="col-xs-4 panel" style="background-color: yellow">
catz
<img width="100" height="100" src="https://lorempixel.com/100/100/cats/">
</div>
<div class="col-xs-4 panel" style="background-color: blue">
some more content
</div>
</div>
</div>
css
twitter-bootstrap
Richard
la source
la source
.row
manqueflex-wrap: wrap;
. Voici un exemple de fonctionnement avec réactivité: codepen.io/bootstrapped/details/RrabNeRéponses:
Solution 4 à l'aide de Bootstrap 4
Bootstrap 4 utilise Flexbox, il n'y a donc pas besoin de CSS supplémentaire.
Démo
Solution 1 utilisant des marges négatives (ne rompt pas la réactivité)
Démo
Solution 2 en utilisant un tableau
Démo
La solution 3 utilisant flex a été ajoutée en août 2015. Les commentaires publiés avant cela ne s'appliquent pas à cette solution.
Démo
la source
flex-wrap: wrap;
au troisième exemple pour activer la réactivité. Vous voudrez également ajouter l'affichage: flex; flex-direction: colonne; à la classe de colonne. Si vous allez utiliser .row et non une classe personnalisée, vous devrez fournir un remplacement pour les navigateurs plus anciens qui modifient le flex d'affichage. Voici un exempleMise à jour 2020
Meilleure approche pour Bootstap 3.x - utilisant CSS flexbox (et nécessite un minimum de CSS).
Exemple de flexbox Bootstrap de même hauteur
Pour appliquer la flexbox de la même hauteur uniquement à des points d'arrêt spécifiques (réactifs), utilisez une requête multimédia. Par exemple, voici
sm
(768px) et plus:Cette solution fonctionne également bien pour plusieurs lignes (habillage de colonne):
https://www.bootply.com/gCEXzPMehZ
Autres solutions de contournement
Ces options seront recommandées par d'autres, mais ne sont pas une bonne idée pour une conception réactive. Celles-ci ne fonctionnent que pour les mises en page simples à une seule ligne sans habillage de colonne.
1) Utiliser d' énormes marges négatives et un rembourrage
2) Utilisation de display: table-cell (cette solution affecte également la grille réactive, donc une requête @media ne peut être utilisée que pour appliquer l'
table
affichage sur des écrans plus larges avant que les colonnes ne s'empilent verticalement)Bootstrap 4
Flexbox est maintenant utilisé par défaut dans Bootstrap 4, il n'est donc pas nécessaire que le CSS supplémentaire crée des colonnes de hauteur égale: http://www.codeply.com/go/IJYRI4LPwU
Exemple:
la source
Pas besoin de JavaScript. Ajoutez simplement la classe
.row-eq-height
à votre existant.row
comme ceci:Astuce: si vous avez plus de 12 colonnes dans votre ligne, la grille d'amorçage ne parviendra pas à l'envelopper. Ajoutez donc une nouvelle
div.row.row-eq-height
chaque 12 colonnes.Astuce: vous devrez peut-être ajouter
à votre html
la source
Pour répondre à votre question est vous avez tous besoin voir la démo complète avec réponse css préfixé :
Pour ajouter la prise en charge du contenu des vignettes flex dans les colonnes flex comme la capture d'écran ci-dessus, ajoutez également ceci ... Notez que vous pouvez également le faire avec les panneaux:
Bien que flexbox ne fonctionne pas dans IE9 et ci-dessous, vous pouvez utiliser la démo avec un repli en utilisant des balises conditionnelles avec quelque chose comme des grilles javascript comme polyfill:
Quant aux deux autres exemples de la réponse acceptée ... La démonstration de la table est une idée décente mais est mal mise en œuvre. L'application de ce CSS sur les classes de colonnes bootstrap en particulier rompra sans aucun doute le cadre de la grille. Vous devez utiliser un sélecteur personnalisé pour un et deux styles de tableaux ne doivent pas être appliqués à
[class*='col-']
des largeurs définies. Cette méthode doit être utilisée UNIQUEMENT si vous voulez des colonnes de hauteur ET de largeur égales. Il n'est pas destiné à d'autres mises en page et n'est PAS réactif. On peut cependant y revenir sur les écrans mobiles ...Enfin, la première démo de la réponse acceptée qui implémente une version de la seule mise en page vraie est un bon choix pour certaines situations, mais ne convient pas aux colonnes d'amorçage. La raison en est que toutes les colonnes se développent à la hauteur du conteneur. Ainsi, cela interrompra également la réactivité, car les colonnes ne s'étendent pas aux éléments à côté d'eux, mais à l'ensemble du conteneur. Cette méthode ne vous permettra pas non plus d'appliquer des marges inférieures aux lignes et entraînera également d'autres problèmes en cours de route, comme le défilement des balises d'ancrage.
Pour le code complet, voir le Codepen qui préfixe automatiquement le code flexbox.
la source
row:after, row:before
avoir display: set de table qui apparemment n'aime pas Safari.Vous ne montrez qu'une seule ligne, votre cas d'utilisation peut donc être limité à cela. Juste au cas où vous avez plusieurs lignes, ce plugin - github Javascript-grids - fonctionne parfaitement! Il permet à chaque panneau de s'étendre jusqu'au panneau le plus haut, donnant à chaque rangée potentiellement une hauteur différente en fonction du panneau le plus haut de cette rangée. C'est une solution jquery vs css, mais je voulais la recommander comme approche alternative.
la source
Si vous souhaitez que cela fonctionne dans n'importe quel navigateur, utilisez javascript:
la source
.ready()
n'est pas le bon moment pour l'appeler - elle devrait être appelée.load()
window.onload = function() {...function content above...}
plutôt. Cela fonctionne mieux.J'ai essayé beaucoup de suggestions faites dans ce fil et sur d'autres pages, mais aucune solution ne fonctionnait à 100% dans tous les navigateurs.
J'ai donc expérimenté pas mal de temps et j'ai trouvé ça. Une solution complète pour les colonnes Bootstrap Equal Height à l'aide de flexbox avec seulement 1 classe. Cela fonctionne dans tous les principaux navigateurs IE10 +.
CSS:
HTML:
Pour prendre en charge encore plus de versions d'IE, vous pouvez, par exemple, utiliser https://github.com/liabru/jquery-match-height et cibler toutes les colonnes enfants de
.equal-cols
. Comme ça:Sans ce polyfill, les colonnes se comporteront comme les colonnes Bootstrap habituelles, ce qui est une assez bonne solution de rechange.
la source
Vous pouvez également utiliser inline-flex qui fonctionne assez bien et peut être un peu plus propre que la modification de chaque élément de ligne avec CSS.
Pour mon projet, je voulais que chaque rangée dont les éléments enfants aient des bordures soit de la même hauteur afin que les bordures soient dentelées. Pour cela, j'ai créé une classe css simple.
la source
De:
http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css
la source
solution jquery effrontée si quelqu'un est intéressé. Assurez-vous simplement que tous vos cols (el) ont un nom de classe commun ... fonctionne également si vous le liez à $ (window) .resize
Usage
Remarque: ce message a été modifié conformément au commentaire de @Chris, indiquant que le code n'a été défini que sur la dernière hauteur la plus élevée de la
$.each()
fonctionla source
Certaines des réponses précédentes expliquent comment rendre les divs de la même hauteur, mais le problème est que lorsque la largeur est trop étroite, les divs ne s'empilent pas, vous pouvez donc implémenter leurs réponses avec une partie supplémentaire. Pour chacun, vous pouvez utiliser le nom CSS donné ici en plus de la classe de ligne que vous utilisez, donc le div devrait ressembler à ceci si vous voulez toujours que les div soient côte à côte:
Pour tous les écrans:
Pour quand vous souhaitez utiliser sm:
Pour quand vous voulez md:
Pour quand vous voulez utiliser lg:
EDIT Sur la base d'un commentaire, il existe en effet une solution plus simple, mais vous devez vous assurer de donner des informations sur les colonnes de la plus grande largeur souhaitée pour toutes les tailles jusqu'à xs (par exemple
<div class="col-md-3 col-sm-4 col-xs-12">
:la source
flex-wrap: wrap;
alors vous n'avez pas besoin de tous les éléments séparés ... à moins que vous ne les vouliez spécifiquement.Je suis surpris de ne pas avoir trouvé de solution valable ici fin 2018. Je suis allé de l'avant et j'ai moi-même trouvé une solution Bootstrap 3 en utilisant flexbox.
Exemple propre et simple:
HTML
CSS
Voir la démo de travail: http://jsfiddle.net/5kmtfrny/
la source
Je sais que je suis très en retard, mais maintenant vous pouvez utiliser l'attribut de style "min-height" pour atteindre votre objectif.
la source
Si quelqu'un utilise bootstrap 4 et recherche des colonnes de hauteur égale, utilisez simplement le
row-eq-height
parent divRéf: http://getbootstrap.com.vn/examples/equal-height-columns/
la source
voici ma solution (CSS compilé):
Votre code ressemblerait donc à:
Fondamentalement, c'est le même système que vous utilisez avec des
.col-*
classes avec cette différence dont vous avez besoin pour appliquer des.row-*
classes à la ligne elle-même.Les
.row-sm-eq
colonnes seront empilées sur les écrans XS. Si vous n'avez pas besoin de les empiler sur les écrans que vous pouvez utiliser.row-xs-eq
.La version SASS que nous utilisons réellement:
Démo en direct
Remarque: le mélange
.col-xs-12
et l'.col-xs-6
intérieur d'une seule rangée ne fonctionneraient pas correctement.la source
border-spacing
et des marges négatives.Il y a un problème avec l'utilisation de la solution 1 lors de son application sur la seule colonne des lignes. Souhaite améliorer la solution 1.
(Désolé, je ne peux pas commenter la réponse de Popnoodles. Je n'ai pas assez de réputation)
la source
Meilleur là-bas:
Réflexe Github - Docs
Fonctionne avec bootstrap
Mise à jour:
la source
Voici ma méthode, j'ai utilisé flex avec quelques changements dans la requête média.
puis ajouté les classes nécessaires au parent.
J'utilise des points d'arrêt réactifs car le flux entrave généralement la nature réactive standard du bootstrap.
la source
J'utilise cette solution super facile avec
clearfix
, qui n'a aucun effet secondaire.Voici un exemple sur AngularJS:
Et encore un exemple sur PHP:
la source
Pour ceux qui recherchent une solution rapide et facile - si vous avez un ensemble de contenu de bloc relativement cohérent, définir une hauteur minimale sur la div qui est un peu plus grande que le plus grand bloc peut être plus facile à mettre en œuvre.
la source
où .container-height est la classe de style qui doit être ajoutée à un élément de style .row auquel tous ses enfants .col * ont la même hauteur.
L'application de ces styles uniquement à certains .row spécifiques (avec .container-height, comme dans l'exemple) évite également d'appliquer la marge et le dépassement de remplissage à tous les .col *.
la source
J'ai cherché une solution au même problème et j'en ai trouvé une qui fonctionnait !! - avec presque pas de code supplémentaire ..
voir https://medium.com/wdstack/bootstrap-equal-height-columns-d07bc934eb27 pour une bonne disuccuion, et avec la resposne que vous voulez en bas, avec un lien.
https://www.codeply.com/go/EskIjvun4B
c'était la bonne façon de réagir pour moi ... un devis: ... 3 - Utilisez flexbox (le meilleur!)
Depuis 2017, la meilleure (et la plus simple) façon de créer des colonnes de hauteur égale dans une conception réactive consiste à utiliser CSS3 flexbox.
et utilisez simplement:
la source
Exemple:
https://jsfiddle.net/b9chris/njcnex83/embedded/result/
Adapté de plusieurs réponses ici. Les réponses basées sur la flexbox sont la bonne façon une fois qu'IE8 et 9 sont morts, et qu'une fois Android 2.x est mort, mais ce n'est pas vrai en 2015, et ce ne sera probablement pas le cas en 2016. IE8 et 9 constituent toujours 4- 6% d'utilisation selon la façon dont vous mesurez, et pour de nombreux utilisateurs d'entreprise, c'est bien pire. http://caniuse.com/#feat=flexbox
La
display: table
,display: table-cell
astuce est plus rétrocompatible - et une grande chose est le seul problème de compatibilité grave est un problème Safari où elle forcesbox-sizing: border-box
, quelque chose déjà appliqué à vos balises Bootstrap. http://caniuse.com/#feat=css-tableVous pouvez évidemment ajouter plus de classes qui font des choses similaires, comme
.equal-height-md
. Je les ai liés aux divs pour le petit avantage de performance dans mon utilisation contrainte, mais vous pouvez supprimer la balise pour la rendre plus généralisée comme le reste de Bootstrap.Notez que jsfiddle utilise ici CSS, et donc, les choses que Less fournirait autrement sont codées en dur dans l'exemple lié. Par exemple, @ screen-sm-min a été remplacé par ce que Less insérerait - 768px.
la source
Si cela a du sens dans votre contexte, vous pouvez simplement ajouter un div vide de 12 colonnes après chaque pause, qui agit comme un séparateur qui épouse le bas de la cellule la plus haute de votre ligne.
J'espère que cela t'aides!
la source
Je pensais simplement ajouter que la réponse donnée par Dr.Flink peut également être appliquée à un
form-horizontal
bloc Bootstrap 3 - ce qui peut être très pratique si vous souhaitez utiliser des couleurs d'arrière-plan pour chaque cellule. Pour que cela fonctionne pour les formulaires d'amorçage, vous devez envelopper le contenu du formulaire qui sert simplement à répliquer une structure de type tableau.L'exemple ci-dessous fournit également le CSS qui démontre qu'une requête multimédia supplémentaire permet à Bootstrap 3 de simplement prendre le contrôle et de faire sa chose normale sur les écrans les plus petits. Cela fonctionne également dans IE8 +.
Exemple:
la source
Essayez ceci avec Flex-Box
Live JSFiddle - https://jsfiddle.net/grinmax_/spsn4fnq/
la source
Donc oui, Bootstrap 4 fait que tous les cols d'une ligne sont de hauteur égale, mais si vous créez une bordure autour du contenu à l'intérieur de la ligne, vous constaterez peut-être que les cols ne sont pas de hauteur égale!
Lorsque j'ai appliqué
height: 100%
à l'élément à l'intérieur du col, j'ai constaté que j'avais perdu ma marge.Ma solution est d'utiliser un remplissage sur le div du col (au lieu d'une marge sur l'élément interne). Ainsi:
L'exemple de code ci-dessus utilise Bootstrap 4.1 pour créer un ensemble de neuf boîtes avec une bordure
la source
HTML
CSS
JS
la source
19/03/2019
** Solution Bootstrap 4 à hauteur égale **
Utilitaires Bootstrap / flex pour une hauteur égale
Exemple en direct à Codepen
Hauteur égale par classe bootstrap avec parent div fixe
height
oumin-height
Afficher l'extrait de code
la source
Vous pouvez envelopper les colonnes dans un div
la source