web-dev-qa-db-fra.com

CSS div couleur alternée

J'essaie de zébrer mes divs dans mon site Web, cela semble assez simple, cependant, j'ai constaté que lorsque j'ajoutais une en-tête entre les rangées de mes divs, elle semblait compter l'en-tête dans le style pair/impair

HTML

<div class="container">
    <h3>Title</h3>
    <div class="row">Content</div>
    <div class="row">Content</div>
    <h3>Title</h3>
    <div class="row">Content</div>
    <div class="row">Content</div>
    <div class="row">Content</div>
    <h3>Title</h3>
    <div class="row">Content</div>
    <div class="row">Content</div>
    <div class="row">Content</div>
    <div class="row">Content</div>
</div>

CSS

.container {
    width:600px;
    margin:0 auto;
}

.row {
    line-height:24pt;
    border: solid 1px black;
}

.row:nth-child(odd) {
    background: #e0e0e0;
}

h3 {
    line-height:36pt;
    font-weight:bold;
    color:blue;
}

violon

J'aurais pensé que le code déjà présent dans le violon ignorerait fondamentalement l'en-tête et continuerait la segmentation, mais il semble qu'il considère l'en-tête comme un enfant.

58
Andrew Morris

N'utilisez pas nth-child , utilisez nth-of-type

div.container > div:nth-of-type(odd) {
    background: #e0e0e0;
}
.container {
  width: 600px;
  margin: 0 auto;
}

.row {
  line-height: 24pt;
  border: solid 1px black;
}

div.container>div:nth-of-type(odd) {
  background: #e0e0e0;
}

h3 {
  line-height: 36pt;
  font-weight: bold;
  color: blue;
}
<div class="container">
  <h3>Title</h3>
  <div class="row">Content</div>
  <div class="row">Content</div>
  <div class="row">Content</div>
  <div class="row">Content</div>
  <h3>Title</h3>
  <div class="row">Content</div>
  <div class="row">Content</div>
  <h3>Title</h3>
  <div class="row">Content</div>
  <div class="row">Content</div>
  <div class="row">Content</div>
  <div class="row">Content</div>
  <div class="row">Content</div>
  <h3>Title</h3>
  <div class="row">Content</div>
  <div class="row">Content</div>
  <div class="row">Content</div>
  <div class="row">Content</div>
</div>
101
j08691

Vous voulez probablement faire correspondre le type, pas l'enfant.

Utilisez : nth-of-type tel que

.row:nth-of-type(odd) {
    background: #e0e0e0;
}
7
Roger Lindsjö

La solution la plus simple est bien sûr d’envelopper les éléments que vous voulez rayés.

Votre jsFiddle mis à jour .

[~ # ~] html [~ # ~]

<div class="container">
    <h3>Title</h3>
    <div class="zebra">
        <div class="row">Content</div>
        <div class="row">Content</div>
    </div>
    <h3>Title</h3>
    <div class="zebra">
        <div class="row">Content</div>
        <div class="row">Content</div>
        <div class="row">Content</div>
    </div>
    <h3>Title</h3>
    <div class="zebra">
        <div class="row">Content</div>
        <div class="row">Content</div>
        <div class="row">Content</div>
        <div class="row">Content</div>
    </div>
</div>

[~ # ~] css [~ # ~]

.row:nth-child(odd) {background: #e0e0e0;}

Pensez également que si prise en charge du navigateur est important pour vous, vous souhaiterez peut-être générer des classes supplémentaires pour le côté serveur avec zébrures.

5
Jezen Thomas