javascript - 给出 a 中的每个第二个元素
问题描述
我尝试为表单做一个步进进度条,但我希望每隔一个“文本字段”在进度条的点上方,这样元素的文本不会在浏览器窗口变小。
有没有一种简单的方法可以做到这一点?
截图显示了正在运行的进度条。
var progressBar = {
Bar : $('#progress-bar'),
Reset : function(){
if (this.Bar){
// this.Bar.find('li').addClass('active');
}
},
Next: function(){
$('#progress-bar li:not(.active):first').addClass('active');
},
Back: function(){
$('#progress-bar li.active:last').removeClass('active');
}
}
progressBar.Reset();
////
$("#Next").on('click', function(){
progressBar.Next();
})
$("#Back").on('click', function(){
progressBar.Back();
})
$("#Reset").on('click', function(){
progressBar.Reset();
})
.progressbar {
margin: 50px 0 50px 0;
counter-reset: step;
}
.progressbar li {
width: 12.5%;
list-style-type: none;
float: left;
font-size: 12px;
position: relative;
text-align: center;
text-transform: uppercase;
color: #555555;
}
.progressbar li:before {
width: 15px;
height: 15px;
content: '';
line-height: 30px;
border: 2px solid #555555;
background-color: #555555;
display: block;
text-align: center;
margin: 0 auto 10px auto;
border-radius: 50%;
transition: all .8s;
}
.progressbar li:after {
width: 100%;
height: 2px;
content: '';
position: absolute;
background-color: #555555;
top: 7px;
left: -50%;
z-index: -1;
transition: all .8s;
}
.progressbar li:first-child:after {
content: none;
}
.progressbar li.active:before {
border-color: #55b776;
background-color: #55b776;
transition: all .8s;
}
.progressbar li.active:after {
background-color: #55b776;
transition: all .8s;
}
.btn {
background-color: #55b776;
margin: 5px;
width: 75px;
color: white;
}
.btn:hover {
color: white;
}
.btn:focus {
color: white;
}
.btn-container {
display: flex;
justify-content: center;
width: 100%;
position: absolute;
bottom: 0;
}
body {
background-color: #f7f7f7;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>Simple Step Progress Bar</title>
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css'>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<ul id="progress-bar" class="progressbar">
<li>Art</li>
<li>daten</li>
<li>zeit</li>
<li>ort</li>
<li>Pdf</li>
<li>Bilder</li>
<li>INFO</li>
<li>Bezahlen</li>
</ul>
<div class="btn-container">
<button class="btn" id="Next">Next</button>
<button class="btn" id="Back">Back</button>
<button class="btn" id="Reset">Reset</button>
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/js/bootstrap.min.js'></script>
<script src="js/index.js"></script>
</body>
</html>
解决方案
您需要使用.progressbar li:nth-child(2n)
来定位其他所有li
元素,然后您需要将整个伪元素向上移动,然后将线和圆(:before
和:after
)向下移动。如果您没有将文本、线条和圆圈全部附加到同一个元素/伪元素,这会容易得多。
查看代码片段:
var progressBar = {
Bar: $('#progress-bar'),
Reset: function() {
if (this.Bar) {
// this.Bar.find('li').addClass('active');
}
},
Next: function() {
$('#progress-bar li:not(.active):first').addClass('active');
},
Back: function() {
$('#progress-bar li.active:last').removeClass('active');
}
}
progressBar.Reset();
////
$("#Next").on('click', function() {
progressBar.Next();
})
$("#Back").on('click', function() {
progressBar.Back();
})
$("#Reset").on('click', function() {
progressBar.Reset();
})
.progressbar {
margin: 50px 0 50px 0;
counter-reset: step;
}
.progressbar li {
width: 12.5%;
list-style-type: none;
float: left;
font-size: 12px;
position: relative;
text-align: center;
text-transform: uppercase;
color: #555555;
}
.progressbar li:before {
position: relative;
width: 15px;
height: 15px;
content: '';
line-height: 30px;
border: 2px solid #555555;
background-color: #555555;
display: block;
text-align: center;
margin: 0 auto 10px auto;
border-radius: 50%;
transition: all .8s;
}
.progressbar li:after {
width: 100%;
height: 2px;
content: '';
position: absolute;
background-color: #555555;
top: 7px;
left: -50%;
z-index: -1;
transition: all .8s;
}
.progressbar li:first-child:after {
content: none;
}
.progressbar li.active:before {
border-color: #55b776;
background-color: #55b776;
transition: all .8s;
}
.progressbar li.active:after {
background-color: #55b776;
transition: all .8s;
}
.btn {
background-color: #55b776;
margin: 5px;
width: 75px;
color: white;
}
.btn:hover {
color: white;
}
.btn:focus {
color: white;
}
.btn-container {
display: flex;
justify-content: center;
width: 100%;
position: absolute;
bottom: 0;
}
body {
background-color: #f7f7f7;
}
.progressbar li:nth-child(2n) {
top: -50px;
}
.progressbar li:nth-child(2n):before {
top: 50px;
}
.progressbar li:nth-child(2n):after {
top: 57px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple Step Progress Bar</title>
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css'>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<ul id="progress-bar" class="progressbar">
<li>Art</li>
<li>daten</li>
<li>zeit</li>
<li>ort</li>
<li>Pdf</li>
<li>Bilder</li>
<li>INFO</li>
<li>Bezahlen</li>
</ul>
<div class="btn-container">
<button class="btn" id="Next">Next</button>
<button class="btn" id="Back">Back</button>
<button class="btn" id="Reset">Reset</button>
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/js/bootstrap.min.js'></script>
<script src="js/index.js"></script>
</body>
</html>
以下 CSS 规则可以解决问题:
.progressbar li:nth-child(2n) {
top: -50px;
}
.progressbar li:nth-child(2n):after {
top: 57px;
}
.progressbar li:nth-child(2n):before {
top: 50px;
}
推荐阅读
- java - OpenCV(java)魔方识别颜色校正
- javascript - 如何使用 switch 和 if else 以及 HTML 表单选择标记在输入框中获取所需的值
- java - 缺少 Eclipse 单元测试窗口
- node.js - 如何使用 expressjs 为 cgpa 添加验证
- python - Python列表向量矩阵小数0s 1s
- c - 无法通过分配给指针来访问二维数组
- ruby - 使用 to_s(2) 在 ruby 中将变量转换为二进制时收到错误
- wordpress - 将 Square POS 销售与 Woocommerce 同步
- javascript - 解释位移分配
- django - 在 django 中更新 .po 文件而不会丢失当前翻译