Alterner les couleurs de ligne dans Bootstrap 3-Pas de Table

je cherche un moyen de faire alterner les couleurs de ligne dans une mise en page responsive dans Bootstrap 3. Je ne peux pas trouver comment le faire sans beaucoup de CSS complets et confus et j'espérais que quelqu'un avait une meilleure solution.

voici le principe simple: 12 divs qui s'affichent comme 4 rangées de 3 sur les grands écrans, 6 rangées de 2 sur les petits écrans, et 12 rangées de 1 sur mobile. Les lignes devront avoir des couleurs d'arrière-plan alternées quelle que soit la taille de l'écran.

Le HTML pour Bootstrap 3 est comme suit:

<div class="container">
    <div class="row">
        <div class="col-md-4 col-sm-6 col-xs-12">Emp-01</div>
        <div class="col-md-4 col-sm-6 col-xs-12">Emp-02</div>
        <div class="col-md-4 col-sm-6 col-xs-12">Emp-03</div>
        <div class="col-md-4 col-sm-6 col-xs-12">Emp-04</div>
        <div class="col-md-4 col-sm-6 col-xs-12">Emp-05</div>
        <div class="col-md-4 col-sm-6 col-xs-12">Emp-06</div>
        <div class="col-md-4 col-sm-6 col-xs-12">Emp-07</div>
        <div class="col-md-4 col-sm-6 col-xs-12">Emp-08</div>
        <div class="col-md-4 col-sm-6 col-xs-12">Emp-09</div>
        <div class="col-md-4 col-sm-6 col-xs-12">Emp-10</div>
        <div class="col-md-4 col-sm-6 col-xs-12">Emp-11</div>
        <div class="col-md-4 col-sm-6 col-xs-12">Emp-12</div>
    </div>
</div>

des idées/conseils/aide serait grandement appréciée.

32
demandé sur Trick Kramer 2014-08-04 18:33:30

5 réponses

puisque vous utilisez bootstrap et vous voulez alterner les couleurs de ligne pour chaque taille d'écran que vous avez besoin d'écrire des règles de style séparées pour toutes les tailles d'écran.

/* For small screen */
.row :nth-child(even){
  background-color: #dcdcdc;
}
.row :nth-child(odd){
  background-color: #aaaaaa;
}

/* For medium screen */    
@media (min-width: 768px) {
    .row :nth-child(4n), .row :nth-child(4n-1) {
        background: #dcdcdc;
    }
    .row :nth-child(4n-2), .row :nth-child(4n-3) {
        background: #aaaaaa;
    }
}

/* For large screen */
@media (min-width: 992px) {
    .row :nth-child(6n), .row :nth-child(6n-1), .row :nth-child(6n-2) {
        background: #dcdcdc;
    }
    .row :nth-child(6n-3), .row :nth-child(6n-4), .row :nth-child(6n-5) {
        background: #aaaaaa;
    }
}

travailler FIDDLE

J'ai également inclus le bootstrap CSS ici.

40
répondu Anisuzzaman Khan 2014-08-04 15:06:43

je trouve que si je spécifiez .row:nth-of-type(..), les autres éléments de ma rangée (pour d'autres formatage, etc.) ont aussi des couleurs alternées. Donc plutôt, je définirais dans mon css une toute nouvelle classe:

.row-striped:nth-of-type(odd){
  background-color: #efefef;
}

.row-striped:nth-of-type(even){
  background-color: #ffffff;
}

donc maintenant, les couleurs alternées de la rangée ne s'appliqueront qu'au conteneur de la rangée, quand je spécifie sa classe comme .row-striped, et non pas les éléments à l'intérieur de l' row.

<!-- this entire row container is #efefef -->
<div class="row row-striped">
    <div class="form-group">
        <div class="col-sm-8"><h5>Field Greens with strawberry vinegrette</h5></div>
        <div class="col-sm-4">
            <input type="number" type="number" step="1" min="0"></input><small>/salad</small>
        </div>
    </div>
</div>

<!-- this entire row container is #ffffff -->
<div class="row row-striped">
    <div class="form-group">
        <div class="col-sm-8"><h5>Greek Salad</h5></div>
        <div class="col-sm-4">
            <input type="number" type="number" step="1" min="0"></input><small>/salad</small>
        </div>
    </div>
</div>
24
répondu James Perih 2016-02-07 22:10:29

Vous pouvez utiliser ce code :

.row :nth-child(odd){
  background-color:red;
}
.row :nth-child(even){
  background-color:green;
}

Démo : http://codepen.io/mouhammed/pen/rblsC

11
répondu mouhammed 2014-08-04 14:40:11

il n'y a pas vraiment de façon de faire cela sans que la css soit un peu alambiquée, Mais voici la solution la plus propre que j'ai pu mettre en place (les points de rupture dans ce sont juste pour des fins d'exemple, les changer pour n'importe quels points de rupture que vous utilisez réellement.) La clé est :nth-of-type (ou :nth-child -- pourrait fonctionner dans ce cas.)

plus petit point de vue:

@media (max-width:$smallest-breakpoint) {

  .row div {
     background: #eee;
   }

  .row div:nth-of-type(2n) {
     background: #fff;
   }

}

Support de fenêtre:

@media (min-width:$smallest-breakpoint) and (max-width:$mid-breakpoint) {

  .row div {
    background: #eee;
  }

  .row div:nth-of-type(4n+1), .row div:nth-of-type(4n+2) {
    background: #fff;
  }

}

plus grand point de vue:

@media (min-width:$mid-breakpoint) and (max-width:9999px) {

  .row div {
    background: #eee;
  }

  .row div:nth-of-type(6n+4), 
  .row div:nth-of-type(6n+5), 
  .row div:nth-of-type(6n+6) {
      background: #fff;
  }
}

violon de travail ici

4
répondu jack 2014-08-04 15:13:49

Le fil est un peu vieux. Mais d'après le titre, j'ai pensé que c'était prometteur pour mes besoins. Malheureusement, ma structure ne se prêtait pas facilement à la solution du nième type. Voici une solution de Thymeleaf.

.back-red {
  background-color:red;
}
.back-green {
  background-color:green;
}


<div class="container">
    <div class="row" th:with="employees=${{'emp-01', 'emp-02', 'emp-03', 'emp-04', 'emp-05', 'emp-06', 'emp-07', 'emp-08', 'emp-09', 'emp-10', 'emp-11', 'emp-12'}}">
        <div class="col-md-4 col-sm-6 col-xs-12" th:each="i:${#numbers.sequence(0, #lists.size(employees))}" th:classappend'(${i} % 2) == 0?back-red:back-green"><span th:text="${emplyees[i]}"></span></div>
    </div>
</div>
0
répondu AixNPanes 2017-01-04 13:18:33