所以,我在这个页面上有几个不同的进度条 - http://kaye.at/play/goals
这是我的HTML& CSS:
<div class="meter"><span style="width: 100%;"></span></div>
.meter {
height: 5px;
position: relative;
background: #f3efe6;
z-index: 0;
margin-top: -5px;
overflow: hidden;
}
.meter > span {
z-index: 50;
display: block;
height: 100%;
background-color: #e4c465;
position: relative;
overflow: hidden;
}
我想简单地为进度条设置动画,使其慢慢从0%上升到任何百分比,而不是仅仅出现在那里,但我想以最简单的方式做到这一点。什么是我最好的选择,是否可以使用我正在使用的当前代码?
答案 0 :(得分:4)
我能想到为内联宽度设置动画的唯一方法是添加另一个span
,因此HTML最终为:
<div class="meter">
<span style="width:80%;"><span class="progress"></span></span>
</div>
需要额外的跨度,因为我们无法(仅使用CSS)检查内联样式需要宽度的内容并因此设置动画。不幸的是,我们无法动画auto
。
CSS(您需要添加必要的前缀):
.meter {
height: 5px;
position: relative;
background: #f3efe6;
overflow: hidden;
}
.meter span {
display: block;
height: 100%;
}
.progress {
background-color: #e4c465;
animation: progressBar 3s ease-in-out;
animation-fill-mode:both;
}
@keyframes progressBar {
0% { width: 0; }
100% { width: 100%; }
}
您可以在行动here中看到这一点。不支持CSS动画的浏览器只会使条形图处于最终状态。
答案 1 :(得分:2)
我开发了一个进度条,以使它现在如此轻巧整洁,并且您也具有百分比值,当百分比从100%更改为7%时,我应用了CSS过渡,只需点击Change
按钮看看它怎么运作。将transition: width 3s ease;
从3秒更改为适合您变慢或变快的需求。
function change(){
var selectedValue = document.querySelector("#progress-value").value;
document.querySelector(".progress-bar-striped > div").textContent = selectedValue + "%";
document.querySelector(".progress-bar-striped > div").style.width = selectedValue + "%";
}
.progress-bar-striped {
overflow: hidden;
height: 20px;
margin-bottom: 20px;
background-color: #f5f5f5;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar-striped > div {
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-size: 40px 40px;
float: left;
width: 0%;
height: 100%;
font-size: 12px;
line-height: 20px;
color: #ffffff;
text-align: center;
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-webkit-transition: width 3s ease;
-moz-transition: width 3s ease;
-o-transition: width 3s ease;
transition: width 3s ease;
animation: progress-bar-stripes 2s linear infinite;
background-color: #288ade;
}
.progress-bar-striped p{
margin: 0;
}
@keyframes progress-bar-stripes {
0% {
background-position: 40px 0;
}
100% {
background-position: 0 0;
}
}
<div class="progress-bar-striped">
<div style="width: 100%;"><b><p>100%</p></b></div>
</div>
<div>
<input id="progress-value" type="number" placeholder="Enter desired percentage" min="0" max="100" value="7" />
<input type="button" value="Change" onclick="change()"/>
</div>