手把手教你使用CSS制作动态饼图「附代码」

介绍

在网页设计中,图表是一种非常常见的元素,其中饼图是比较基础且常用的一种图表类型。本文将会手把手地教你如何使用CSS制作动态饼图,并附上代码。

准备工作

制作饼图所需要的工具和材料如下:

工具

1.文本编辑器:可以使用本地的文本编辑器,比如Sublime Text或者Atom,也可以使用在线编辑器,比如CodePen或JSFiddle。

2.浏览器:推荐使用Google Chrome或者Firefox浏览器。

材料

1.HTML文档:需要一个基础的HTML文档作为骨架。

2.CSS文档:需要一份包含相关样式的CSS文档。

制作饼图

HTML结构

首先,我们来构建饼图的HTML结构。HTML结构非常简单,我们只需要一个"<div>"元素即可,该元素的类名必须为"pie-chart",如下所示:

<div class="pie-chart"></div>

CSS样式

接下来,我们将为这个"<div>"元素添加CSS样式。首先,需要为该元素设置宽度和高度,同时把它变成一个圆形,并且设置它的背景颜色为一个浅色,比如浅灰色,代码如下所示:

.pie-chart {

width: 150px;

height: 150px;

border-radius: 50%;

background-color: #e6e6e6;

}

这样,我们就创建了一个圆形灰色的饼图。接下来,我们需要为它添加更多的CSS样式,让它能够显示动态的饼图。

首先,我们需要添加一个"<ul>"元素用来承载饼图的每一个分片。在CSS样式中,我们需要把该元素设置为一个没有任何边框的列表,并且设置其位置为相对定位,以便后面使用绝对位置调整分片的位置。此外,我们还要把该元素设置为与饼图相同大小的圆形,并且把它旋转-45度,因为我们的第一个分片的起始位置是从12点钟方向开始的,而不是从3点钟方向开始的。

具体代码如下所示:

.pie-chart ul {

margin: 0;

padding: 0;

list-style: none;

position: relative;

width: 100%;

height: 100%;

transform: rotate(-45deg);

border-radius: 50%;

}

接下来,我们需要为饼图的每一个分片创建一个"<li>"元素,并且设置每个"<li>"元素的宽度和高度为0,并且将其设置为绝对定位。我们还需要为每个分片设置一个不同的背景颜色,以便区分不同的分片。为了创建不同颜色的分片,我们可以使用CSS3中的渐变色。为了让饼图变为动态的,我们需要为每个分片设置不同的动画延迟时间和动画变换时间,从而实现多个分片的转动效果。下面是具体代码:

.pie-chart li {

position: absolute;

width: 0;

height: 0;

margin: 0;

padding: 0;

background: linear-gradient(to right, transparent 50%, #3498db 50%),

linear-gradient(to bottom, #3498db 50%, transparent 50%);

background-position: center;

background-size: 50% 50%, 50% 50%;

background-repeat: no-repeat;

border-radius: 50%;

animation: rotate 6s linear infinite;

box-shadow: inset 0 2px 5px rgba(0,0,0,0.3);

}

.pie-chart li:nth-child(1) {

transform: rotate(0deg);

animation-delay: -4s;

}

.pie-chart li:nth-child(2) {

transform: rotate(30deg);

animation-delay: -3s;

}

.pie-chart li:nth-child(3) {

transform: rotate(60deg);

animation-delay: -2s;

}

.pie-chart li:nth-child(4) {

transform: rotate(90deg);

animation-delay: -1s;

}

.pie-chart li:nth-child(5) {

transform: rotate(120deg);

animation-delay: 0s;

}

.pie-chart li:first-child {

background-image: linear-gradient(to right, transparent 50%, #3498db 50%),

linear-gradient(to top, #3498db 50%, transparent 50%);

}

在上面的CSS代码中,我们首先为每个分片使用渐变色径向渐变来创建不同的颜色,让每个分片的颜色更加明显。同时,我们也为它们设置了不同的动画延迟时间和动画变换时间,从而实现多个分片的转动效果。注意,每个分片需要设置不同的角度值,从而确保它们能够均匀地分布在饼图上。

完整代码

最终,我们来看一下完整的HTML和CSS代码,以便更好地理解和实现饼图。

HTML代码

<div class="pie-chart">

<ul>

<li></li>

<li></li>

<li></li>

<li></li>

<li></li>

</ul>

</div>

CSS代码

.pie-chart {

width: 150px;

height: 150px;

border-radius: 50%;

background-color: #e6e6e6;

}

.pie-chart ul {

margin: 0;

padding: 0;

list-style: none;

position: relative;

width: 100%;

height: 100%;

transform: rotate(-45deg);

border-radius: 50%;

}

.pie-chart li {

position: absolute;

width: 0;

height: 0;

margin: 0;

padding: 0;

background: linear-gradient(to right, transparent 50%, #3498db 50%),

linear-gradient(to bottom, #3498db 50%, transparent 50%);

background-position: center;

background-size: 50% 50%, 50% 50%;

background-repeat: no-repeat;

border-radius: 50%;

animation: rotate 6s linear infinite;

box-shadow: inset 0 2px 5px rgba(0,0,0,0.3);

}

.pie-chart li:nth-child(1) {

transform: rotate(0deg);

animation-delay: -4s;

}

.pie-chart li:nth-child(2) {

transform: rotate(30deg);

animation-delay: -3s;

}

.pie-chart li:nth-child(3) {

transform: rotate(60deg);

animation-delay: -2s;

}

.pie-chart li:nth-child(4) {

transform: rotate(90deg);

animation-delay: -1s;

}

.pie-chart li:nth-child(5) {

transform: rotate(120deg);

animation-delay: 0s;

}

.pie-chart li:first-child {

background-image: linear-gradient(to right, transparent 50%, #3498db 50%),

linear-gradient(to top, #3498db 50%, transparent 50%);

}

@keyframes rotate {

0% {

transform: rotate(0deg);

}

100% {

transform: rotate(360deg);

}

}

总结

到此为止,我们已经成功地用CSS制作了一个动态的饼图。通过这个例子,我们可以学习到如何使用CSS3中的渐变色和动画特效来实现一个多彩的饼图,并且这个饼图的动态效果更是让人眼前一亮。同时,我们也可以看到,CSS不仅仅只是用来设置页面样式,它还能够实现很多复杂的功能和效果,未来它的作用还将不断地扩大。希望这篇文章能够对CSS的学习和掌握有所帮助。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。