css - 使第n个孩子成为CSS中的随机变量
问题描述
我想为 css 中的 n 分配一个随机值。理想情况下没有javascript(并且有关于如何在各种帖子中执行此操作的建议,但我不知道如何将javascript插入css,因为第n个子元素似乎只接受'odd','even''n'或数值。
代码原样:
.gallery > .gallery__list > li:nth-child(4n) {
grid-column: span 3; /* Spans two columns */
grid-row: span 3; /* Spans two rows */
}
我只是想要 '4' 到 1 到 5 之间的随机值,所以它有时可能是 2n,其他可能是 3n。
解决方案
这对于 CSS 是不可能的——它是一种样式语言,而不是一种编程语言,并且没有能力“运行”任何代码。但是,对于JS ,它相对简单。我最初将选择器误读为 just 4
, not 4n
,这使事情变得更加复杂:
const listItems = document.querySelectorAll('.gallery > .gallery_list > li');
const separator = Math.ceil(Math.random() * 4);
listItems.forEach((item, i) => {
if ((i + 1) % separator === 0) {
item.classList.add('span-3');
}
});
.span-3 {
grid-column: span 3;
grid-row: span 3;
color: red;
}
<div class="gallery">
<ul class="gallery_list">
<li>Item One</li>
<li>Item Two</li>
<li>Item Three</li>
<li>Item Four</li>
<li>Item Five</li>
<li>Item Six</li>
<li>Item Seven</li>
<li>Item Eight</li>
<li>Item Nine</li>
<li>Item Ten</li>
</ul>
</div>
此代码将:
li
以与 CSS 相同的方式从直接路径中选择所有。- 生成一个 1-5 之间的随机数。
Math.random
返回一个介于 0 和小于 1 之间的随机浮点数,因此必须进行调整。 - 循环遍历
li
元素列表。 - 如果索引
i
(从 0 开始)加 1 除以随机数,没有余数(我们使用模运算符得到%
),那么它应该被设置样式。 - 添加一个包含相关样式的类。我将其从使用 etc 直接修改内联样式进行了更改,
style.gridColumn
因为这使其可重用且更易于切换。
将 JS 包含在 HTML 内的标记中,或者理想情况下包含在脚本标记属性script
引用的单独文件中。src
推荐阅读
- java - JPA Spring 存储库 findAll() 返回一个空列表
- python - 为什么我无法在请求中获取成功但在浏览器中成功打开
- java - MYSQL SELECT from Two Tables,收入减去费用=总收入
- javascript - JavaScript Canvas 问题理解对象移动
- reactjs - Node 尝试编译 SVG 文件
- reactjs - 在 react.js 中将数据动态绑定到 InnerHTML
- javascript - Jquery window.resize(event) => {} 适用于检查元素,但不适用于调整 chrome(或边缘)窗口的大小
- python - 运行 python 可执行文件时没有名为“请求”的模块,即使它已安装
- python - 如何在 min 函数中使用条件语句
- python - 如何在 matplotlib 中旋转条形图?