首页 > 其他分享 >使用css画一个3D饼图的效果

使用css画一个3D饼图的效果

时间:2024-12-07 10:11:33浏览次数:3  
标签:slice 效果 color transform background 200px css 3D

<!DOCTYPE html>
<html>
<head>
<title>3D Pie Chart with CSS</title>
<style>
body {
  background-color: #f0f0f0;
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

.pie-chart {
  width: 200px;
  height: 200px;
  border-radius: 50%;
  position: relative;
  perspective: 800px; /* Creates 3D perspective */
  transform-style: preserve-3d; /* Preserves 3D transformations */
}

.slice {
  position: absolute;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  clip: rect(0, 100px, 200px, 0); /* Initial clip for half-circle */
  transform-origin: left center; /* Rotation origin */
}

.slice .half {
  width: 100%;
  height: 100%;
  border-radius: 50%;
  background-color: #eee; /* Default color for back face */
  transform: translateZ(-1px); /* Slightly offset for visibility */
}

/* Individual slice styles and rotations */
.slice:nth-child(1) {
  background-color: #f44336;
  transform: rotate(0deg); /* Starting angle */
}

.slice:nth-child(2) {
  background-color: #2196f3;
  transform: rotate(90deg); /* Accumulated angle */
  clip: rect(0, 200px, 200px, 100px); /* Adjust clip for second half */
}

.slice:nth-child(3) {
  background-color: #4caf50;
  transform: rotate(225deg); /* Accumulated angle */
  clip: rect(0, 200px, 200px, 100px);
}

.slice:nth-child(4) { /* Example of smaller slice */
  background-color: #ffeb3b;
  transform: rotate(300deg);
  clip: rect(0, 200px, 200px, 100px);
}


/* Add a 3D effect with shadows (optional) */
.pie-chart:before {
  content: '';
  position: absolute;
  width: 90%;
  height: 90%;
  border-radius: 50%;
  background-color: rgba(0, 0, 0, 0.1);
  top: 5%;
  left: 5%;
  z-index: -1;
  filter: blur(2px); /* Soften the shadow */
}

</style>
</head>
<body>

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

</body>
</html>

Explanation and Key Improvements:

  • 3D Perspective: The perspective property on the .pie-chart container creates the 3D space. transform-style: preserve-3d ensures that child elements maintain their 3D transformations.
  • Slice Rotation: Each .slice is rotated using transform: rotate(angle). The angles are cumulative to create the pie effect.
  • Half-Circles and Clipping: The clip: rect() property creates the half-circle shapes. The values are adjusted for the second and subsequent slices to ensure they fit together correctly. This is a cleaner approach than using pseudo-elements.
  • Transform Origin: transform-origin: left center sets the rotation point to the left edge of the circle, which is crucial for the pie chart effect.
  • Back Face Color: The .half element inside each slice provides a consistent background color for the back face of

标签:slice,效果,color,transform,background,200px,css,3D
From: https://www.cnblogs.com/ai888/p/18591843

相关文章

  • 实现多张图片合成一张的效果
    前端实现多张图片合成一张图片,有多种方法,以下是几种常见方案以及代码示例:1.使用CanvasAPI:这是最常用的方法,灵活度高,可以实现各种复杂的合成效果。functionmergeImages(imageUrls,callback){constcanvas=document.createElement('canvas');constctx=canvas.g......
  • 为什么说css的选择器一般不要超过三级?
    CSS选择器一般建议不要超过三层,主要基于以下几个原因:性能问题:浏览器渲染页面时,需要根据CSS选择器来匹配对应的HTML元素。选择器层级越深,浏览器需要进行的计算就越多,尤其是在大型DOM树中,过深的层级会导致性能下降,影响页面渲染速度,造成卡顿。浏览器需要从右往左进行匹......
  • 假如css的分号写在声明块之外,将会发生什么呢?解释下原因[代码]
    如果CSS的分号写在声明块之外,也就是写在右花括号}之后,通常情况下不会造成任何错误,浏览器会忽略它。但是,这并不符合标准的CSS语法,最好避免这种写法。原因如下:CSS语法规范:CSS规范规定,声明块内的每个声明都应该以分号结尾,而声明块本身不需要分号。额外的分号会被......
  • 使用css实现手风琴的效果
    <!DOCTYPEhtml><html><head><title>AccordionExample</title><style>.accordion{border:1pxsolid#ddd;width:100%;}.accordion-item{border-bottom:1pxsolid#ddd;}.accordion-header{padding:10px1......
  • 使用css实现蒙版的效果
    CSS提供了几种方法实现蒙版效果,以下是几种常见的方式以及它们的优缺点:1.使用::before或::after伪元素:这是最常用的方法之一,它通过在元素的前面或后面创建一个伪元素,并设置其背景颜色和透明度来实现蒙版效果。.masked-element{position:relative;/*必须设置相对定......
  • 在响应式布局中,如何使用纯css使得块元素等比缩放?
    在响应式布局中,使用纯CSS使块元素等比缩放,主要依靠padding的百分比值特性,以及aspect-ratio属性(现代浏览器支持)。以下几种方法可以实现:1.使用padding-top或padding-bottom:这是最常用的方法,利用了padding百分比值是相对于父元素宽度计算的特性。.container{......
  • 登录页毛玻璃效果
    在现代的前端开发中,毛玻璃效果(FrostedGlassEffect)常常用于页面设计中,以增加页面的层次感和美观度,特别是在登录页面等界面中,可以使页面显得更加现代和时尚。毛玻璃效果通过将背景图模糊化并让前景元素保持清晰,模拟出一种“磨砂玻璃”的效果。在本文中,我们将讨论如何在登录页......
  • CSS 一些个人不常用属性总结
    1.滚动捕获在元素中滚动不会在中间停止一定会停在元素前方后或后方-需要在父元素中设置 scroll-snap-type:none|[x|y|block|inline|both][mandatory|proximity]  eg:  scroll-snap-type:xmandatory; 即时在X轴开启强制捕获......
  • 题解:AtCoder Beginner Contest AT_abc373_d ABC373D Hidden Weights
    题目传送门题目翻译给你一个$N$个点,$M$条边的有向图,其中边有边权。现在让你给每一个点设置一个点权$a$,使得对于任意两点$x$和$y$,如果$x$到$y$有一条边,边权为$w$,那么需要满足$a_y-a_x=w$。现在让你输出一组合法的分配方案,题目保证存在,输出任意一组都行。思路1(注意......
  • 基于CPLD/FPGA的呼吸灯效果实现(附全部verilog源码)
    一、功能介绍此设计可以让你的FPGA板子上那颗LED具有呼吸效果,像智能手机上的呼吸灯一样。以下源码已上板验证通过,大家可直接使用。二、呼吸灯Verilog源码ps1.带★号处可根据需要进行修改.ps2.有需要的话可自行添加rst复位信号. /**************************************......