2012-06-06 6 views
57

¿Hay alguna manera de limitar el nth-of-type de css3 a una clase? Tengo un número dinámico de elementos section con diferentes clases que indican sus necesidades de diseño. Me gustaría obtener cada 3 .module, pero parece que nth-of-type busca el tipo de elemento de clases y luego calcula el tipo. En cambio, me gustaría limitarlo a solo .module s.css3 nth de tipo restringido a la clase

Gracias!

jsFiddle para demostrar: 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() 'es una pseudo-clase, no un pseudo-elemento. – BoltClock

Respuesta

55

Desafortunadamente, no hay manera (al menos ninguno que conozco) para seleccionar nth-of-type de una clase, ya que nth-of-class no existe. Es probable que deba agregar una nueva clase a cada tercer .module manualmente.

+2

No puede haber una manera de seleccionar ': nth-of-type()' de una clase, porque ': nth-of-type()' solo selecciona el enésimo hijo de su ** tipo **. También vea http://stackoverflow.com/questions/6447045/css3-selector-first-of-type-with-class-name – BoltClock

+3

El comportamiento de enésimo de tipo es tan inesperado. .thing: nth-of-type (1) es realmente div.thing: nth-of-type (1) así que si no incluyes el elemento en tus selectores es confuso. Si no crees que esto es inesperado, ¿por qué causa tanta confusión entre los desarrolladores? –

+6

@Dominic Watson: Creo que el problema aquí es que la mayoría de los autores no están familiarizados con el término "tipo de elemento", que es utilizado por Selectores en lugar del término específico de HTML/XML "nombre de etiqueta". Eso se aclaró un poco en el nivel 4 de Selectores, pero no por mucho. – BoltClock

28

Parece que lo que realmente quiere es la css4 :nth-match selector, pero en realidad no es compatible con la mayoría de navegadores, sin embargo, por lo que en la actualidad, la única manera de hacerlo es con javascript

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

http://jsfiddle.net/w3af16dj/

+2

¿Por qué pasa el 'elemento' como argumento a la función? No se usa – bg17aw

+4

porque creo que es una referencia útil para los lectores de SO, cuando escribí esta respuesta tuve que verificar la documentación para recordar qué argumento era lo primero. También asumo que algunas personas modificarán el código. –

+0

No tengo idea de quién rechazaría esto, proporciona una respuesta actual y una (futura) respuesta futura. Para ahorrarle el esfuerzo a cualquier persona si lo considera, 'Chromecast' todavía no es compatible con Chrome en 2017. No es necesario que revise los otros navegadores por mí. –

Cuestiones relacionadas