CSS 实现六边形柱状图

前言

👏CSS 实现六边形柱状图 速速来Get吧~

🥇文末分享源代码。记得点赞+关注+收藏!

1.实现效果

在这里插入图片描述

2.实现步骤

  • 定义全局css变量,柱状宽度为–w,最大高度为–h,柱形整体为渐变色,定义上部分颜色为 --bar-shape,下部分颜色为 --bar-bg
:root{
	/* 柱形宽度-全局 */
	 --w: 45px;
	 /* 柱形高度最大值 */
	 --h: 300px;
	 /* 柱形上部分颜色 */
	 --bar-shape: rgba(186, 210, 226, 0.9);
	/* 柱形下部分颜色 */
	 --bar-bg: #f083b6;
}
  • 根据定义的变量,绘制一个矩形

在这里插入图片描述

<div class="bar">
	<span></span>
</div>
.bar{
	position: relative;
	width: var(--w);
	height: var(--height);
	background: linear-gradient(to top, var(--bar-bg), var(--bar-shape));
}
  • 定义柱状顶部和底部的六边形颜色,顶部颜色为 --bar-top,底部颜色为 --bar-bg
:root{
	/* 柱形顶部六边形颜色 */
   --bar-top: rgb(186, 210, 226);
   /* 柱形下部分颜色+柱形底部六边形 */
    --bar-bg: #f083b6;
}
  • 用clip-path裁剪出六边形,定义clip-path裁剪变量–path
:root{
	/* clip-path裁剪六边形 */
    --path: polygon(75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%, 25% 0);
}

clip-path:clip-path CSS 属性使用裁剪方式创建元素的可显示区域。区域内的部分显示,区域外的隐藏。

在这里插入图片描述

  • 这里我们使用clip-path在线网站,在线拖拽出我们想要的形状

在这里插入图片描述

  • 为该矩形添加前后伪元素,宽度为–w,高度为宽度的40%,用clip-path实现六边形
.bar::before,
.bar::after {
  content: "";
  position: absolute;
  width: var(--w);
  height: calc(var(--w) / 2.5);
  clip-path: var(--path);
  left: 0;
}
  • 设置前伪元素的背景色,top为0,层级为2,置于最上方

在这里插入图片描述

.bar::before {
	 background: var(--bar-top);
	  top: 0;
	  /* 层级置于最上层 */
	  z-index: 2;
	  transform: translateY(-50%);
 }
  • 设置后伪元素的背景色,bottom为0,层级为-1,置于最下方

在这里插入图片描述

.bar::after {
	 background: var(--bar-bg);
	 bottom: 0;
	 /* 层级置于最下层 */
	 z-index: -1;
	 transform: translateY(50%);
}
  • 用box-shadow给该矩形添加阴影区域,宽度为–w的二分之一,高度设置为101%(保留1%的高度余出),设置absolute定位,bottom设置为底边六边形高度的二分之一,水平居中

在这里插入图片描述

<div class="bar">
	+ <span></span>
</div>

box-shadow:CSS box-shadow 属性用于在元素的框架上添加阴影效果。你可以在同一个元素上设置多个阴影效果,并用逗号将他们分隔开。该属性可设置的值包括阴影的 X 轴偏移量、Y 轴偏移量、模糊半径、扩散半径和颜色。

在这里插入图片描述

  • 添加box-shadow

在这里插入图片描述

.bar span {
	 position: absolute;
    --d: calc(var(--w) / 2);
    --b: calc(var(--w) / -2.5 / 2);
    width: var(--d);
    height: 101%;
    left: calc(50% - var(--d) / 2);
    bottom: var(--b);
    box-shadow: 0px -5px 5px var(--bar-line);
}
  • 设置hover事件,并添加过渡效果

在这里插入图片描述

.bar:hover {
	height: 100%;
}

.bar {
	+ transition: all 1s;
}
  • 定义多个元素,为其设置不同的高度,宽度(颜色小伙伴们 可以自行调试哈),就完成啦

在这里插入图片描述

3.实现代码

<style>
 :root {
   /* 柱形上部分颜色 */
   --bar-shape: rgba(186, 210, 226, 0.9);
   /* 柱形顶部六边形颜色 */
   --bar-top: rgb(186, 210, 226);
   /* 柱形下部分颜色+柱形底部六边形 */
   --bar-bg: #f083b6;
   /* 柱形线条颜色 */
   --bar-line: rgba(0, 0, 0, 0.2);
   /* clip-path裁剪六边形 */
   --path: polygon(75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%, 25% 0);
   /* 柱形宽度-全局 */
   --w: 45px;
   /* 柱形高度最大值 */
   --h: 300px;
 }
 section {
   /* flex布局 */
   display: flex;
   align-items: flex-end;
   height: var(--h);
 }
 .bar {
   position: relative;
   width: var(--w);
   height: var(--height);
   margin-right: 20px;
   background: linear-gradient(to top, var(--bar-bg), var(--bar-shape));
   transition: all 1s;
 }
 .bar:hover {
   height: 100%;
 }
 .bar:last-child {
   margin-right: 0;
 }
 /* bar添加前后伪元素,设置为clip-path裁剪后的六边形 */
 .bar::before,
 .bar::after {
   content: "";
   position: absolute;
   width: var(--w);
   height: calc(var(--w) / 2.5);
   clip-path: var(--path);
   left: 0;
 }
 .bar::before {
   background: var(--bar-top);
   top: 0;
   /* 层级置于最上层 */
   z-index: 2;
   transform: translateY(-50%);
 }
 .bar::after {
   background: var(--bar-bg);
   bottom: 0;
   /* 层级置于最下层 */
   z-index: -1;
   transform: translateY(50%);
 }
 .bar span {
   position: absolute;
   --d: calc(var(--w) / 2);
   --b: calc(var(--w) / -2.5 / 2);
   width: var(--d);
   height: 101%;
   left: calc(50% - var(--d) / 2);
   bottom: var(--b);
   box-shadow: 0px -5px 5px var(--bar-line);
 }
</style>
<body>
 <section>
   <div class="bar" style="--height: 5%; --w: 25px">
     <span></span>
   </div>
   <div class="bar" style="--height: 60%">
     <span></span>
   </div>
   <div class="bar" style="--height: 30%; --w: 50px">
     <span></span>
   </div>
   <div class="bar" style="--height: 60%; --w: 60px">
     <span></span>
   </div>
   <div class="bar" style="--height: 30%; --w: 30px">
     <span></span>
   </div>
   <div class="bar" style="--height: 80%; --w: 35px">
     <span></span>
   </div>
   <div class="bar" style="--height: 10%; --w: 45px">
     <span></span>
   </div>
 </section>
</body>

4.写在最后🍒

看完本文如果觉得对你有一丢丢帮助,记得点赞+关注+收藏鸭 🍕
更多相关内容,关注🍥苏苏的bug,🍡苏苏的github,🍪苏苏的码云~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/2316.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL注入秘籍【绕过篇】

MySQL注入秘籍【绕过篇】1.通用方法2.绕过空格3.绕过引号4.绕过逗号,5.绕过等号6.绕过and/or7.绕过注释符8.绕过函数检测1.通用方法 编码 编码无非就是hex、url等等编码&#xff0c;让传到数据库的数据能够解析的即可&#xff0c;比如URL编码一般在传给业务的时候就会自动解码…

【Java Spring基本问题】记录面试题宝典中自己不熟悉的Spring问题

文章目录Spring Bean定义装配Spring Bean生命周期Spring Bean容器Spring 循环依赖Spring 事务Autowired和ResourceSpring Bean定义装配 参考文章 1. 定义Spring Bean的三种方式 XML文件定义Spring Bean JavaConfig定义Spring Bean Component注解定义SpringBean 2. 装配Spri…

Java现在好找工作吗?

Java到2023年已经28岁了&#xff0c;可能你会怀疑它是否还一如当年一样的强大&#xff0c;在应用层领域独占鳌头。但是基于Java庞大的市场占有率和需求&#xff0c;它依然在保持着更新迭代&#xff0c;依然是最常用的底层开发语言&#xff0c;基于其安全性、开放性、稳定性和跨…

C语言运算符和表达式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、运算符1.算术运算符加()、减(-)、乘(*)、除(/)、取余(%)自增()、自减(–)2.关系运算符3.逻辑运算符4.运算符优先级二、表达式总结前言 本篇文章将带大家学习…

python基于XGBoost开发构建海上船舶航行轨迹多变量序列预测分析模型

在船舶航行状态评估、船舶碰撞概率检测等场景种有着对海面船舶航行轨迹较高的预测需求&#xff0c;准确实时地对航行轨迹进行预测分析有助于评估船舶航行的状态&#xff0c;及时对可能存在的潜在威胁进行发现预警处理&#xff0c;航行轨迹预测本质上来讲就是时间序列建模&#…

一个比较全面的C#公共帮助类

上次跟大家推荐过2个C#开发工具箱&#xff1a;《推荐一个不到2MB的C#开发工具箱&#xff0c;集成了上千个常用操作类》、《推荐一个.Net常用代码集合&#xff0c;助你高效完成业务》。 今天再给大家推荐一个&#xff0c;这几个部分代码功能有重合的部分&#xff0c;大家可以根…

【网络安全工程师】从零基础到进阶,看这一篇就够了

学前感言 1.这是一条需要坚持的道路&#xff0c;如果你只有三分钟的热情那么可以放弃往下看了。 2.多练多想&#xff0c;不要离开了教程什么都不会&#xff0c;最好看完教程自己独立完成技术方面的开发。 3.有问题多google,baidu…我们往往都遇不到好心的大神&#xff0c;谁…

【数据结构与算法】用栈实现队列

文章目录&#x1f63b;前言如何用栈实现队列&#xff1f;用栈实现队列整体的实现代码&#x1f63c;写在最后&#x1f63b;前言 &#x1f61d;上一章我们用队列实现了一个栈&#xff08;-> 传送门 <-&#xff09;&#xff0c;而这一章就带大家用栈实现一个队列。 &#x1…

STM32学习(五)

GPIO General Purpose Input Output&#xff0c;通用输入输出端口&#xff0c;简称GPIO。 作用&#xff1a; 采集外部器件的信息&#xff08;输入&#xff09;控制外部器件的工作&#xff08;输出&#xff09; GPIO特点 1&#xff0c;不同型号&#xff0c;IO口数量可能不一样…

SpringBoot基础教程

springboot基础 一、springboot介绍 Spring Boot 提供一种快速使用spring的方式&#xff0c;基于约定大于配置的思想&#xff0c;可以让开发者不必在配置与逻辑业务中来回进行思维切换&#xff0c;全身心的投入到业务的代码编写中&#xff0c;从而大大提高了开发效率。2014年…

数据结构——栈和队列(2)

作者&#xff1a;几冬雪来 时间&#xff1a;2023年3月22日 内容&#xff1a;数据结构栈和队列知识讲解 目录 前言&#xff1a; 1.队列的概念及构成&#xff1a; 2.队列的插入和删除操作&#xff1a; 3.队列的实现&#xff1a; 1.创建文件&#xff1a; 2.定义结构体&…

基于SpringBoot的学生成绩管理系统

本系统使用SpringBoot进行开发&#xff0c;供大家参考。 开发工具可以选用Eclipse或者IDEA 数据库使用Mysql。 需要相关安装的可以看我之前的文章或者私信我。 简介 现今&#xff0c;越来越多的人乐于选择一项合适的管理方案&#xff0c;但是普通用户往往受到管理经验地限…

第十四届蓝桥杯三月真题刷题训练——第 18 天

目录 第 1 题&#xff1a;排列字母 问题描述 运行限制 代码&#xff1a; 第 2 题&#xff1a;GCD_数论 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 第 3 题&#xff1a;选数异或 第 4 题&#xff1a;背包与魔法 第 1 题&#x…

记录一次很坑的报错:java.lang.Exception: The class is not public.

文章目录1、Docker中运行的服务2、遇到问题第一个问题是项目直接启动失败&#xff1f;第二个问题是项目启动后获取不到注入的bean&#xff1f;第三个问题就是测试单元的引入问题&#xff1f;第四个问题就是公共类和方法&#xff1f;3、这里是完整的代码部分&#xff08;正确&am…

【沐风老师】3DMAX交通流插件TrafficFlow使用方法详解

TrafficFlow交通流插件&#xff0c;模拟生成车流、人流动画。 【版本要求】 3dMax 2008及更高版本 【安装方法】 无需安装直接拖动插件脚本文件到3dMax视口中打开。 【快速开始】 1.创建车辆对象和行车路径。 2.打开TrafficFlow插件&#xff0c;先选择“车辆”对象&#xff0…

albedo开源框架配置多数据源

前言&#xff1a;公司框架项目一直都没认真阅读过&#xff0c;最近项目需要连接oracle数据&#xff0c;所以尝试使用框架连接多数据库。添加多数据源插件&#xff1a;我们在项目的插件模块内添加多数据源插件&#xff1a;albedo-dynamic-datasource<?xml version"1.0&…

乐观锁和悲观锁 面试题

Mysql的乐观锁和悲观锁 实现方式加锁时机常见的调用方式优势不足适用场景乐观锁开发自定义更新数据的时候sql语句中进行version的判断高并发容易出现不一致的问题高并发读&#xff0c;少写悲观锁Mysql内置查询数据的开始select * for update保证一致性低并发互联网高并发场景极…

通过DNS数据包解释DNS协议各个字段含义

通常来说&#xff0c;想要对DNS最为权威和全面的定义见RFC文档&#xff0c;这里。但是本文不是一篇面面俱到的DNS说明文档&#xff0c;是从使用示例出发&#xff0c;使用wireshark对于一个具体的DNS请求进行分析和呈现&#xff0c;并介绍DNS中最常见的一些字段的含义。 域名的…

流量分析-Wireshark -操作手册(不能说最全,只能说更全)

流量分析-Wireshark -操作手册&#xff08;不能说最全&#xff0c;只能说更全&#xff09;基于各种比赛做的总解基于协议过滤⼿法&#x1f44d; 常用筛选命令方法 常⽤快捷键&#x1f44d; 数据包筛选 等等流量分析简介 ⽹络流量分析是指捕捉⽹络中流动的数据包&#xff0c;并通…

Golang每日一练(leetDay0012)

目录 34. 查找元素首末位置 Find-first-and-last-position-of-element-in-sorted-array &#x1f31f;&#x1f31f; 35. 搜索插入位置 Search Insert Position &#x1f31f; 36. 有效的数独 Valid Sudoku &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 …
最新文章