14、简单的饼图

使用渐变背景和伪元素,可以实现简单的饼图。其原理是:将渐变背景作为底色,再将主元素一半大小的伪元素覆盖在主元素之上,并遮盖住渐变背景中显示比率的颜色。主元素中背景色和比率色各占一半,利用伪元素的旋转来显示出表示比率部分的颜色。

#a{
    width: 200px;
    height: 200px;
    margin: 200px auto;
    border-radius: 50%;
    overflow: hidden;
    background-color: yellowgreen;
    background-image: linear-gradient(to right,transparent 50%,#655 0);
    position: relative;
}

加上覆盖伪元素之后,虚线框表示伪元素的位置。将伪元素设置成刚好覆盖比率色的半圆,并将旋转对称点设定为左边的中点,这样伪元素就会以主元素的圆心为对称点进行旋转。

#a:after{
    content: "";
    display: block;
    outline: 1px dashed #333;
    border-radius: 0 100% 100% 0 / 50%;
    width: 50%;
    height: 100%;
    margin-left: 50%;
    background-color: inherit;
    transform-origin: left;
}

伪元素旋转20%时。

transform: rotate(.2turn);

当伪元素旋转的度数大于50%时,比例图会崩坏。



利用CSS3animation动画可以解决这一问题,原理是:当比率超过50%时,将伪元素的颜色改为比率色的颜色。一个从0到100%的比率动画。

@keyframes ani {
    to { transform: rotate(.5turn) }
}
@keyframes bg {
    50% { background: #655 }
}
#a:after{
    /*outline: 1px dashed #333; */
    animation: ani 3s linear infinite,
               bg 6s step-end infinite; // step-end表示只显示动画每一步的结束帧,这里即让伪元素的背景色在50%位置时发生突变。
}

利用以下简单的HTML结构显示不同比率的静态饼图。

<div class="a">20%</div>
<div class="a">60%</div>

解决方案是让伪元素的动画静止在相应比率的位置,给动画延迟animation-delay属性设置一个负的值,表示动画已经播放了相应的时间,将整个动画的时间设置为100s,这样60%的饼图就是动画静止在已经执行了60s的位置。为了能根据结构的内容自动生成饼图,要将animation-delay属性设置在主元素的内联样式中,因为伪元素无法设置内联样式,所以在伪元素中使用animation-delay的继承值。

<div class="a" style="animation-delay: -20s;">20%</div>
<div class="a" style="animation-delay: -60s;">60%</div>
#a:after{
    /*outline: 1px dashed #333; */
    animation: ani 50s linear infinite,
               bg 100s step-end infinite; 
animation-play-state: paused;
animation-delay: inherit;
}

利用JS获取内容的值,并将其转化为内联样式赋值给主元素,就可以实现任意比率的简单饼图。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 6,861评论 0 11
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 5,899评论 0 2
  • 1、属性选择器:id选择器 # 通过id 来选择类名选择器 . 通过类名来选择属性选择器 ...
    Yuann阅读 5,585评论 0 7
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,634评论 4 61
  • “刺猬怎么变优雅?这是电影《刺猬的优雅》留给我们的疑惑,也是电影教给我们最大的收获。 看门人勒妮是一个又老又胖的寡...
    行壹1阅读 3,064评论 0 0

友情链接更多精彩内容