Heim  >  Artikel  >  Web-Frontend  >  Wie kann ich Elementfarben mit :nth-child abwechseln, wenn nicht übereinstimmende Elemente übersprungen werden?

Wie kann ich Elementfarben mit :nth-child abwechseln, wenn nicht übereinstimmende Elemente übersprungen werden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-07 03:48:03807Durchsuche

How to Alternate Element Colors with :nth-child When Skipping Non-Matching Elements?

:nth-child(even/odd) Selector with Class

In CSS wählt der :nth-child(n) Selector Elemente aus das ist das n-te Kind ihrer Eltern. Wenn n ungerade ist, wählt der Selektor für das n-te Kind (ungerade) ungerade Elemente aus, und wenn n gerade ist, wählt der Selektor für das n-te Kind (gerade) gerade Elemente aus.

Bedenken Sie das folgende HTML-Markup , wo wir :nth-child-Selektoren anwenden wollen, um Elemente mit der Klasse „parent“ aufzulisten:

<ul>
    <li class="parent">green</li>
    <li class="parent">red</li>
    <li>ho ho ho</li>
    <li class="parent">green</li>
    <li class="parent">red</li>
</ul>

Anwenden des folgenden CSS auf den HTML-Code oben:

.parent:nth-child(odd) {
    background-color: green;
}

.parent:nth-child(even) {
    background-color: red;
}

Unerwartet, Die Farbe der Elemente wird nach dem ersten Nicht-Parent-Element zurückgesetzt. Dies liegt daran, dass der :nth-child-Selektor für alle Elemente in der Liste gilt, nicht nur für diejenigen mit der Klasse „parent“.

Um das gewünschte Verhalten zu erreichen, müssen wir den allgemeinen Geschwisterkombinator (~) verwenden. , wodurch ein Element ausgewählt wird, das einem anderen Element im DOM-Baum vorausgeht. Durch die Kombination mit dem :nth-child-Selektor können wir die Farben von „.parent“-Elementen jedes Mal ändern, wenn ein Nicht-.parent-Element angetroffen wird:

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

/* after the first non-.parent, toggle colors */
li:not(.parent) ~ .parent:nth-child(odd) {
    background-color: red;
}
li:not(.parent) ~ .parent:nth-child(even) {
    background-color: green;
}

/* after the second non-.parent, toggle again */
li:not(.parent) ~ li:not(.parent) ~ .parent:nth-child(odd) {
    background-color: green;
}
li:not(.parent) ~ li:not(.parent) ~ .parent:nth-child(even) {
    background-color: red;
}

Dieser Ansatz ermöglicht es uns, die Farben zu ändern von „.parent“-Elementen, während Nicht-.parent-Elemente übersprungen werden. Allerdings ist die Anzahl der Nicht-.parent-Elemente, die der :nth-child-Selektor vorausschauen kann, begrenzt, sodass diese Technik für sehr lange Listen mit vielen alternierenden Klassen möglicherweise nicht praktikabel ist.

Das obige ist der detaillierte Inhalt vonWie kann ich Elementfarben mit :nth-child abwechseln, wenn nicht übereinstimmende Elemente übersprungen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn