CSS 实现六边形柱状图 速速来Get吧~
文末分享源代码。记得点赞+关注+收藏!
: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));
}
:root{
/* 柱形顶部六边形颜色 */
--bar-top: rgb(186, 210, 226);
/* 柱形下部分颜色+柱形底部六边形 */
--bar-bg: #f083b6;
}
:root{
/* clip-path裁剪六边形 */
--path: polygon(75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%, 25% 0);
}
clip-path:clip-path CSS 属性使用裁剪方式创建元素的可显示区域。区域内的部分显示,区域外的隐藏。
.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%);
}
<div class="bar">
+ <span></span>
</div>
box-shadow:CSS box-shadow 属性用于在元素的框架上添加阴影效果。你可以在同一个元素上设置多个阴影效果,并用逗号将他们分隔开。该属性可设置的值包括阴影的 X 轴偏移量、Y 轴偏移量、模糊半径、扩散半径和颜色。
.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);
}
.bar:hover {
height: 100%;
}
.bar {
+ transition: all 1s;
}
<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>