news 2026/4/15 17:58:21

Vue3 饼图定制图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue3 饼图定制图

效果图:

图一:

<template> <v-chart ref="vChartRef" :option="option"></v-chart> </template> <script setup lang="ts"> import { ref, computed, reactive, onMounted } from "vue"; import VChart from "vue-echarts"; import { use } from "echarts/core"; import { CanvasRenderer } from "echarts/renderers"; import { PieChart } from "echarts/charts"; import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent, } from "echarts/components"; import cloneDeep from "lodash/cloneDeep"; use([ DatasetComponent, CanvasRenderer, PieChart, GridComponent, TooltipComponent, LegendComponent, ]); const vChartRef = ref(); const seriesItem = ref<any>({ type: "pie", radius: ["40%", "65%"], center: ["50%", "60%"], roseType: false, avoidLabelOverlap: false, itemStyle: { show: true, borderRadius: 10, borderColor: "#fff", borderWidth: 2, }, label: { show: false, position: "center", formatter: "{b}", fontSize: 12, }, emphasis: { label: { show: true, fontSize: "40", fontWeight: "bold", }, }, labelLine: { show: false, }, data: <any>[], }); const chartData = reactive([ { value: 1048, name: "Search Engine", }, { value: 735, name: "Direct", }, { value: 580, name: "Email", }, { value: 484, name: "Union Ads", }, { value: 300, name: "Video Ads", }, ]); // 饼图数据处理 const getSeries = () => { let series: any = []; const values = chartData; //系列模板 let item = cloneDeep(seriesItem.value); item.data = values; series.push(item); return series; }; const option = reactive({ type: "ring", tooltip: { show: true, trigger: "item", }, legend: { show: true, }, series: <any>[], }); onMounted(() => { option.series = getSeries(); }); </script>

图二:

<template> <div class="pie02"> <div class="chart-div"> <div class="go-pie02-container"> <div class="left-box-circle"> <div class="left-box-inner-circle"> <div class="name-box"> <div class="name">{{ option.centerText }}</div> <span class="num" >{{ option.total }}<span class="unit" :style="{ color: option.unitFontColor, 'font-size': '14px' }" >{{ option.totalUnit }}</span ></span > </div> <div class="left-box-inner-circle02"></div> </div> </div> </div> <!-- echarts --> <div class="chart-box" :class="option.legend.show ? '' : 'chart-box-in-center'" > <v-chart ref="vChartRef" :option="option"> </v-chart> </div> </div> <Empty v-show="!option.series[1].data || option.series[1].data.length === 0" type="2" ></Empty> </div> </template> <script setup lang="ts"> import { ref, reactive, onMounted } from "vue"; import VChart from "vue-echarts"; import { use } from "echarts/core"; import { CanvasRenderer } from "echarts/renderers"; import { PieChart } from "echarts/charts"; import { GaugeChart } from "echarts/charts"; import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent, } from "echarts/components"; use([ DatasetComponent, CanvasRenderer, PieChart, GaugeChart, GridComponent, TooltipComponent, LegendComponent, ]); const vChartRef = ref(null); const chartData = ref([ { value: "1048", name: "I类断面" }, { value: "735", name: "II类断面" }, { value: "580", name: "III类断面" }, { value: "484", name: "IV类断面" }, { value: "300", name: "V类断面" }, { value: "300", name: "六类断面" }, { value: "300", name: "七类断面" }, { value: "300", name: "八类断面" }, ]); // 基础颜色数组 const baseColors = [ "#0674f1", "#029cd4", "#2ba471", "#f5ba18", "#e37318", "#D54941", "#E851B3", "#8E56DD", "#9C27B0", "#607D8B", "#FF9800", "#9E9E9E", "#795548", "#FFEB3B", "#4CAF50", "#E91E63", "#3F51B5", "#2196F3", "#00BCD4", "#4CAF50", ]; // 动态生成颜色配置 const generateColors = (count: number) => { const colors = []; for (let i = 0; i < count; i++) { const color = baseColors[i % baseColors.length]; colors.push({ type: "linear", x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: color + "33", // 0% 处的颜色 (30% 透明度) }, { offset: 1, color: color + "ff", // 100% 处的颜色 (完全不透明) }, ], globalCoord: false, global: false, }); } return colors; }; const option = reactive({ // 标签显示信息 labelFormatInfo: "{b}: {c} | {d}%", // 是否显示中心文字 showCenterText: true, // 是否显示标签 showLabel: true, // 中心文字 centerText: "考核断面(个)", // 总数单位 totalUnit: "", unitFontColor: "#ffffffe6", circle01Width1: 200, circle01Width2: 65, // 饼图大小 pieWidth: 300, total: 20, color: generateColors(chartData.value.length), tooltip: { trigger: "item", }, legend: { show: false, orient: "vertical", top: 32, left: 264, icon: "path://M512 256c152.064-0.213333 297.941333 61.504 405.333333 171.477333L512 841.472 106.666667 427.477333C214.058667 317.504 359.936 255.786667 512 256z", itemGap: 24, itemWidth: 23, itemHeight: 12, textStyle: { color: "#FFFFFF", fontWeight: 700, fontFamily: "AlibabaPuHuiTi_2_85_Bold", fontSize: 12, lineHeight: 16, }, }, series: [ { name: "刻度环", type: "gauge", radius: "55%", left: "0%", top: "0%", center: ["50%", "50%"], startAngle: 0, endAngle: 360, splitNumber: 12, axisLine: { show: false, }, axisTick: { show: true, lineStyle: { color: "#0674F1", width: 1, opacity: 0.2, }, length: 20, }, splitLine: { show: false, }, axisLabel: { show: false, }, detail: { show: false, }, }, { name: "", type: "pie", left: "0%", top: "0%", center: ["50%", "50%"], radius: ["65%", "90%"], avoidLabelOverlap: true, label: { show: true, overflow: "break", color: "#ffffff", fontSize: 14, fontWeight: 700, lineHeight: 16, fontFamily: "AlibabaPuHuiTi_2_85_Bold", formatter: "{b}: {c} | {d}%", }, labelLine: { show: true, lineStyle: { cap: "round", }, }, emphasis: { disabled: true, scale: false, label: { show: false, formatter: (params: any) => { return [`{a|${params.name}(个)}`, `{b|${params.value}}`].join( "\n" ); }, rich: { a: { fontFamily: "AlibabaPuHuiTi_2_85_Bold", fontWeight: 700, fontSize: 14, color: "rgba(255, 255, 255, 0.9)", align: "center", lineHeight: 20, }, b: { fontFamily: "DINAlternate-Bold", fontWeight: 700, fontSize: 28, color: "rgba(255, 255, 255, 0.9)", align: "center", }, }, }, }, data: chartData.value, }, ], }); onMounted(() => {}); </script> <style lang="scss" scoped> .pie02 { background-color: #001e40; width: 100%; height: 100%; position: relative; .chart-div { width: 100%; height: 100%; position: relative; } .chart-box { width: 100%; // height: 240px; height: 100%; position: absolute; top: 50%; left: 0px; transform: translateY(-50%); // z-index: -1; } .chart-box-in-center { top: 50%; left: 50%; transform: translate(-50%, -50%); } .go-pie02-container { width: 100%; height: 100%; overflow: hidden; display: flex; flex-direction: row; justify-content: center; align-items: center; } .right-legend { width: calc(100% - 240px - 24px); max-height: 100%; margin-left: 24px; overflow-y: auto; } .right-legend-item-box { width: 100%; margin-bottom: 24px; display: flex; flex-direction: row; justify-content: flex-start; align-items: center; .icon { width: 12px; height: 12px; margin-left: 5px; margin-right: 10px; // border: 1px solid rgba(6, 116, 241, 1); border-radius: 0px 0px 0px 12px; transform: rotate(135deg); } .legend-item { font-size: 12px; color: #ffffff; letter-spacing: -0.5px; line-height: 16px; position: relative; top: 2px; } } .left-box-circle { width: 240px; height: 240px; // border-radius: 50%; // border: 1px solid rgba(6, 116, 241, 0.2); position: relative; } .left-box-inner-circle { text-align: center; width: 250px; height: 250px; background: #0674f11a; border: 1px solid #0674f14d; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border-radius: 50%; // z-index: 1; .name-box { width: 110px; // height: 91px; position: absolute; z-index: 100; top: 50%; left: 50%; transform: translate(-50%, -50%); } .name { padding: 0 13px; color: #ffffffe6; text-align: center; line-height: 16px; } .num { font-family: DINAlternate-Bold; font-size: 28px; color: #ffffffe6; letter-spacing: -0.5px; text-align: center; } .unit { display: inline-block; padding-left: 6px; color: #ffffffe6; text-align: center; transform: translateY(-2px); } } .left-box-inner-circle02 { width: 120px; height: 120px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border-radius: 50%; background-image: linear-gradient(225deg, #021326 0%, #001e40 100%); } } </style>

图三:

<template> <div class="pie03"> <div class="chart-div"> <div class="go-pie02-container"> <div class="left-box-circle"> <div class="left-box-inner-circle"> <div class="name-box"> <span class="name">{{ option.centerText }}</span> <br /> <span class="name" >{{ option.describeText }}<span v-show="option.totalUnit" class="unit">{{ option.totalUnit }}</span></span > </div> </div> </div> </div> <!-- echarts --> <div class="chart-box" :class="option.legend.show ? '' : 'chart-box-in-center'" > <v-chart ref="vChartRef" :option="option"> </v-chart> </div> </div> </div> </template> <script setup lang="ts"> import { ref, onMounted, reactive, } from "vue"; import VChart from "vue-echarts"; import { use } from "echarts/core"; import { CanvasRenderer } from "echarts/renderers"; import { PieChart } from "echarts/charts"; import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent, } from "echarts/components"; use([ DatasetComponent, CanvasRenderer, PieChart, GridComponent, TooltipComponent, LegendComponent, ]); const vChartRef = ref(null); const chartData = ref([ { value: "20.1", name: "黄埔" }, { value: "10.7", name: "越秀" }, { value: "6.9", name: "海珠" }, { value: "12.9", name: "天河" }, { value: "12.7", name: "白云" }, { value: "5.1", name: "荔湾" }, { value: "8.6", name: "番禺" }, { value: "6.5", name: "花都" }, { value: "8.4", name: "南沙" }, { value: "1.9", name: "从化" }, { value: "6.1", name: "增城" }, ]); // 基础颜色数组 const baseColors = [ "#0674f1", "#029cd4", "#2ba471", "#f5ba18", "#e37318", "#D54941", "#E851B3", "#8E56DD", "#9C27B0", "#607D8B", "#FF9800", "#9E9E9E", "#795548", "#FFEB3B", "#4CAF50", "#E91E63", "#3F51B5", "#2196F3", "#00BCD4", "#4CAF50", ]; // 动态生成颜色配置 const generateColors = (count: number) => { const colors = []; for (let i = 0; i < count; i++) { const color = baseColors[i % baseColors.length]; colors.push({ type: "linear", x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: color, // 0% 处的颜色 (30% 透明度) + "33" }, { offset: 1, color: color, // 100% 处的颜色 (完全不透明) + "ff" }, ], globalCoord: false, global: false, }); } return colors; }; const option = reactive({ // 中心文字 centerText: "2015年", describeText: "能源消费总量占比", // 总数单位 totalUnit: "", color: generateColors(chartData.value.length), tooltip: { show: true, trigger: "item", }, legend: { show: false, orient: "vertical", top: 32, left: 264, icon: "path://M512 256c152.064-0.213333 297.941333 61.504 405.333333 171.477333L512 841.472 106.666667 427.477333C214.058667 317.504 359.936 255.786667 512 256z", itemGap: 24, itemWidth: 23, itemHeight: 12, textStyle: { color: "#FFFFFF", fontWeight: 700, fontFamily: "AlibabaPuHuiTi_2_85_Bold", fontSize: 12, lineHeight: 16, }, }, series: [ { name: "", type: "pie", left: "0%", top: "0%", center: ["50%", "50%"], radius: ["50%", "75%"], avoidLabelOverlap: true, minShowLabelAngle: 0, label: { show: true, overflow: "breakAll", color: "#ffffff", fontSize: 14, fontFamily: "AlibabaPuHuiTi_2_85_Bold", formatter: "{b} {d}%", }, labelLine: { show: false, }, emphasis: { label: { show: true, color: "#029CD4FF", }, }, data: chartData.value, }, ], }); onMounted(() => {}); </script> <style lang="scss" scoped> .pie03 { background-color: #000; width: 100%; height: 100%; position: relative; .chart-div { width: 100%; height: 100%; position: relative; } .chart-box { width: 100%; height: 100%; // max-width: 280px; // max-height: 280px; position: absolute; top: 50%; left: 0px; transform: translateY(-50%); } .chart-box-in-center { top: 50%; left: 50%; transform: translate(-50%, -50%); } .go-pie02-container { width: 100%; height: 100%; overflow: hidden; display: flex; flex-direction: row; justify-content: center; align-items: center; } .right-legend { width: calc(100% - 240px - 24px); max-height: 100%; margin-left: 24px; overflow-y: auto; } .right-legend-item-box { width: 100%; margin-bottom: 24px; display: flex; flex-direction: row; justify-content: flex-start; align-items: center; .icon { width: 12px; height: 12px; margin-left: 5px; margin-right: 10px; // border: 1px solid rgba(6, 116, 241, 1); border-radius: 0px 0px 0px 12px; transform: rotate(135deg); } .legend-item { font-size: 12px; color: #ffffff; letter-spacing: -0.5px; line-height: 16px; position: relative; top: 2px; } } .left-box-circle { width: 100%; height: 100%; // border-radius: 50%; // border: 1px solid rgba(6, 116, 241, 0.2); position: relative; } .left-box-inner-circle { text-align: center; width: 100%; height: 100%; // background: #0674f11a; // border: 1px solid #0674f14d; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border-radius: 50%; .name-box { width: 100%; // height: 91px; position: absolute; z-index: 100; top: 50%; left: 50%; transform: translate(-50%, -50%); } .name { color: #ffffffe6; text-align: center; line-height: 20px; } .num { font-family: DINAlternate-Bold; font-size: 28px; color: #ffffffe6; letter-spacing: -0.5px; text-align: center; } .unit { padding-left: 6px; color: #ffffffe6; text-align: center; } } .left-box-inner-circle02 { // width: 65px; // height: 65px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border-radius: 50%; // background-image: linear-gradient(225deg, #021326 0%, #001E40 100%); } } </style>

图四:

<template> <div class="pie04"> <div class="chart-div"> <div class="wrap-box" :style="{ height: '100%', width: boxHeight + 'px', transform: `translateX(${option.pieX}px)`, }" > <div class="go-pie04-container"> <div class="left-box-circle"> <div class="left-box-inner-circle"> <div class="left-box-inner-circle02"></div> </div> </div> </div> <div class="name-box"> <div :style="`transform:translateY(${option.centerTextTranslateY}px)`" > <div class="name">{{ option.centerText }}</div> <div class="num"> {{ option.total }}<span class="unit" :style="{ color: option.unitFontColor, 'font-size': '14px' }" >{{ option.totalUnit }}</span > </div> </div> </div> <!-- echarts --> <div class="chart-box" :class="option.legend.show ? '' : 'chart-box-in-center'" > <v-chart ref="vChartRef" :option="option" style="width: 100%; height: 100%;"> </v-chart> </div> </div> <!-- 右侧的图例 --> <div class="right-legend" :style="{ width: `calc(100% - ${boxHeight} - ${option.legendPieMar}px)`, 'margin-left': boxHeight + option.legendPieMar + 'px', 'padding-top': (option.paddingTop || 0) + 'px', }" > <div class="right-legend-inner-box"> <div v-for="(item, index) in chartData" :key="index" class="legend-item" :style="{ 'margin-bottom': '12px', }" > <!-- 左边名称 --> <div class="group-box left-width" :style="{ width: '100px', }" > <div class="icon"> <svg t="1698804237191" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7180" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" > <path d="M505.408 320a638.72 638.72 0 0 1 496.896 236.608l-192.832 156.544A637.248 637.248 0 0 0 512 640c-106.752 0-207.36 26.112-295.872 72.32L19.2 543.808A638.592 638.592 0 0 1 505.408 320z" p-id="7181" :fill="option.color[index].colorStops[0].color" ></path> </svg> </div> <div class="name" :style="{ 'margin-left': '4.64px', }" > {{ item.name }} </div> </div> <!-- 右边数据 --> <div class="group-box right-width"> <div class="value" :style="{ color: option.color[index].colorStops[0].color }" > {{ item.value }}{{ option.totalUnit }} </div> <div class="zb" :style="{ color: '#ffffff', }" > ({{ item.zb }}) </div> </div> </div> </div> </div> </div> </div> </template> <script setup lang="ts"> import { ref, reactive } from "vue"; import VChart from "vue-echarts"; import { use } from "echarts/core"; import { CanvasRenderer } from "echarts/renderers"; import { PieChart } from "echarts/charts"; import { GaugeChart } from "echarts/charts"; import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent, } from "echarts/components"; use([ DatasetComponent, CanvasRenderer, PieChart, GaugeChart, GridComponent, TooltipComponent, LegendComponent, ]); const vChartRef = ref(); let boxWidth = 0; let boxHeight = 240; const chartData = ref([ { value: "104", name: "填埋", zb: "20%" }, { value: "73", name: "焚烧", zb: "20%" }, { value: "58", name: "生化", zb: "20%" }, { value: "48", name: "回收利用", zb: "20%" }, ]); // 基础颜色数组 const baseColors = [ "#0674f1", "#029cd4", "#2ba471", "#f5ba18", "#e37318", "#D54941", "#E851B3", "#8E56DD", "#9C27B0", "#607D8B", "#FF9800", "#9E9E9E", "#795548", "#FFEB3B", "#4CAF50", "#E91E63", "#3F51B5", "#2196F3", "#00BCD4", "#4CAF50", ]; // 动态生成颜色配置 const generateColors = (count: number) => { const colors = []; for (let i = 0; i < count; i++) { const color = baseColors[i % baseColors.length]; colors.push({ type: "linear", x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: color, // 0% 处的颜色 (30% 透明度) + "33" }, { offset: 1, color: color, // 100% 处的颜色 (完全不透明) + "ff" }, ], globalCoord: false, global: false, }); } return colors; }; const option = reactive({ // 标签显示信息 labelFormatInfo: "{b}: {c} | {d}%", // 是否显示中心文字 showCenterText: true, paddingTop: 0, // 是否显示标签 showLabel: false, // 中心文字 centerText: "考核断面(个)", // 总数单位 totalUnit: "", unitFontSize: 28, unitFontColor: "#ffffffe6", legendPieMar: 24, showLegendValue: true, centerTextTranslateY: 0, pieX: 0, showAutoZb: true, total: 283, // 刻度表大小 gaugeWidth: "75%", // 圆圈1的大小 circle01Width1: "50px", // 圆圈2的大小 circle01Width2: "35px", color: generateColors(chartData.value.length), tooltip: { // 添加tooltip配置 trigger: 'item', backgroundColor: 'rgba(0, 0, 0, 0.8)', borderColor: '#0674F1', borderWidth: 1, textStyle: { color: '#fff', fontSize: 14 }, // formatter: (params: any) => { //展示格式 // return `${params.name}: ${params.value}${option.totalUnit}<br/>${params.percent}%`; // } }, legend: { show: false, orient: "vertical", top: 32, left: 264, icon: "path://M512 256c152.064-0.213333 297.941333 61.504 405.333333 171.477333L512 841.472 106.666667 427.477333C214.058667 317.504 359.936 255.786667 512 256z", itemGap: 24, itemWidth: 23, itemHeight: 12, textStyle: { color: "#FFFFFF", fontWeight: 700, fontFamily: "AlibabaPuHuiTi_2_85_Bold", fontSize: 12, lineHeight: 16, }, }, series: [ { name: "刻度环", type: "gauge", radius: "95%", left: "0%", top: "0%", center: ["50%", "50%"], startAngle: 0, endAngle: 360, splitNumber: 12, axisLine: { show: false, }, axisTick: { show: true, lineStyle: { color: "#0674F1", width: 1, opacity: 0.2, }, length: 15, }, splitLine: { show: false, }, axisLabel: { show: false, }, detail: { show: false, }, }, { name: "", type: "pie", left: "0%", top: "0%", center: ["50%", "50%"], radius: ["70%", "90%"], avoidLabelOverlap: true, label: { // 修改标签配置,移除外部标签 show: false, // 设置为false以移除外部标签 position: 'center', // 可选:将标签显示在中心 color: "#ffffff", fontSize: 14, fontWeight: 700, lineHeight: 16, fontFamily: "AlibabaPuHuiTi_2_85_Bold", formatter: "{d}%", // 显示百分比 }, labelLine: { // 引线 show: false, // 设置为false以移除引线 }, emphasis: { disabled: false, // 启用高亮效果 scale: true, // 启用缩放效果 scaleSize: 5, // 缩放大小 label: { show: false, // 高亮时显示标签 position: 'center', // 标签位置在中心 formatter: '{b}\n{d}%', // 显示名称和百分比 fontSize: 16, fontWeight: 'bold', color: '#fff' }, }, data: chartData.value, }, ], }); </script> <style lang="scss" scoped> .pie04 { background-color: #000; width: 100%; height: 100%; position: relative; .chart-div { width: 100%; height: 100%; position: relative; } .wrap-box { position: absolute; top: 0px; left: 0px; } .name-box { width: 82%; // height: 62px; position: absolute; // z-index: 100; top: 50%; left: 50%; transform: translate(-50%, -50%); } .name { padding: 0 13px; color: #ffffffe6; text-align: center; line-height: 16px; } .num { font-family: DINAlternate-Bold; font-size: 28px; color: #ffffffe6; letter-spacing: -0.5px; text-align: center; } .unit { display: inline-block; padding-left: 6px; color: #ffffffe6; text-align: center; transform: translateY(-2px); } .chart-box { width: calc(100% + 20px); height: calc(100% + 20px); // height: 240px; // height: 100%; position: absolute; top: 50%; left: 0px; transform: translateY(-50%); z-index: 1; } .chart-box-in-center { top: 50%; left: 50%; transform: translate(-50%, -50%); } .go-pie04-container { width: 100%; height: 100%; overflow: hidden; display: flex; flex-direction: row; justify-content: center; align-items: center; } .right-legend { height: 100%; width: 240px; margin-left: 40px; overflow-y: auto; .right-legend-inner-box { width: 100%; // height: 100%; display: flex; flex-direction: column; justify-content: center; } .legend-item:last-child { margin-bottom: 0px !important; } .legend-item { width: 100%; display: flex; flex-direction: row; flex-wrap: nowrap; justify-content: space-between; align-items: center; .left-width { width: 100px; } .group-box { display: flex; flex-direction: row; justify-content: flex-start; align-items: center; } .icon { width: 20px; height: 20px; } .name { margin-left: 4.64px; // width: 80px; text-align: left; font-family: AlibabaPuHuiTi_2_85_Bold; color: #ffffff; letter-spacing: -0.25px; line-height: 16px; } .value { // width: 39px; height: 20px; font-size: 16px; letter-spacing: -0.25px; line-height: 20px; text-align: right; } .zb { width: 73px; text-align: left; color: #ffffff; font-size: 16px; line-height: 20px; letter-spacing: -0.25px; } } } .right-legend-item-box { width: 100%; margin-bottom: 24px; display: flex; flex-direction: row; justify-content: flex-start; align-items: center; .icon { width: 12px; height: 12px; margin-left: 5px; margin-right: 10px; // border: 1px solid rgba(6, 116, 241, 1); border-radius: 0px 0px 0px 12px; transform: rotate(135deg); } .legend-item { font-size: 12px; color: #ffffff; letter-spacing: -0.5px; line-height: 16px; position: relative; top: 2px; } } .left-box-circle { width: 240px; height: 240px; // border-radius: 50%; // border: 1px solid rgba(6, 116, 241, 0.2); position: relative; } .left-box-inner-circle { text-align: center; width: 62px; height: 62px; background: #0674f11a; border: 1px solid #0674f14d; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border-radius: 50%; } .left-box-inner-circle02 { width: 42px; height: 42px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border-radius: 50%; background-image: linear-gradient(225deg, #021326 0%, #001e40 100%); } } </style>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 23:16:40

网盘下载加速终极指南:告别龟速下载的完整解决方案

网盘下载加速终极指南&#xff1a;告别龟速下载的完整解决方案 【免费下载链接】baiduyun 油猴脚本 - 一个免费开源的网盘下载助手 项目地址: https://gitcode.com/gh_mirrors/ba/baiduyun 在数字资源日益丰富的今天&#xff0c;网盘下载速度却成为困扰无数用户的"…

作者头像 李华
网站建设 2026/4/13 3:05:29

B站视频转文字终极教程:3分钟实现高效内容提取

B站视频转文字终极教程&#xff1a;3分钟实现高效内容提取 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为整理B站视频内容而烦恼吗&#xff1f;每次看…

作者头像 李华
网站建设 2026/4/10 22:30:29

Windows CMD与Miniconda-Python3.11命令行交互技巧

Windows CMD与Miniconda-Python3.11命令行交互技巧 在数据科学、AI研发和自动化脚本开发中&#xff0c;一个常见的痛点是&#xff1a;“为什么代码在我机器上能跑&#xff0c;在别人电脑上就报错&#xff1f;” 答案往往指向环境差异——Python版本不一致、依赖包冲突、CUDA驱动…

作者头像 李华
网站建设 2026/4/1 20:42:42

Proteus 8.13安装环境准备:系统要求通俗解释

Proteus 8.13 安装前必看&#xff1a;你的电脑达标了吗&#xff1f;一文讲透系统要求背后的“坑”你是不是也遇到过这种情况——兴致勃勃下载了 Proteus 8.13&#xff0c;双击安装包却弹出错误提示&#xff1b;或者勉强装上了&#xff0c;一打开就闪退、仿真卡得像幻灯片&#…

作者头像 李华
网站建设 2026/4/14 6:30:22

Pyenv uninstall删除无用Python版本释放磁盘空间

Pyenv uninstall删除无用Python版本释放磁盘空间 在人工智能与数据科学项目日益复杂的今天&#xff0c;开发者的本地环境常常变成“版本坟场”&#xff1a;为了适配不同框架的兼容性要求&#xff0c;我们安装了 Python 3.7、3.8、3.9、3.10、3.11 甚至多个 Miniconda 发行版。几…

作者头像 李华
网站建设 2026/4/13 10:25:43

OpenMV一文说清:传感器分辨率设置技巧

OpenMV分辨率实战指南&#xff1a;如何让小身材拍出大智慧&#xff1f;你有没有遇到过这种情况——用OpenMV做二维码识别&#xff0c;离远一点就扫不出来&#xff1b;想追踪一个快速移动的小球&#xff0c;画面却卡得像幻灯片&#xff1b;明明代码写得没错&#xff0c;但系统跑…

作者头像 李华