html - 外圈进度条
问题描述
我试图让进度条的外圈与它后面的黑圈对齐。我已经调整了多个元素的高度和宽度,但没有运气。
我努力了:
- 调整SVG的宽度
- 调整圆的高度和宽度
这是我试图让它看起来的方式:
请帮忙解释一下我应该调整什么?
#progress-bar {
position: absolute;
left: 50%;
top: 55%;
transform: translate(-51%, -50%);
width: 40%;
}
.container {
position: relative;
width: 100%;
display: flex;
justify-content: space-around;
}
.container .card {
position: relative;
width: 400px;
display: flex;
justify-content: center;
align-items: center;
height: 400px;
border-radius: 4px;
text-align: center;
overflow: hidden;
transition: 0.5s;
}
.container .card:before {
content: '';
position: absolute;
top: 0;
left: -50%;
width: 100%;
height: 100%;
background: rgba(255, 255, 255, 0.03);
pointer-events: none;
z-index: 1;
}
.percent {
position: relative;
width: 300px;
height: 300px;
border-radius: 50%;
box-shadow: inset 0 0 50px #000;
background: #222;
z-index: 1000;
}
.percent .number {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
border-radius: 50%;
}
.percent .number h2 {
color: #777;
font-weight: 700;
font-size: 40px;
transition: 0.5s;
}
.card:hover .percent .number h2 {
color: #fff;
font-size: 60px;
}
.percent .number h2 span {
font-size: 24px;
color: #777;
transition: 0.5s;
}
.card:hover .percent .number h2 span {
color: #fff;
}
.text {
position: relative;
color: #777;
margin-top: 20px;
font-weight: 700;
font-size: 18px;
letter-spacing: 1px;
text-transform: uppercase;
transition: 0.5s;
}
svg {
position: relative;
width: 150px;
height: 150px;
z-index: 1000;
}
svg circle {
width: 100%;
height: 100%;
fill: none;
stroke: #191919;
stroke-width: 10;
stroke-linecap: round;
transform: translate(5px, 5px);
}
svg circle:nth-child(2) {
stroke-dasharray: 440;
stroke-dashoffset: 440;
}
.card:nth-child(1) svg circle:nth-child(2) {
stroke-dashoffset: calc(
440 - (440 * 90) / 100
); /* use to adjust progress bar */
stroke: #00ff43;
}
<div class="container">
<div class="card">
<div class="box">
<div class="percent">
<svg>
<circle cx="70" cy="70" r="70"></circle>
<circle cx="70" cy="70" r="70"></circle>
</svg>
<div class="number">
<h2>90<span>%</span></h2>
</div>
</div>
<h2 class="text">Html</h2>
</div>
</div>
</div>
解决方案
<style>
svg {
position: relative;
width: 200px;
height: 200px;
z-index: 1000;
}
svg circle{
fill: none;
stroke-width: 10;
stroke-linecap: round;
stroke-dasharray: 1000;
}
svg circle:nth-child(2){
stroke: #f00;
stroke-dashoffset: 1000;
animation: dash 2s linear forwards;
}
svg circle:nth-child(1){
stroke-dashoffset: 0;
stroke: #000;
}
@keyframes dash {
to {
stroke-dashoffset: 0;
}
}
</style>
<body>
<svg>
<circle cx="50%" cy="50%" r="40%"></circle>
<circle cx="50%" cy="50%" r="40%"></circle>
</svg>
</body>
设置值cx
and cy
to50%
和r
to40%
上面的简单动画应该显示和之间的动画应该stroke-dashoffset
提到
的是 0 到 1000 之间的值不是线性的。这意味着不是圆圈的 10%。
您可以将此示例实现到您的代码中,并以 % 为单位调整 svg 的宽度和高度。stroke-dashoffset: 0;
stroke-dashoffset: 1000;
stroke-dashoffset: 100;
推荐阅读
- c - 在C中将文件的一部分复制到另一个文件的函数
- c# - EF codefirst ClientConnectionId:xx.xxx.xx.xx 错误号:4060,State:1,Class:11
- node.js - 使用 CI Jenkins 部署时,我可以忽略节点 JS 的 unhandledRejection 警告吗?
- angular - 如何使用 localStore 保存表中的对象,这些对象被另一个表中的复选框填充并稍后加载数据和复选框状态?
- azure - 测试步骤迭代详细信息未按时间顺序排列
- swiftui - 我试图测试 FocusState 并得到它仅在 iOS 15 或更高版本中可用的错误。iPhone 12 Pro 模拟器显示 iOS 15.0
- php - 将多个复选框的值存储在一个数组中并将其发送到另一个 PHP 页面
- javascript - 如果所选选项大于其他选项,则禁用其他选项
- c++ - 将包含循环缓冲区的类添加到 Vector
- c# - 防止从 SQL 为应用程序的多个实例返回相同的数据行