首页 > 其他分享 >简单易用的蜂巢布局,纯CSS实现

简单易用的蜂巢布局,纯CSS实现

时间:2024-08-08 18:17:12浏览次数:9  
标签:蜂巢 gap 易用 grid 10px 蜂窝 六边形 CSS

本文将用grid布局实现蜂巢(正六边形)状的布局

效果图

  • 特点
    • 列数确定可控
    • 边距确定可控
    • 交错排列
    • CSS实现

image-20240523175541914

实现步骤

所谓蜂巢,即多个正六边形交错排列而成

第一步

首先,我们知道在正常情况下,CSS布局是难以实现这种不同行之间相互堆叠同时列交错排布的效果,所以我们需要一种取巧的方法

如果单纯地排列蜂窝状的不规则盒,仅用CSS很难实现,所以我们可以把它抽象为一个矩形,用CSS排列矩形盒就很容易了,用最基础的grid布局即可实现,但单纯的grid布局并不能实现交错排列效果,我们需要实现大致如下的效果:

image-20240523212445537

由于是正六边形,故边距是固定可计算的

假设设置各蜂窝边距为10px,那么:

列边距column-gap10px

行边距row-gap:六边形边长一半(sin30°) + 10px

第二步

接下来就需要解决交错问题了,对与grid而言,单个交错的网格是实现不了的,但我们可以让子项占据多格,如一个蜂窝占据2格,以此实现交错效果

image-20240523214215052

由于每个蜂窝均占据两格,故边距也占据了两份,如不调整,列边距会是行边距的两倍,会给人错位的感觉,故需对计算公式做一些调整

假设设置各蜂窝边距为10px,那么:

列边距column-gap5px

行边距row-gap:六边形边长一半(sin30°) + 10px

列边距为原来的一半,行边距不变

最终实现效果图如下

image-20240523215226295

第三步

为了实现行与行之间交错效果,需要对偶数行进行一些处理,让每一个偶数行第一个蜂窝占据3

可用子选择器:nth-child()实现

使用grid布局,列数量是可以固定的,假设这里为12格,即可容纳6个蜂窝,即x = 6

那么每偶数行的第一个蜂窝为:\(\chi (n + 1) + (\chi - 1)n + 1\)

完整代码

  • HTML结构
<!-- 蜂巢布局 -->
<div class="honeycomb-list">
  <div class="honeycomb-item">
    <div class="honeycomb-item-inner">
      <!-- 蜂窝内容,正常布局即可 -->
    </div>
  </div>
  <div class="honeycomb-item">
    <div class="honeycomb-item-inner"></div>
  </div>
  <!-- 若干项 -->
</div>
  • CSS样式
/* 蜂巢布局 */
.honeycomb-list {
  display: grid;
  /* 定义 12 格,即每列最多容纳 6 个蜂窝 */
  /* 单格宽等于边长乘二分之根号三 */
  grid-template-columns: repeat(12, 3.47em);
  /* 定义 em 参考 */
  font-size: 12px;
  row-gap: calc(2em + 10px);
  column-gap: 5px;
}
.honeycomb-item {
  position: relative;
  width: 6.94em;
  /* 正六边形边长为 4em */
  height: 4em;
  /* 普通项每项占据两格 */
  grid-column-end: span 2;
}
/* 定义 x 为 grid 列数的一半 */
/* x(n+1)+(x-1)n+1 */
/* (2*x-1)n+x+1 */
.honeycomb-item:nth-child(11n+7) {
  /* 偶数行第一个,占据三格 */
  grid-column-end: span 3;
  /* 设置左边距,使其靠右 */
  margin-left: calc(3.47em + 5px);
}
.honeycomb-item-inner {
  position: absolute;
  top: -2em;
  left: 0;
  width: 6.94em;
  height: 8em;
  /* 使用剪切路径,使其展现蜂窝状 */
  clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
  background-color: #83ccd2;
}

标签:蜂巢,gap,易用,grid,10px,蜂窝,六边形,CSS
From: https://www.cnblogs.com/skmcj/p/18349485

相关文章

  • 【CSS入门】第二课 - margin外边距
    这一小节,我们说一下margin外边距。怎么理解这个外边距呢,比如小张和小丽站在一起,紧紧排着站。试想一下,如果他俩冬天都穿着羽绒服和夏天穿着短袖,是不是占据的空间会不一样呢。那么回到HTML网页开发商来说,如果两个元素,他们加一些外边距,占的空间也会不一样,而且会使两个元素的距离也......
  • 一个简单的HTML网页 、个人主页网页设计(HTML+CSS)
     一、......
  • html+css 实现hover边框2边生长按钮
    前言:哈喽,大家好,今天给大家分享html+css绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • 09HTML+CSS
    完成小兔鲜儿商城界面1<!DOCTYPEhtml>2<htmllang="en">34<head>5<metacharset="UTF-8">6<metaname="viewport"content="width=device-width,initial-scale=1.0">7......
  • 10HTML+CSS
    平面转换平面转换transform,作用:为元素添加动态效果,一般与过渡配合使用⚫概念:改变盒子在平面内的形态(位移、旋转、缩放、倾斜)⚫平面转换又叫2D转换。属性⚫取值◆像素单位数值◆百分比(参照盒子自身尺寸计算结果)◆正负均可⚫技巧◆translate()只写一个值,表示......
  • HTML5+CSS3笔记(Xmind格式):第四天
    Xmind鸟瞰图:简单文字总结:HTML5+CSS3知识总结:媒体查询:  1.媒体查询格式:@media设备类型and设备特性  2.screen:设置屏幕  3.max-width(最大宽度),min-width(最小宽度)  4.可以通过媒体查询引入不同的css样式移动端布局方式:  1.静态布局  2.......
  • HTML5+CSS3笔记(Xmind格式):第三天
    Xmind鸟瞰图:简单文字总结:过渡transition:过渡属性过渡时间运动曲线何时开始 2D变形transform:  1.平移:translate(单位px)  2.缩放:scale(默认1,大于1放大,小于1缩小)  3.旋转:rotate(单位deg)  4.倾斜:skew(单位deg)3D变形transform:  1.rotateX......
  • HTML5+CSS3笔记(Xmind格式):第二天
    Xmind鸟瞰图:简单文字总结:新增选择器:  1.选择相邻兄弟  2.属性选择器  3.结构性伪类选择器  4.整体结构类型  5.标签结构类型  6.指定子元素的序号  7.文本选择伪元素  8.表单中使用的状态伪类选择器  9.内容追加伪元素  ......
  • 涨冷门知识之CSS魔法:边距合并
    后端同学问了一个问题:“为什么背景色没有充满?”F12,inspect,哎嗨,p标签存在默认边距源码如下:点击查看代码<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,i......
  • CSS3第一天(基础选择器+复合选择器)
    1.选择器基础选择器:标签选择器(某一类标签)、类选择器(一个或几个标签,最常用)、id选择器和通配符选择器标签名{属性1:属性值1;属性2:属性值2;...}类选择器(可以多个标签使用).类名{属性1:属性值1;...}<ul><liclass="red">大雨</li></ul>类名长的,可以用短横线分割,最......