介绍
在网页设计中,图表是一种非常常见的元素,其中饼图是比较基础且常用的一种图表类型。本文将会手把手地教你如何使用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的学习和掌握有所帮助。