javascript - 使用 CSS 或 JS 在溢出的 div 中标记最后一个可见的 child

标签 javascript jquery css jquery-selectors

我有一个带有 inline-block div 的栏。其中一些不在视口(viewport)内,因为我设置了:white-space:nowrap; overflow: hidden; 对于容器。我正在寻找选择最后一个可见 child 的方法。我所说的可见是指 div 放置(最好是完全放置)在它的容器区域。

据我所知,在 CSS 和 jQuery 中都没有这样的选择器。最接近的是 jQuery 的 :visible 但它说所有的 div 都是可见的,因为它们占用页面布局中的空间。

我看到的唯一出路是在加载和每次调整大小时枚举 div,以便通过对它的宽度、填充和边距求和来计算 div 是否仍在容器中。

你有更好的想法吗?

#container {
  white-space:nowrap;
  overflow: hidden;
}

.element {
  display: inline-block;
  vertical-align:top;
}
<div id="container">
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
</div>

在代码段上堆栈溢出的当前非响应版本中,我们可以看到 4 个完整的 div 和第 5 个的一小部分。我想选择第 5 个(或者最好选择第 4 个 div,因为下一个不完全可见)。

最佳答案

您可以使用媒体查询。当然,这可能会变得非常麻烦,具体取决于您拥有的子元素的数量,但它确实节省了使用 onresize 事件监听器的开销。

对于下面的代码片段,我假设父元素占满了屏幕的整个宽度。

*{box-sizing:border-box;margin:0;padding:0;}
#container{
  font-size:0;
  overflow:hidden;
  white-space:nowrap;
}
.element{
  display:inline-block;
  opacity:.5;
  padding:5px;
  vertical-align:top;
  width:150px;
}
img{
  width:100%;
}
@media (max-width:299px){
  .element:first-child{opacity:1;}
}
@media (min-width:300px) and (max-width:449px){
  .element:nth-child(2){opacity:1;}
}
@media (min-width:450px) and (max-width:599px){
  .element:nth-child(3){opacity:1;}
}
@media (min-width:600px) and (max-width:749px){
  .element:nth-child(4){opacity:1;}
}
@media (min-width:750px) and (max-width:899px){
  .element:nth-child(5){opacity:1;}
}
@media (min-width:900px) and (max-width:1049px){
  .element:nth-child(6){opacity:1;}
}
@media (min-width:1050px) and (max-width:1199px){
  .element:nth-child(7){opacity:1;}
}
@media (min-width:1200px){
  .element:nth-child(8){opacity:1;}
}
<div id="container">
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
  <div class="element">
    <img src="http://placehold.it/150x150" alt=""/>
  </div>
</div>

关于javascript - 使用 CSS 或 JS 在溢出的 div 中标记最后一个可见的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39268021/

相关文章:

javascript - 在添加选项时保持选择框大小固定

javascript - 具有备用 DOM 后端的 Knockout JS

推送后的Javascript 2d数组长度

javascript - 静态选择菜单中选择的 Angular 2 形状集

jquery - 宽度为 1024px 的屏幕和宽度为 1024px 的平板电脑存在冲突

html - 将登录页面创建为弹出窗口,使页面变得模糊

javascript - Unicode 中数字 93 有何含义?

javascript - 如何调用父级并在 JQuery 中分配一些 css?

jquery - 如何根据隐藏列 ID 更改 Kendo UI Grid 中的行颜色?

jquery - 使用元素中子元素的文本内容标识元素