2012-06-06 14 views
57

Gibt es eine Möglichkeit, css3 nth-of-type auf eine Klasse zu begrenzen? Ich habe eine dynamische Anzahl von section Elementen mit verschiedenen Klassen, die ihre Layout-Bedürfnisse angeben. Ich würde gerne jeden 3. .module greifen, aber es scheint, dass nth-of-type Klassen Elementtyp sucht und dann den Typ berechnet. Stattdessen möchte ich es nur auf .module s beschränken.css3 nth des Typs beschränkt auf Klasse

Danke!

JSFiddle zu demonstrieren: http://jsfiddle.net/danielredwood/e2BAq/1/

HTML:

<section class="featured video"> 
    <h1>VIDEO</h1> 
</section> 
<section class="featured module"> 
    <h1>NOT A VIDEO</h1> 
</section> 
<section class="featured module"> 
    <h1>NOT A VIDEO</h1> 
</section> 
<section class="featured module"> 
    <h1>NOT A VIDEO (3)</h1> 
</section> 
<section class="featured module"> 
    <h1>NOT A VIDEO</h1> 
</section> 
<section class="featured module"> 
    <h1>NOT A VIDEO</h1> 
</section> 
<section class="featured module"> 
    <h1>NOT A VIDEO (6)</h1> 
</section> 

CSS:

.featured { 
    width:31%; 
    margin:0 0 20px 0; 
    padding:0 3.5% 2em 0; 
    float:left; 
    background:#ccc; 
} 
    .featured.module:nth-of-type(3n+3) { 
    padding-right:0; 
    background:red; 
    } 
    .featured.video { 
    width:auto; 
    padding:0 0 2em 0; 
    float:none; 
    }​ 
+2

'zu tun ist: n-te -of-type() 'ist eine Pseudo-Klasse, kein Pseudo-Element. – BoltClock

Antwort

55

Leider gibt es keine Möglichkeit (zumindest keine, die ich kenne) wählen nth-of-type von eine Klasse, da nth-of-class nicht existiert. Wahrscheinlich müssen Sie jeder dritten .module manuell eine neue Klasse hinzufügen.

+2

Es kann keine Möglichkeit geben, ': nth-of-type()' einer Klasse auszuwählen, da ': nth-of-type()' nur das n-te Kind seines ** Typs ** auswählt. Siehe auch http://stackoverflow.com/questions/6447045/css3-selector-first-of-type-with-class-name – BoltClock

+3

Das Verhalten von nth-of-type ist so unerwartet. .thing: nth-of-type (1) ist eigentlich div.thing: nth-of-type (1) Wenn Sie also das Element nicht in Ihre Selektoren einschließen, ist es verwirrend. Wenn Sie das nicht für unerwartet halten, warum verursacht es so viel Verwirrung bei den Entwicklern? –

+6

@Dominic Watson: Ich denke, das Problem hier ist, dass die meisten Autoren nicht mit dem Begriff "Elementtyp" vertraut sind, der von Selektoren anstelle des HTML/XML-spezifischen Begriffs "Tag-Name" verwendet wird. Das ist ein wenig in Selectors Level 4 geklärt, aber nicht sehr viel. – BoltClock

28

Es scheint Sie wirklich, was will, ist die css4 :nth-match selector, aber es noch in den meisten Browsern nicht wirklich unterstützt wird, so zur Zeit der einzige Weg, um es mit Javascript

$(".featured.module").filter(function(index, element){ 
    return index % 3 == 2; 
}).addClass("third"); 

http://jsfiddle.net/w3af16dj/

+2

Warum übergeben Sie das 'Element' als Argument für die Funktion? Es wird nicht verwendet – bg17aw

+4

, weil ich denke, es ist eine nützliche Referenz für SO-Leser, als ich diese Antwort schrieb, musste ich die Dokumentation überprüfen, um zu erinnern, welches Argument zuerst kam. Ich nehme auch an, dass einige Leute den Code ändern werden. –

+0

Keine Ahnung, wer das abwerten würde, liefert eine aktuelle Antwort und eine (noch) zukünftige Antwort. Um jeden zu retten, wenn Sie es in Betracht ziehen, wird "nth-match" in Chrome im Jahr 2017 immer noch nicht unterstützt. Sie müssen die anderen Browser nicht für mich überprüfen. –

Verwandte Themen