我有一个进度条,我想扩展到 100% 全宽,如下图所示,因为它扩展了它的父级宽度:
我知道列表项是居中对齐的,但是我在尝试自行修复时遇到了问题。
我以为我可以将左第一个圆圈和最后一个圆圈向右对齐,但是第二个和第三个步骤的圆圈没有水平对齐,并且跟踪栏的绿线在每个步骤圆圈之间没有正确对齐,这最终绿线变短。
出于指导目的,进度跟踪器应跨越红色边框的整个宽度。第一步圆圈应向左对齐,最后一个圆圈应向右对齐。
任何想法将不胜感激。
.container {
width: 100%;
}
.progressbar {
counter-reset: step;
margin: 0;
border-top: 1px solid red;
}
.progressbar li {
list-style: none;
float: left;
position: relative;
text-align: center;
width: 20%;
}
.progressbar li::before {
content: counter(step);
counter-increment: step;
width: 30px;
height: 30px;
line-height: 30px;
border: 1px solid #ddd;
background-color: white;
display: block;
text-align: center;
margin: 0 auto 10px auto;
border-radius: 50%;
}
.progressbar li::after {
content: '';
position: absolute;
width: 100%;
height: 1px;
background-color: #ddd;
top: 16px;
left: -50%;
right: 0;
z-index: -1;
}
.progressbar li:nth-child(1)::after {
content: none;
}
.progressbar li.active {
color: green;
}
.progressbar li.active::before {
border-color: green;
}
.progressbar li.active+li::after {
background-color: green;
}
<div class="container">
<ul class="progressbar">
<li class="">Step 1</li>
<li class="active">Step 2</li>
<li class="">Step 3</li>
<li class="">Step 4</li>
</ul>
</div>
最佳答案
这是我对您的代码所做的 - 有很多更改,请耐心等待:
将
ul
填充重置为零,主要变化是 same
li
中的:after
将是 step< 之后的行/em> 并且不使用以下li
的:after
(添加了right: 0
和left: 0
到.progressbar li::after
以便它填充父li
)将
progressbar
设为 flexbox 并将flex: 1
添加到li
(这样每个li
共享水平宽度)- 这将所有li
排成一行(请注意,我已经删除了float
和宽度
也是),现在使用
align-items: flex-start
将li
设为 column flexbox - 我们几乎完成了 除了 最后一个步骤。将
flex-grow: 0
添加到最后一个li
以及align-self: flex-end
和white-space: nowrap
(将其推到右边)
请看下面的演示:
.container {
width: 100%;
}
.progressbar {
counter-reset: step;
margin: 0;
border-top: 1px solid red;
display: flex;
padding: 0;
}
.progressbar li {
list-style: none;
flex: 1;
position: relative;
text-align: center;
display: flex;
flex-direction: column;
align-items: flex-start;
}
.progressbar li::before {
content: counter(step);
counter-increment: step;
width: 30px;
height: 30px;
line-height: 30px;
border: 1px solid #ddd;
background-color: white;
display: block;
text-align: center;
border-radius: 50%;
}
.progressbar li::after {
content: '';
position: absolute;
width: 100%;
height: 1px;
background-color: #ddd;
top: 16px;
left: 0;
right: 0;
z-index: -1;
}
.progressbar li:last-child {
flex-grow: 0;
align-items: flex-end;
white-space: nowrap;
}
.progressbar li.active {
color: green;
}
.progressbar li.active::before {
border-color: green;
}
.progressbar li.active::after {
background-color: green;
}
/* fixes the right-most line when penultimate step is active */
.progressbar li:nth-last-child(2).active + li:after {
background-color: green;
}
<div class="container">
<ul class="progressbar">
<li class="">Step 1</li>
<li class="active">Step 2</li>
<li class="">Step 3</li>
<li class="">Step 4</li>
</ul>
</div>
关于html - 将进度跟踪器更改为父容器的整个范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55440471/