我尝试为表单创建一个逐步进度栏,但是我想让进度栏的圆点上方每隔一个第二个“文本框”,以使元素文本在彼此之间不会互相干扰浏览器窗口变小.
有没有简单的方法可以做到这一点?
片段显示了运行中的进度栏.
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;
}