2012-06-06 10 views
57

Czy istnieje jakiś sposób ograniczenia klasy css3 do nth-of-type? Mam dynamiczną liczbę elementów section z różnymi klasami określającymi ich potrzeby w zakresie układu. Chciałbym pobrać co trzeci numer .module, ale wygląda na to, że nth-of-type wyszukuje typ elementu klasy, a następnie oblicza typ. Zamiast tego chciałbym ograniczyć go do tylko .module s.css3 nth typu zastrzeżonego do klasy

Dzięki!

JSFiddle wykazać: 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

': nth -of-type() 'to pseudo-klasa, a nie pseudoelement. – BoltClock

Odpowiedz

55

Niestety, nie ma sposobu (przynajmniej nikt nie znam), aby wybrać z nth-of-type klasa, ponieważ nth-of-class nie istnieje. Prawdopodobnie będziesz musiał ręcznie dodać nową klasę do co trzeciej .module.

+2

Nie może być sposobu, aby wybrać ': nth-of-type()' klasy, ponieważ ': nth-of-type()' wybiera tylko nth dziecko jego ** typu **. Zobacz także http://stackoverflow.com/questions/6447045/css3-selector-first-of-type-with-class-name – BoltClock

+3

Zachowanie n-tego typu jest tak nieoczekiwane. .thing: nth-of-type (1) to tak naprawdę div.thing: nth-of-type (1), więc jeśli nie dodasz elementu do selektorów, jest to mylące. Jeśli uważasz, że nie jest to nieoczekiwane, dlaczego powoduje to zamieszanie wśród programistów? –

+6

@ Dominic Watson: Myślę, że problem polega na tym, że większość autorów nie zna terminu "typ elementu", który jest używany przez selektorów zamiast specyficznego dla HTML/XML terminu "nazwa tagu". Zostało to nieco wyjaśnione na poziomie Selectors 4, ale nie za bardzo. – BoltClock

28

Wydaje się, czego naprawdę chcą to css4 :nth-match selector, ale to naprawdę nie jest obsługiwane w większości przeglądarek jeszcze, więc obecnie jedynym sposobem na to jest z javascript

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

http://jsfiddle.net/w3af16dj/

+2

Dlaczego przekazujesz "element" jako argument do funkcji? Nie jest używany – bg17aw

+4

, ponieważ uważam, że jest to użyteczne odniesienie dla czytelników SO, kiedy napisałem tę odpowiedź, musiałem sprawdzić dokumentację, aby zapamiętać, który argument był pierwszy. Zakładam też, że niektórzy ludzie będą modyfikować kod. –

+0

Nie mam pojęcia, kto to zignoruje, zapewnia bieżącą odpowiedź i (wciąż) przyszłą odpowiedź. Aby zaoszczędzić komuś wysiłku, jeśli go rozważysz, "n-te dopasowanie" nadal nie jest obsługiwane w Chrome w 2017 roku. Nie musisz sprawdzać dla mnie innych przeglądarek. –

Powiązane problemy