我有几个随机块。每当一个块落在新行中时,我都会使它看起来不同。当用户单击按钮时,我隐藏了的几个块display:none
,并且出现了问题。该nth-child
选择也算隐藏要素。
有没有办法忽略这些特定的块,以便每一行都具有不同的样式?这是类似情况的示例。
$('.hide-others').click(function () {
$('.css--all-photo').toggleClass('hidden');
})
.board-item--inner {
height:200px;
background:tomato;
text-align:center;
color:#fff;
font-size:33px;
margin-bottom:15px;
border:2px solid tomato;
}
@media (min-width:768px) and (max-width:991px) {
.board-item:nth-child(2n+1) .board-item--inner {
border:2px solid #000;
background:yellow;
color:#000;
}
}
@media (min-width:992px) and (max-width:1199px) {
.board-item:nth-child(3n+1) .board-item--inner {
border:2px solid #000;
background:yellow;
color:#000;
}
}
@media (min-width:1200px) {
.board-item:nth-child(4n+1) .board-item--inner {
border:2px solid #000;
background:yellow;
color:#000;
}
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="container">
<div class="form-group">
<button class="btn btn-info hide-others" type="button">Hide others</button>
</div>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 board-item photos-board-item">
<div class="board-item--inner">1</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 board-item photos-board-item">
<div class="board-item--inner">2</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 board-item photos-board-item css--all-photo">
<div class="board-item--inner">3</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 board-item photos-board-item">
<div class="board-item--inner">4</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 board-item photos-board-item">
<div class="board-item--inner">5</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 board-item photos-board-item css--all-photo">
<div class="board-item--inner">6</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 board-item photos-board-item">
<div class="board-item--inner">7</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 board-item photos-board-item css--all-photo">
<div class="board-item--inner">8</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 board-item photos-board-item">
<div class="board-item--inner">9</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 board-item photos-board-item">
<div class="board-item--inner">0</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 board-item photos-board-item">
<div class="board-item--inner">10</div>
</div>
</div>
<div>
我专门在寻找纯CSS解决方案。 请为您的答案提供小提琴! 而且我无法永久删除这些块,我的用户可以选择单击按钮时过滤文件,这就是隐藏和显示方案的原因。
当用户单击按钮时,我隐藏了的几个块display:none
,并且出现了问题。该nth-child
选择也算隐藏要素。
有没有办法忽略这些特定的块,以便每一行都具有不同的样式?
问题在于nth-child()
选择器将查看同一个父对象下的所有同级对象,而不管样式如何。display: none
因为CSS不会从DOM中删除元素,所以您应用了它并不重要,因此它仍然是同级的。
从规格:
6.6.5.2。:nth-child()
伪类
:nth-child(an+b)
伪级符号表示元素,其具有+B-1的兄弟姐妹之前它在文档树中,对于任意的正整数或正的零值,并具有父元素。为了使nth-child
您声明的规则在用户单击以隐藏div后起作用,您需要 从DOM中删除隐藏的div ,因此它们不再作为同级对象存在。
在您的问题中,您需要仅CSS的解决方案。但是在您的评论中,您说HTML可以进行更改。您还使用了一些jQuery来隐藏元素。
通过将一小段代码添加到jQuery,可以解决此问题:
$('.hidden').remove();
该.remove()
方法将元素(及其后代)带出DOM。在这种情况下,它将删除带有class的所有元素hidden
。
更正
问题remove()
在于无法恢复使用此方法从DOM中获取的元素,这会破坏切换功能。
幸运的是,jQuery提供了一种替代方法:detach()
。
该.detach()
方法与相同.remove()
,除了.detach()
保留所有与删除的元素关联的jQuery数据。当稍后将删除的元素重新插入DOM时,此方法很有用。
因此,如果我们替换原始代码…
$('.hide-others').click(function () {
$('.css--all-photo').toggleClass('hidden');
})
…使用此代码…
var divs;
$('.photos-board-item').each(function(i){
$(this).data('initial-index', i);
});
$('.hide-others').on('click', function () {
if(divs) {
$(divs).appendTo('.row').each(function(){
var oldIndex = $(this).data('initial-index');
$('.photos-board-item').eq(oldIndex).before(this);
});
divs = null;
} else {
divs = $('.css--all-photo').detach();
}
});
现在,无论隐藏了哪个div或隐藏了几个div,都可以在不中断视觉设计的情况下打开和关闭它们,因为nth- child
选择器仅计算“可见”的同级对象。无需更改CSS。HTML不变。
问题内容: 是否有可能在CSS2中获得有序列表的第n个元素? (类似于CSS3) 仅供参考:我正在尝试将德语版本的Parcheesi编程为XHTML 1.1和CSS2兼容,并尝试通过使用有序列表来生成运动场,因此移动选项由数据结构预先确定。为了围绕中心定位,我想通过数字选择列表元素。 问题答案: 您可以将相邻的同级组合器与伪类一起使用,重复组合器的次数可以达到第n个孩子。 对于任何元素,均以开头,
问题内容: 这应该工作: 它可以在Firefox中运行,但不能在Chrome中运行(可能未在IE中运行,未经测试)。 一个更有趣的示例: 是将选项元素与DOM分离的唯一选择吗?我需要稍后再显示给他们,所以这不会很有效。 问题答案: 不幸的是,您不能在所有浏览器中隐藏元素。 在过去,当我需要这样做时,我就设置了它们的属性,就像这样… 然后,我使用了这段CSS,在浏览器中支持隐藏的位置…
问题内容: 以下是我的HTML页面的摘要: 在这里我想选择id =’platinum’的第三个td元素 我试过的是。 和 两者对于如何选择第三个td都不起作用 问题答案: 有一个没有ID 的空值,这会干扰计数。选择器的意思是“第n个元素”,而不是“第n个元素”。因此,具有该ID 的第三个实际上是整个行中的第四个。 使用CSS选择器无法选择具有特定ID 的第三个元素。您应该改用XPath:
问题内容: 如何调整以下CSS选择器: 所以它适用于TD列2-4? 问题答案: 您将无法一次完成此操作-您将需要链接至少一个其他此类伪类。例如,的组合和(该位装置开始从第二子分别计数向前和向后): 或者,不使用公式,只需排除和:
我正在用Selenium解析一个网站。 我需要在隐藏类中选择一个选项。该部分的Html代码: 我尝试像往常一样通过选择功能选择一个选项: 我得到了这个错误消息:ElementNotInteractiableException:message:element notinteractiable:element当前不可见,可能无法操作。 完整的错误消息: 我想,我应该先在选项下运行一个脚本,但我不知道该
问题内容: 我正在使用选择器为不同的社交图标添加背景图像。但是,所有图标都显示相同。我究竟做错了什么? 问题答案: 所述选择器计数的兄弟姐妹(即,元件具有相同父节点)。 在您的HTML结构中,始终是的第一个,最后一个也是唯一的孩子。因此只有一个要计数的元素。 但是,存在多个锚元素,所有锚元素都是同级(的子级),因此可以针对每个锚元素。