Exécuter Rails 4.1.4 avec les dernières versions de haml, haml-Rails, sass et bootstrap-sass. Pour un affichage utilisateur, mon HAML est comme tel:
.tutors-listing
.row
- @users.each do |tutor|
.col-xs-12.col-md-3
.row.tutor
.col-xs-offset-1.col-xs-4.col-md-12
= image_tag tutor.photo, :class => 'img-responsive img-circle tutor-photo'
%h4.tutor-name
= tutor.first_name
%p
teaches
%strong.tutor-skills
= tutor.teachables
Cependant, ce balisage entraîne le problème suivant:
J'espère que quelqu'un pourra deviner ce qui ne va pas ici. Au point d'arrêt moyen, il devrait y avoir 4 colonnes uniformément.
Cela est dû à des compétences avec 2 lignes de texte ou plus. C'est un bogue bien connu lors de l'utilisation de la propriété float
. Voici une petite image à comprendre:
Votre première option consiste à forcer les éléments à avoir la même hauteur:
.tutor {
height: 500px;
}
Votre deuxième option est d'utiliser un clearfix et de forcer le 5ème élément à être sur une nouvelle ligne (idem pour le 9ème, le 13ème ...):
.tutors-listing > .row > .col-md-3:nth-child(4n+1) {
clear: both;
}
xs/sm/md/lg
).col-xx-3
)Dans mon cas, je voulais afficher 3 éléments par ligne sur de grands écrans, 2 sur des écrans moyens et 1 sur des écrans plus petits.
Vous pouvez également décommenter les couleurs d'arrière-plan pour vérifier le moment où l'effet se déclenche.
http://www.bootply.com/QOor73wFAY#
/* fixes for columns wrapping in odd ways due to variable height */
/* when showing 2 items per row, clear #1, 3, 5 */
@media (min-width: $screen-sm-min){
.cell-box:nth-child(2n+1){
clear: both;
/* background-color: rgba(0, 0, 255, .5); /* blue */
}
}
/* when showing 3 items per row, clear #1, 4, 7 */
@media (min-width: $screen-md-min){
.cell-box:nth-child(2n+1){
clear: none;
}
.cell-box:nth-child(3n+1){
clear: both;
/* background-color: rgba(0, 255, 0, .5); /* green */
}
}
De par son apparence, vous affichez toutes les colonnes sur une seule ligne. Vous devez le changer pour qu'il commence une nouvelle ligne toutes les 4 colonnes, c'est-à-dire (en simple erb)
<% @users.each_slice(4).to_a.each do |chunk| %>
<div class="row">
<% chunk.each do |tutors| %>
<div class="col-sm-3">
...
</div>
<% end %>
</div>
<% end %>
Vous pourriez ne pas avoir besoin du to_a sur la première boucle
Parfois, je rencontre également ce problème. Je recommande d'essayer d'écraser tout remplissage ou marge dont vous n'avez PAS besoin. Essayez de changer la marge à 0 en premier. Retirez ensuite une partie du rembourrage. Cela a aidé dans certains de mes cas.