使用flex包装在flex容器中的斑马线行:包装
zebra striping rows in a flex container with flex-wrap:wrap
假设我使用的是带有flex-direction:row
和flex-wrap:wrap
的flexbox容器。
根据浏览器窗口的大小,每行中可能有2、3、4个或更多项目。
我想在每隔一行的项目中放置一个灰色背景,模仿表格布局。有简单的方法吗?
小提琴示例:https://jsfiddle.net/mqf7nouc/1/
HTML:
<div class="container">
<div class="item">
item 1
</div>
<div class="item">
item 2
</div>
<div class="item">
item 3
</div>
<div class="item">
item 4
</div>
<div class="item">
item 5
</div>
<div class="item">
item 6
</div>
<div class="item">
item 7
</div>
</div>
CSS:
.container {
display:flex;
flex-direction:row;
flex-wrap:wrap;
}
.item {
height:50px;
width:100px;
text-align:center;
vertical-align:middle;
line-height:50px;
border:1px solid black;
margin:5px;
}
好吧,这实际上是一项相当困难的任务。我能想到的最好的方法是使用javascript,通过循环并比较项目的高度来找出包装发生的位置。目前,它是一个自执行函数,只会在窗口加载时运行。如果你想让它在加载后有人更改浏览器大小时做出响应,那么把它放在函数中,并在窗口调整时调用该函数
否则,一切都在这里。
(function() {
var x = 0;
var counter = 0;
var boxesPerRow = 0;
var elements = document.getElementsByClassName("item");
var totalBoxes = elements.length;
// Loop to find out how many boxes per row
for (var i = 0; i < totalBoxes-2; i++){
x = i+1;
var temp = elements[i].getBoundingClientRect();
if (x <= elements.length)
{
var next = elements[x].getBoundingClientRect();
// Compare height of current vs the next box
if (next.top > temp.top && counter ==0)
{
boxesPerRow = x;
counter = 1;
}
}
}
// var marker is where we are applying style
// var countUpTo is the last box in the row we are styling
const boxes = boxesPerRow;
var countUpTo = boxesPerRow;
var counter = 0;
// Loop through and apply color to boxes.
for(var marker = 0; marker < totalBoxes; marker++)
{
if(marker < countUpTo)
{
elements[marker].style.backgroundColor = "red";
}
else
{
counter++;
if(counter === 1)
{
countUpTo = boxes*(counter+2);
}
else{
countUpTo = countUpTo + (boxes*2);
}
marker = marker+boxes-1;
// Handles buttom row not being a full set of boxes.
if(marker> totalBoxes && !(marker > totalBoxes-(boxes*2)))
{
var leftOver = marker-totalBoxes;
for(var c = 1; c <= leftOver; c++)
{
elements[(totalBoxes-c)].style.backgroundColor = "red";
}
}
}
}
})();
相关文章:
- 如何将函数包装在函数中以避免代码重复
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- 在'物品包装'
- 如何在jQuery中包装两个元素的组
- 如何在包装功能中咕哝concat
- 用类javascript包装span标记中字符串中的字符索引
- 在jquery$({})中包装纯javascript对象
- 从工作日结束到下一个工作日开始的完整日历JS包装时间
- 如何制作href链接和<李>在一个包装中
- jquery在元素中查找文本节点,并使用标记进行连接和包装
- 如何使用图表包装函数有条件地格式化谷歌可视化表单元格
- Cordova包装应用程序内部链接加载在应用程序中,外部链接加载在浏览器中
- 如何在每个动态创建的ImageButton周围包装超链接?Visual Studio
- 使用Javascript设置库中图像包装器的宽度
- 使用服务工作者动态缓存HTTP URL的包装器
- 如何使图像适合TD,而不需要包装在不同的屏幕分辨率上
- 将setTimeout()包装器实现为Element.prototype中的方法
- 使用flex包装在flex容器中的斑马线行:包装
- CSS Flex-当重新调整包装器Flex项的大小时,更改其宽度尺寸