使CSS步骤进度条使用全宽度的可用空间

  • 本文关键字:空间 CSS css progress-bar
  • 更新时间 :
  • 英文 :


我有以下步骤进度条:

<div class="container">
<ul class="progressbar">
<li class="active">Register</li>
<li class="active">Sync</li>
<li>Activate</li>
</ul>
</div>
<style>
.container {
width: 100%;
}
.progressbar {
counter-reset: step;
display: flex;
justify-content: space-between;
}
.progressbar li {
list-style-type: none;
float: left;
width: 33.3%;
position: relative;
text-align: center;
}
.progressbar li:before {
content: counter(step);
counter-increment: step;
width: 30px;
height: 30px;
line-height: 30px;
border: 1px solid #ddd;
border-radius: 50%;
display: block;
text-align: center;
margin: 0 auto 10px auto;
background-color: white;
}
.progressbar li:after {
content: '';
position: absolute;
width: 100%;
height: 1px;
background-color: #ddd;
top: 15px;
left: -50%;
z-index: -1;
}
.progressbar li:first-child:after {
content: none;
}
.progressbar li.active {
color: green;
}
.progressbar li.active:before {
border-color: green;
}
.progressbar li.active + li:after {
background-color: green;
}
</style>

由于这三个步骤的宽度都是33.3%,所以进度条的外缘有一个很大的填充。我需要去掉这些多余的空间,用掉所有可用的空间。我怎样才能做到这一点呢?与其指定一个精确的宽度%,也为了避免硬编码步数,我想,不如这样写:


display: flex;
justify-content: space-between;

谢谢!

应该可以了!我为每个li元素指定了特定的伸缩值。

* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body{
background-color: tan;
}
.container {
width: 100%;
background-color: lightblue;
}
.progressbar {
counter-reset: step;
display: flex;
justify-content: center;
}
.progressbar li {
flex: 1 1 0px;
list-style-type: none;
text-align: center;
position: relative;
background-color: #ffe;
border: 1px solid black;
}
.progressbar li::before {
counter-increment: step;
content: counter(step);
width: 30px;
height: 30px;
line-height: 30px;
border: 1px solid #ddd;
border-radius: 50%;
display: block;
text-align: center;
margin: 0 auto 10px auto;
background-color: white;
}
.progressbar li::after {
content: '';
position: absolute;
height: 1px;
width: 100%;
background-color: #ddd;
z-index: 10;
left: -50%;
top: 15px;
}
.progressbar li:first-child::after{
content: none;
}
.progressbar li.active {
color: green;
}
.progressbar li.active::before{
border-color: green;
}
.progressbar li.active + li::after {
background-color: green;
}

.progressbar2 {
counter-reset: step;
display: flex;
justify-content: center;
}
.progressbar2 li {
flex: 1 1 0px;
list-style-type: none;
text-align: center;
position: relative;
background-color: #ffe;
border: 1px solid black;
}
.progressbar2 li::before {
counter-increment: step;
content: counter(step);
width: 30px;
height: 30px;
line-height: 30px;
border: 1px solid #ddd;
border-radius: 50%;
display: block;
text-align: center;
margin: 0 auto 10px auto;
background-color: white;
}
.progressbar2 li:first-child{
flex: 0 1 auto;
}
.progressbar2 li:last-child{
flex: 0 1 auto;
}
.progressbar2 li:first-child::after{
content: none;
}
.progressbar2 li.active2 {
color: green;
}
.progressbar2 li.active2::before{
border-color: green;
}
<div class="container">
<ul class="progressbar">
<li class="active">Register</li>
<li class="active">Sync</li>
<li>Activate</li>
</ul>
</div>
<div class="container">
<ul class="progressbar2">
<li class="active2">Register</li>
<li class="active2">Sync</li>
<li>Activate</li>
</ul>
</div>

最新更新