将预定义的颜色序列应用于元素的动态列表
Apply a predefined sequence of colors to a dynamic list of elements
- 想象一下一系列重复的元素。在下面的示例中
.Block
- 想象一个预先定义的颜色列表
red, blue, geen, orange, purple
问题
如何为每个.Block
分配一个独特的背景颜色,并注意以下事项:
- 容器中的块数量是动态的,因此可以包含任何数量
- 如果块的数量超过预定义颜色的数量,则应重复颜色序列
注意: 我试图在css中解决这个问题,但如果需要,将使用javascript和jquery
.Block{
display:block;
height:50px;
width:100%;
background:red;
}
<div class="Wrap">
<div class="Block">RED</div>
<div class="Block">BLUE</div>
<div class="Block">GREEN</div>
<div class="Block">ORANGE</div>
<div class="Block">PURPLE</div>
</div>
您可以在CSS3中使用第n个子选择器来完成此操作。第n个子选择器接受简单表达式,您可以使用这些表达式来定位序列中的某些元素。
.Block{
display:block;
height:50px;
width:100%;
background:red;
}
.Block:nth-child(5n + 1){
background-color: red;
}
.Block:nth-child(5n + 2){
background-color: blue;
}
.Block:nth-child(5n + 3){
background-color: green;
}
.Block:nth-child(5n + 4){
background-color: orange;
}
.Block:nth-child(5n + 5){
background-color: purple;
}
这是通过瞄准每二个元素,然后瞄准每三个元素等来实现的,这意味着无论你的容器中有多少"块",序列都会循环。
这里的工作演示:
.Block {
display: block;
height: 50px;
width: 100%;
}
.Block:nth-child(5n + 1) {
background-color: red;
}
.Block:nth-child(5n + 2) {
background-color: blue;
}
.Block:nth-child(5n + 3) {
background-color: green;
}
.Block:nth-child(5n + 4) {
background-color: orange;
}
.Block:nth-child(5n + 5) {
background-color: purple;
}
<div class="Wrap">
<div class="Block">RED</div>
<div class="Block">BLUE</div>
<div class="Block">GREEN</div>
<div class="Block">ORANGE</div>
<div class="Block">PURPLE</div>
<div class="Block">RED</div>
<div class="Block">BLUE</div>
<div class="Block">GREEN</div>
<div class="Block">ORANGE</div>
<div class="Block">PURPLE</div>
</div>
浏览器对此的支持是IE9+,但是如果您需要针对较旧的浏览器,则存在polyfill。这里有一些关于第n个孩子如何工作的更有用的信息:http://css-tricks.com/how-nth-child-works/
如果一次添加内容,您可以这样做(或者每次更改内容时都运行脚本):
function styleBlock() {
var colors = ["red","blue","yellow"],
counter = 0;
$(".Wrap .Block").each(function(){
$(this).css("background-color",colors[counter ]);
counter = counter % colors.length;
counter += 1;
});
}
$(".Wrap").append('<div class="Block">DYNAMICALLY ADDED</div>');
styleBlock();
我现在正在做一些研究,看看是否有可能只使用CSS。
此处的代码片段:
function styleBlock() {
var colors = ["red", "blue", "yellow"],
counter = 0;
$(".Wrap .Block").each(function() {
$(this).css("background-color", colors[counter]);
counter = counter % colors.length;
counter += 1;
});
}
$(".Wrap").append('<div class="Block">DYNAMICALLY ADDED</div>');
styleBlock();
.Block {
display: block;
height: 50px;
width: 100%;
background: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="Wrap">
<div class="Block">RED</div>
<div class="Block">BLUE</div>
<div class="Block">GREEN</div>
<div class="Block">ORANGE</div>
<div class="Block">PURPLE</div>
</div>
相关文章:
- 将列表元素动态添加到ul元素中
- 将输入 html 元素动态关联到颜色选取器
- 媒体元素 - 动态加载音频
- 根据其内部元素动态更改 CSS
- 编写脚本以向元素动态添加.current(类似活动类)的场景
- 使用knockoutjs虚拟元素动态创建html部分
- 将JS中的元素动态添加到XUL中
- 如何从jquery中获得元素动态附加的完整表
- 使用jquery向li元素动态添加类
- 点击事件不't在尝试将元素动态添加到<ul>标签
- 使用Knockout.js Issue将元素动态添加到嵌套列表中
- 如何从DOM元素动态禁用popover
- 将样式元素动态插入DOM的最后一种跨浏览器方式
- 无法将元素动态添加到数组中
- 指令如何等待元素'动态插值属性被处理?
- 设置活动元素和非活动元素(动态)
- 是否可以使用JS/PHP为网页中的元素动态分配ID
- 如何制造<光>元素动态调整以填充浏览器窗口的整个宽度
- 基于页面元素动态构建菜单结构
- 向现有元素动态添加删除绑定