带有HTML和CSS的进度条

Sha*_*hin 66 html css progress-bar

我想创建一个进度条,如下图所示:

进度条示例

我不知道创造这个.我应该使用HTML5技术吗?

你能不能给我一些关于创建这个进度条的帮助?

RoT*_*oRa 184

#progressbar {
  background-color: black;
  border-radius: 13px;
  /* (height of inner div) / 2 + padding */
  padding: 3px;
}

#progressbar>div {
  background-color: orange;
  width: 40%;
  /* Adjust with JavaScript */
  height: 20px;
  border-radius: 10px;
}
Run Code Online (Sandbox Code Playgroud)
<div id="progressbar">
  <div></div>
</div>
Run Code Online (Sandbox Code Playgroud)

小提琴

(编辑:更改语法高亮;将后代更改为子选择器)

  • 有些人可能会发现[带有居中百分比指标的进度条](http://stackoverflow.com/a/13298425/607407)更有用. (3认同)

Mad*_*iha 15

http://jsfiddle.net/cwZSW/1406/

#progress {
    background: #333;
    border-radius: 13px;
    height: 20px;
    width: 300px;
    padding: 3px;
}

#progress:after {
    content: '';
    display: block;
    background: orange;
    width: 50%;
    height: 100%;
    border-radius: 9px;
}
Run Code Online (Sandbox Code Playgroud)
<div id="progress"></div>
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案唯一的问题是JavaScript代码很难修改:after伪元素的长度,因为它不是DOM的一部分.除非我错过了什么. (6认同)
  • 根据您的浏览器,您需要使用`border-radius`,`-webkit-border-radius`或`-moz-border-radius` (3认同)

And*_*elo 10

我设计了一个没有JavaScript的替代品.百分比值随着使用内联内容的进度而移动.仅在webkit中测试.希望能帮助到你:

的jsfiddle

CSS:

progress {
	display:inline-block;
	width:190px;
	height:20px;
	padding:15px 0 0 0;
	margin:0;
	background:none;
	border: 0;
	border-radius: 15px;
	text-align: left;
	position:relative;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 0.8em;
}
progress::-webkit-progress-bar {
	height:11px;
	width:150px;
	margin:0 auto;
	background-color: #CCC;
	border-radius: 15px;
	box-shadow:0px 0px 6px #777 inset;
}
progress::-webkit-progress-value {
	display:inline-block;
	float:left;
	height:11px;
	margin:0px -10px 0 0;
	background: #F70;
	border-radius: 15px;
	box-shadow:0px 0px 6px #777 inset;
}
progress:after {
	margin:-26px 0 0 -7px;
	padding:0;
	display:inline-block;
	float:left;
	content: attr(value) '%';
}
Run Code Online (Sandbox Code Playgroud)
<progress id="progressBar" max="100" value="77"></progress>
Run Code Online (Sandbox Code Playgroud)

  • 感谢您实际使用新的HTML5元素。干杯! (2认同)
  • 说“不需要Javascript”是不是有点不切实际?我的意思是,元素本身是一个非常简单的可视组件,但是如果您想从中获取任何值,则需要以某种方式动态设置“value”属性。那会怎样呢?我敢打赌我猜的是Javascript。那么问题就变成了这个元素是否真的提供了那么多的便利或好处,因为它并没有真正做太多事情,而是以一种非常受控的方式呈现一些东西。 (2认同)

DaJ*_*aJF 6

与@RoToRa的答案相同,但有一些细微的调整(正确的颜色和尺寸):

body {
  background-color: #636363;
  padding: 1em;
}

#progressbar {
  background-color: #20201F;
  border-radius: 20px; /* (heightOfInnerDiv / 2) + padding */
  padding: 4px;
}

#progressbar>div {
  background-color: #F7901E;
  width: 48%;
  /* Adjust with JavaScript */
  height: 16px;
  border-radius: 10px;
}
Run Code Online (Sandbox Code Playgroud)
<div id="progressbar">
  <div></div>
</div>
Run Code Online (Sandbox Code Playgroud)

这是小提琴:jsFiddle

它看起来像这样: jsFiddle-截图


San*_*fon 6

在现代浏览器中,您可以使用 CSS3 和 HTML5 进度元素!

progress {
  width: 40%;
  display: block; /* default: inline-block */
  margin: 2em auto;
  padding: 3px;
  border: 0 none;
  background: #444;
  border-radius: 14px;
}
progress::-moz-progress-bar {
  border-radius: 12px;
  background: orange;

}
/* webkit */
@media screen and (-webkit-min-device-pixel-ratio:0) {
  progress {
    height: 25px;
  }
}
progress::-webkit-progress-bar {
    background: transparent;
}  
progress::-webkit-progress-value {  
  border-radius: 12px;
  background: orange;
} 
Run Code Online (Sandbox Code Playgroud)
<progress max="100" value="40"></progress>
Run Code Online (Sandbox Code Playgroud)


Dan*_*ulp 5

我喜欢这一个:

非常流畅,仅此为 HTML,其余 CSS3 向后兼容(尽管它会少一些养眼的效果)

编辑 在下面添加了代码,但直接取自上面的页面,所有功劳都归功于该作者

.meter {
  height: 20px;
  /* Can be anything */
  position: relative;
  background: #555;
  -moz-border-radius: 25px;
  -webkit-border-radius: 25px;
  border-radius: 25px;
  padding: 10px;
  -webkit-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
  -moz-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
  box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
}

.meter>span {
  display: block;
  height: 100%;
  -webkit-border-top-right-radius: 8px;
  -webkit-border-bottom-right-radius: 8px;
  -moz-border-radius-topright: 8px;
  -moz-border-radius-bottomright: 8px;
  border-top-right-radius: 8px;
  border-bottom-right-radius: 8px;
  -webkit-border-top-left-radius: 20px;
  -webkit-border-bottom-left-radius: 20px;
  -moz-border-radius-topleft: 20px;
  -moz-border-radius-bottomleft: 20px;
  border-top-left-radius: 20px;
  border-bottom-left-radius: 20px;
  background-color: #f1a165;
  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f1a165), color-stop(1, #f36d0a));
  background-image: -webkit-linear-gradient(top, #f1a165, #f36d0a);
  background-image: -moz-linear-gradient(top, #f1a165, #f36d0a);
  background-image: -ms-linear-gradient(top, #f1a165, #f36d0a);
  background-image: -o-linear-gradient(top, #f1a165, #f36d0a);
  -webkit-box-shadow: inset 0 2px 9px rgba(255, 255, 255, 0.3), inset 0 -2px 6px rgba(0, 0, 0, 0.4);
  -moz-box-shadow: inset 0 2px 9px rgba(255, 255, 255, 0.3), inset 0 -2px 6px rgba(0, 0, 0, 0.4);
  position: relative;
  overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)
<div class="meter">
  <span style="width: 33%"></span>
  <!-- I use my viewmodel in MVC to calculate the progress and then use @Model.progress to place it in my HTML with Razor -->
</div>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,不鼓励使用 [仅链接答案](http://meta.stackoverflow.com/tags/link-only-answers/info),因此答案应该是搜索解决方案的终点(而不是参考文献的另一个停留点,随着时间的推移,这些参考文献往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。 (2认同)

小智 5

没有嵌套 div 的进度条...对于 css 线性渐变起作用的每个元素。

这里是 JSFiddle http://jsfiddle.net/oj1L3y6t/2/

function show_progress(i) {
  var progress1 = i;
  var progress2 = progress1 + 1;
  var progress3 = progress1 + 2;

  var magic = "linear-gradient(to right, #FFC2CE " + progress1 + "% ,red " + progress2 + "% , #FFFFFF " + progress3 + "%)";
  document.getElementById("progress-0").style.background = magic;

  var magic = "linear-gradient(to right, lightblue " + progress1 + "% , lightgreen " + progress2 + "%)";
  document.getElementById("progress-1").style.background = magic;

  var magic = "linear-gradient(to right, lightblue " + progress1 + "% , #FFFFFF 100%)";
  document.getElementById("progress-2").style.background = magic;

  var magic = "linear-gradient(#FFC2CE " + progress1 + "% ,red " + progress2 + "% , #FFFFFF " + progress3 + "%)";
  document.getElementById("progress-3").style.background = magic;
}

function timeout() {
  t = setTimeout(function() {
    show_progress(t)
    timeout();
  }, 50);
  if (t == 78) {
    clearTimeout(t);
  }
  console.log(t);
}

timeout();
Run Code Online (Sandbox Code Playgroud)
#progress-0 {
  border: 1px solid black;
  width: 500px;
  background: #999;
  text-align: center;
}

#progress-1 {
  border: 1px solid black;
  width: 500px;
  background: #999;
  text-align: center;
  margin-top: 10px;
  border-radius: 10px;
}

#progress-2 {
  border: 1px solid black;
  width: 500px;
  background: #999;
  text-align: center;
  margin-top: 10px;
}

#progress-3 {
  border: 1px solid black;
  width: 100px;
  height: 100px;
  background: #999;
  line-height: 100px;
  text-align: center;
  margin-top: 10px;
  border-radius: 200px;
}
Run Code Online (Sandbox Code Playgroud)
<div id="progress-0">Loading</div>
<input id="progress-1" value="Loading"></input>
<button id="progress-2">Loading</button>
<p id="progress-3">Loading</p>
Run Code Online (Sandbox Code Playgroud)