作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 css 和 html 创建饼图。我只会显示一些静态数字,因此我试图保持它相对简单并且不使用任何动画。
我目前在如何创建我想要的外观方面遇到了障碍。下面的代码片段完全按照我的意愿工作,问题在于 conic-gradient
Firefox 和 Internet Explorer 不支持,这将是该元素的一个问题。
.progress-circle {
--d: 50px;
--color: #002F65;
--progress: 40;
border-radius: var(--d);
height: var(--d);
width: var(--d);
background: conic-gradient( var(--color) calc(calc(var(--progress) / 100) * 360deg), transparent calc(calc(var(--progress) / 100) * 360deg));
}
<div class="progress-circle"></div>
transform: rotate(.1turn);
决定的
conic-gradient
与其他浏览器兼容吗?如果不是,那么使用 css 制作饼图以与第一个示例非常相似的最佳方法是什么?
.pie {
width: 100px; height: 100px;
border-radius: 50%;
background: yellowgreen;
background-image:
linear-gradient(to right, transparent 50%, #655 0);
}
.pie::before {
content: "";
display: block;
margin-left: 50%;
height: 100%;
border-radius: 0 100% 100% 0 / 50%;
background: #655;
transform-origin: left;
transform: rotate(.1turn);
}
<div class="pie"></div>
最佳答案
这是一个基于 this previous answer 的想法
.box {
/* percentage to degree
--s:0 for [0% 50%]
--s:1 for [50% 100%]
*/
--v:calc( ((18/5) * var(--p) - 90)*1deg);
width:100px;
height:100px;
display:inline-block;
border-radius:50%;
background:
linear-gradient(var(--v), yellowgreen 50%,transparent 0) 0 /calc((1 - var(--s))*100%),
linear-gradient(var(--v), transparent 50%,#655 0) 0 /calc(var(--s)*100%),
linear-gradient(to right, yellowgreen 50%,#655 0);
}
<div class="box" style="--p:5;--s:0"></div>
<div class="box" style="--p:20;--s:0"></div>
<div class="box" style="--p:50;--s:0"></div>
<div class="box" style="--p:70;--s:1"></div>
<div class="box" style="--p:95;--s:1"></div>
min()
优化代码并保持只使用一个变量但需要注意支持:
https://caniuse.com/#feat=css-math-functions
.box {
/* percentage to degree */
--v:calc( ((18/5) * var(--p) - 90)*1deg);
width:100px;
height:100px;
display:inline-block;
border-radius:50%;
background:
linear-gradient(var(--v), yellowgreen 50%,transparent 0) 0 /min(100%,(50 - var(--p))*100%),
linear-gradient(var(--v), transparent 50%,#655 0) 0 /min(100%,(var(--p) - 50)*100%),
linear-gradient(to right, yellowgreen 50%,#655 0);
}
<div class="box" style="--p:5;"></div>
<div class="box" style="--p:20;"></div>
<div class="box" style="--p:50;"></div>
<div class="box" style="--p:70;"></div>
<div class="box" style="--p:95;"></div>
.box {
/* percentage to degree */
--v: calc( ((18/5) * var(--p) - 180)*1deg);
width: 100px;
display: inline-flex;
border-radius: 50%;
overflow: hidden;
background: linear-gradient(to right, yellowgreen 50%, #655 0);
}
.box::before,
.box::after {
content: "";
width: 50%;
padding-top:100%;
transform: rotate(var(--v));
}
.box::before {
background:
linear-gradient(yellowgreen 0 0)
0 / calc((50 - var(--p))*1%);
transform-origin: right;
}
.box::after {
background:
linear-gradient(#655 0 0)
0 / calc((var(--p) - 50)*1%);
transform-origin: left;
}
<div class="box" style="--p:5;"></div>
<div class="box" style="--p:20;width:150px;"></div>
<div class="box" style="--p:50;width:120px;"></div>
<div class="box" style="--p:70;"></div>
<div class="box" style="--p:95;width:80px;"></div>
关于html - 使用 CSS 创建静态饼图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62924550/
有人可以帮我理解为什么我的饼图百分比计算不正确吗?看截图: 根据我的计算,如 RHS 上所示,支出百分比应为 24.73%。传递给 Highcharts 的值如下:- 花费:204827099.36-
我正在制作圆环饼图。 我设置数据的颜色并获取钻取(它是保存外部切片的数据和配置的对象)切片的颜色为同一组颜色。我想设置要在向下钻取对象中使用的不同颜色数组。请参阅附图(外层切片有两种颜色:橙色和透明)
我是一名优秀的程序员,十分优秀!