J'ai deux colonnes de même taille (.col-xs-12
) et je changerais leur place lorsque la taille de l'écran correspondrait à celle d'un appareil mobile. Je les placerais dans l'ordre inverse.
J'ai lu que les directives Push et pull bootstrap aident à accomplir cela, mais est-il possible de changer la place de deux colonnes de la même taille avec les classes suivantes?
div.col-xs-12.col-xs-Push-12
p test1
div.col-xs-12.col-xs-pull-12
p test2
En fait, vous ne pouvez pas réorganiser les colonnes ayant .col-*-12
par Push
/pull
classes d'assistance. La somme des colonnes dépasse la valeur par défaut 12
colonnes qui est définie par @grid-columns
.
Vous pouvez soit modifier l'ordre des colonnes en HTML, puis utiliser les classes de classement sur des écrans plus grands comme suit:
<div class="row">
<div class="col-xs-12 col-sm-6 col-sm-Push-6">
<p>test2</p>
</div>
<div class="col-xs-12 col-sm-6 col-sm-pull-6">
<p>test1</p>
</div>
</div>
Ou utilisez cette approche fantaisiste pour inverser l'ordre des colonnes qui sont placées verticalement les unes sous les autres:
@media (max-width: 767px) {
.row.reorder-xs {
transform: rotate(180deg);
direction: rtl; /* Fix the horizontal alignment */
}
.row.reorder-xs > [class*="col-"] {
transform: rotate(-180deg);
direction: ltr; /* Fix the horizontal alignment */
}
}
Il convient de noter que les transformations CSS sont également prises en charge dans IE9 ; N'oubliez pas d'ajouter des préfixes de fournisseurs.
Dans Bootstrap 4 , vous pouvez changez l'ordre des colonnes pleine largeur (12 unités) à l'aide des classes de classement flexbox.
Mise à jour 2017 - Bootstrap 4 alpha 6
Dans 3.x, vous ne pouviez que pousser/tirer les colonnes à gauche ou à droite (horizontalement). Avec le nouveau flexbox ordering utils in 4.x, il est désormais possible de changer verticalement l'ordre des colonnes ). .
<div class="container">
<div class="row">
<div class="col-12">1</div>
<div class="col-sm-12 flex-first flex-sm-unordered">2 (first on xs)</div>
</div>
</div>
http://www.codeply.com/go/7RUJORgxBK
Mise à jour Bootstrap 4 Beta
L'alpha flex-
la commande classée est devenue order-
Des classes.
<div class="container">
<div class="row">
<div class="col-12 order-sm-1 order-2">1</div>
<div class="col-sm-12 order-1">2 (first on xs)</div>
</div>
</div>
Vous pouvez totalement le faire, voir Ordre des colonnes de la grille de Bootstrap
Mais bien sûr, votre exemple n'aura aucun effet puisque xs-12 est une colonne pleine largeur, donc cela ne s'appliquera qu'aux modèles où la somme des colonnes est 12 (ou si 16 ou autre si vous personnalisez votre Bootstrap grid). Voir l'exemple Bootstrap sur cette même page à des fins d'illustration:
<div class="row">
<div class="col-md-9 col-md-Push-3">.col-md-9 .col-md-Push-3</div>
<div class="col-md-3 col-md-pull-9">.col-md-3 .col-md-pull-9</div>
</div>
Dans le cas où quelqu'un viendrait ici avec un problème similaire comme moi, trouver uniquement Push/pull ne correspond pas à vos besoins, car soit col-xs-12 ne tirera pas/Push, soit utiliser plus de 2 colonnes rend plus difficile de comprendre le Push/tirer des valeurs ici est ma solution.
Ci-dessous est la solution de fantaisie par @hashemquolami
@media (max-width: 767px) {
.row.reorder-xs {
transform: rotate(180deg);
direction: rtl; /* Fix the horizontal alignment */
}
.row.reorder-xs > [class*="col-"] {
transform: rotate(-180deg);
direction: ltr; /* Fix the horizontal alignment */
}
}
Bien que cette approche fonctionne bien, j'ai une solution différente:
La grille bootstrap fonctionne en flottant les colonnes à gauche, cela peut facilement être modifié avec css. Regardez le balisage ci-dessous, comme bonus col-md-offset-1 inversé pour émuler 5 colonnes centrées.
[~ # ~] html [~ # ~]
<div class="container">
<div class="row reverseOrder">
<div class="col-md-2 col-md-offset-1">A</div>
<div class="col-md-2">B</div>
<div class="col-md-2">c</div>
<div class="col-md-2">d</div>
<div class="col-md-2 ">e</div>
</div>
</div>
[~ # ~] css [~ # ~]
@media screen and ( min-width: 992px) {
.reverseOrder [class^="col-"] {
float: right;
}
.reverseOrder .col-md-offset-1 {
margin-right: 8.333333333333332%;
margin-left: 0px;
}
}
Si vous devez réorganiser les cols pour un cas réactif comme
div.col-xs-12.col-sm-9 # this should be on the bottom for col-xs-12
p test1
div.col-xs-12.col-sm-3 # this should be on the top for col-xs-12
p test2
vous pouvez utiliser un .pull-right
classe et inverser l'ordre des colonnes.
div.col-xs-12.col-sm-3.pull-right
p test2
div.col-xs-12.col-sm-9
p test1
alors ils sont en ordre pour col-xs-12
et apparaissent correctement pour les autres points d'arrêt.
J'ai eu le même problème et l'ai résolu de cette façon:
HTML
<div class="col-md-10 col-sm-10 col-xs-12 more-than" style="display: none;">
<p>test</p>
</div>
<div class="col-md-2 col-sm-2 col-xs-12">
<p>test</p>
</div>
<div class="col-md-10 col-sm-10 col-xs-12 less-than">
<p>test</p>
</div>
CSS
@media (max-width: 767px){
.less-than {
display: none;
}
.more-than {
display: block !important;
}
}