我正在为图片库制作一个简单的HTML。图库的每一行都可以有2,3或4个图像。 (在2图像行中,每个图像元素都命名为type-2
,同样位于type-3
和type-4
。)
现在我想选择每行的最后一个元素来设置自定义边距。我的HTML是这样的:
<div id="content">
<div class="type-2"></div>
<div class="type-2"></div> <!-- I want this, 2n+0 of type-2 -->
<div class="type-3"></div>
<div class="type-3"></div>
<div class="type-3"></div> <!-- this, 3n+0 of type-3 -->
<div class="type-4"></div>
<div class="type-4"></div>
<div class="type-4"></div>
<div class="type-4"></div> <!-- this, 4n+0 of type-4 -->
<div class="type-2"></div>
<div class="type-2"></div> <!-- this -->
<div class="type-3"></div>
<div class="type-3"></div>
<div class="type-3"></div> <!-- this -->
<div class="type-4"></div>
<div class="type-4"></div>
<div class="type-4"></div>
<div class="type-4"></div> <!-- this -->
</div>
我认为以下的CSS会起作用,但它没有:
.type-2:nth-of-type(2n+0) {margin-right:0;}
.type-3:nth-of-type(3n+0) {margin-right:0;}
.type-4:nth-of-type(4n+0) {margin-right:0;}
这个CSS选择的是:
<div id="content">
<div class="type-2"></div>
<div class="type-2"></div> <!-- selected by .type-2:nth-of-type(2n+0) -->
<div class="type-3"></div> <!-- selected by .type-3:nth-of-type(3n+0) -->
<div class="type-3"></div>
<div class="type-3"></div>
<div class="type-4"></div>
<div class="type-4"></div>
<div class="type-4"></div> <!-- selected by .type-4:nth-of-type(4n+0) -->
<div class="type-4"></div>
<div class="type-2"></div> <!-- selected by .type-2:nth-of-type(2n+0) -->
<div class="type-2"></div>
<div class="type-3"></div> <!-- selected by .type-3:nth-of-type(3n+0) -->
<div class="type-3"></div>
<div class="type-3"></div>
<div class="type-4"></div>
<div class="type-4"></div> <!-- selected by .type-4:nth-of-type(4n+0) -->
<div class="type-4"></div>
<div class="type-4"></div>
</div>
我可以编辑我的HTML来实现我想要的,但出于好奇,是否有某种CSS?
修改:此问题可能看起来像问题的重复,询问nth-child
和nth-of-type
是否可以应用于类 - 而不是元素。我已经知道答案是否定的。我真正要求的是一个纯粹的CSS解决方案/ hack,并且选择的答案就是这样。
答案 0 :(得分:14)
CSS Selectors Level 3无法做到这一点(至少没有CSS hacks,额外的标记或JavaScript)。
草稿CSS选择器等级4提出了:nth-match()
伪类,它可以做你想要的:
:nth-match(2n+0 of .type-2) {margin-right:0;}
:nth-match(3n+0 of .type-3) {margin-right:0;}
:nth-match(4n+0 of .type-4) {margin-right:0;}
我所知道的任何浏览器都没有实现这一点,但有一个bug filed可以在Chrome中实现它。
答案 1 :(得分:9)
只有CSS黑客,无需修改标记,您可以执行以下操作:
[class*=' type-'], [type^='type-']{ /* Set all the divs to float: left initially */
float: left;
content: url('http://static.adzerk.net/Advertisers/db5df4870e4e4b6cbf42727fd434701a.jpg');
height: 100px; width: 100px;
}
.type-2 + .type-2 + div{
clear: both; /* Clear float for a div which follows two div with class type-2 */
}
.type-3 + .type-3 + .type-3 + div {
clear: both; /* Clear float for a div which follows three div with class type-3 */
}
.type-4 + .type-4 + .type-4 + .type-4 + div {
clear: both; /* /* Clear float for a div which follows four div with class type-4 */
}
答案 2 :(得分:7)
nth-child
和nth-of-type
是伪类,只能应用于元素。
.layout:nth-of-type
是类的伪类,因此不起作用。
Jquery的EQ可能会提供解决方案
<强> http://api.jquery.com/eq/ 强>
答案 3 :(得分:3)
没有办法在纯粹的CSS中做你所要求的。
:nth-of-type
只能对元素选择器使用,如下所示:
div:nth-of-type(2n+0) { margin-right: 0; }
你可以尝试一些jQuery的运气:
var $this;
$('[class^="type-"]').each(function (){
$this = $(this);
if ( $this.attr('class') !== $this.next().attr('class') )
$this.addClass('last');
});
然后使用.type-2.last
访问“最后一行类型”。