【css】3d柱状图-vue组件版

创建一个响应式圆柱形进度条组件

在现代网页设计中,圆柱形进度条是一种非常流行的视觉元素,用于展示数据的进度或状态。本文将介绍如何使用Vue.js和LESS创建一个响应式的圆柱形进度条组件。

组件结构

我们的组件由两部分组成:一个圆柱形的进度条和一个文本框。进度条部分由.lui-column-bg类定义,它包含一个.lui-inner类的子元素,用于显示实际的进度。文本框部分由.text-box类定义,用于显示标签和值。
在这里插入图片描述

样式设计

我们使用LESS来定义组件的样式,以提高代码的可维护性和可读性。.lui-column-bg类设置了进度条的基本尺寸和背景色,同时使用:before:after伪元素来创建圆柱形的顶部和底部。.lui-inner类定义了进度条的内部颜色和高度,使用linear-gradient来创建渐变效果。

我们还定义了三个类(.danger-class.warning-class.success-class),这些类根据进度条的高度变化而变化,以显示不同的状态。这些类通过修改背景色和伪元素的背景色来实现不同的视觉效果。

Vue.js逻辑

在Vue.js中,我们定义了Cylinder组件,它接收labelheight两个props。label用于显示文本框中的标签,而height用于控制进度条的高度。我们使用计算属性colorClass来根据height的值动态改变进度条的类,从而改变其颜色。

使用组件

要使用这个组件,你只需要在Vue.js项目中导入并注册它,然后在模板中像使用其他Vue组件一样使用它。例如:

<Cylinder label="完成率" :height="75" />

这将创建一个标签为“完成率”的圆柱形进度条,进度为75%。

组件代码

代码如下:

<template>
  <div class="lui-column-bg">
    <div
      class="lui-inner"
      :class="colorCLass"
      :style="{ height: height + '%' }"
    ></div>
    <div class="text-box">
      <p class="label">{{ label }}</p>
      <p class="value">{{ height ? height + "%" : "" }}</p>
    </div>
  </div>
</template>
<script>
export default {
  name: "Cylinder",
  props: {
    label: { type: String, default: "" },
    height: { type: Number, default: 50 } // 这个就是圆柱中的数据占比 +
  },
  data() {
    return {};
  },
  computed: {
    colorCLass() {
      if (this.height >= 80) {
        return "success-class";
      }
      if (this.height >= 30) {
        return "warning-class";
      }
      return "danger-class";
    }
  },
  mounted() {},
  methods: {}
};
</script>
<style lang="less" scoped>
.lui-column-bg {
  position: relative;
  width: 100px;
  height: 140px;
  margin: 0 auto;
  background-color: #d1d1d1;
  margin: 100px;
}
.lui-column-bg:before {
  position: absolute;
  content: "";
  display: block;
  height: 20px;
  width: 100%;
  border-radius: 50%;
  top: -10.5px;
  z-index: 1;
  background-color: #e8e8e8;
}
.lui-column-bg:after {
  position: absolute;
  content: "";
  display: block;
  height: 30px;
  width: 100%;
  border-radius: 50%;
  bottom: -15px;
  background-color: #e8e8e8;
}
.lui-inner {
  position: absolute;
  bottom: 0;
  width: 100%;
  height: 50%;
  background-image: linear-gradient(to top, rgb(0, 255, 204), rgb(0, 199, 159));
  background-color: #eaaa00;
  text-align: center;
}
.lui-inner::before {
  position: absolute;
  content: "";
  display: block;
  height: 20px;
  width: 100%;
  background-color: #eec967;
  border-radius: 50%;
  top: -10.5px;
  z-index: 1;
}
.lui-inner:after {
  position: absolute;
  z-index: 10;
  content: "";
  display: block;
  height: 30px;
  width: 100%;
  border-radius: 50%;
  background-color: #eaaa00;
  bottom: -14px;
}
.text-box {
  position: absolute;
  z-index: 20;
  font-size: 14px;
  top: 50%;
  text-align: center;
  width: 100%;
  .label {
    margin-bottom: 10px;
  }
  .value {
    color: #fff;
  }
}
.danger-class {
  background-color: #e1677a;
  &::before {
    background-color: #f294a0;
  }
  &::after {
    background-color: #e1677a;
  }
}
.success-class {
  background-color: #42b029;
  &::before {
    background-color: #86dd72;
  }
  &::after {
    background-color: #42b029;
  }
}
.warning-class {
  background-color: #eaaa00;
  &::before {
    background-color: #eec967;
  }
  &::after {
    background-color: #eaaa00;
  }
}
</style>

结论

通过结合Vue.js和LESS,我们可以轻松创建一个功能丰富且视觉吸引的圆柱形进度条组件。这个组件不仅响应式,而且易于定制和扩展,适用于各种不同的应用场景。希望这篇文章能帮助你在项目中实现类似的组件。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值