网上已经有很多关于正六边形的CSS画法,主要是利用一个矩形和前后的两个三角形组合而成。

之前在看四维图新的官网的时候,发现了一种六边形的画法,比较适合多排六边形组合成蜂窝状的展示区域(注:四维图新现在改成了上面说的那种画法了)。

1、HTML结构

<span class="hex"><span class="hexIn">1</span></span> <span class="hex"><span class="hexIn">2</span></span> <span class="hex"><span class="hexIn">3</span></span> <span class="hex"><span class="hexIn">4</span></span> <span class="hex"><span class="hexIn">5</span></span> <span class="hex"><span class="hexIn">6</span></span> <span class="hex"><span class="hexIn">7</span></span> <span class="hex"><span class="hexIn">8</span></span> <span class="hex"><span class="hexIn">9</span></span> <span class="hex"><span class="hexIn">10</span></span> <span class="hex"><span class="hexIn">11</span></span> <span class="hex"><span class="hexIn">12</span></span> <span class="hex"><span class="hexIn">13</span></span> <span class="hex"><span class="hexIn">14</span></span> <span class="hex"><span class="hexIn">15</span></span> <span class="hex"><span class="hexIn">16</span></span> <span class="hex"><span class="hexIn">17</span></span> <span class="hex"><span class="hexIn">18</span></span> <span class="hex"><span class="hexIn">19</span></span> <span class="hex"><span class="hexIn">20</span></span> </body>

每个li里包着.hex和.hexIn。.hexIn是内容区,.hex是一个菱形切割区,将.hexIn切割成六边形。具体看css。

2、CSS

margin: 0; padding: 0; list-style: none; width: 560px; margin: 100px auto; float: left; margin: 0 5px; height: 96px; .hex { overflow: hidden; display: block; width: 100px; height: 116px; transform: rotate(-60deg) skewY(30deg); .hexIn { background-color: #ccc; display: block; width: 100px; height: 116px; line-height: 116px; text-align: center; transform: skewY(-30deg) rotate(60deg); li:nth-child(9n + 6) { margin-left: 60px;

里面有几个关键的长度和宽度:

  • li的宽度,li的宽度由内部元素撑开。
  • li的高度,多排六边形的情况下,li的高度与排与排之间的间隙有关。
  • .hex的宽度,即六边形平行边之间的距离。
  • .hex的高度,六边形对应顶点间的距离。
  • .hexIn的高度和宽度同.hex。
  • .hexIn区域如图:

    .hex区域如图:

    li区域如图:

    根据以上的宽度和高度说明,以上数值都要满足一定的关系,直接说结论:

    假设需要平行边距离为w的六边形,每个六边形之间的间隔为m。

  • li的高度:0.866(w+m)
  • .hex的宽度:w,高度:1.155w
  • .hexIn同上
  • 如果第一排有x个六边形,那么为实现相邻两排交错排列的效果,需要设置:li:nth(`x + x - 1`n + `x + 1`) { margin-left: 0.5(x+2m) }。比如第一排有6个,那么li:nth(11n+7) { ... }.
  • 3、实现效果图

    原文链接:http://www.cnblogs.com/zczhangcui/p/10300090.html

    CSS热门文章

  • Element FORM结合Vue实现横向排列表单项
  • 如何让一个input输入框居中
  • vue+element导入导出excel
  • WEB前端动态背景集
  • js正则获取标签之间内容表达式怎么写?-附源码
  • 纯CSS实现的三种通知栏滚动效果_CSS教程_CSS
  • 详解如何解决position:fixed固定定位偏移问题_CSS教程_CSS
  • 纯CSS解决H5布局中的吸顶吸底的实现步骤_CSS教程_CSS
  • div添加cursor:pointer;失效问题。
  • css中的position属性值的探究(小结)_CSS教程_CSS
  • CSS推荐文章

  • 震惊!CSS 也能实现碰撞检测?
  • 前端开发如何更好的避免样式冲突?级联层(CSS@layer)
  • 现代 CSS 解决方案:CSS 原生支持的三角函数
  • 利用css var函数让你的组件样式输出规范样式API,可定制性更高;
  • 使用canvas制作炫酷黑客帝国数字雨背景html+css+js
  • 巧用 CSS 变量,实现动画函数复用,制作高级感拉满的网格动画
  • CSS 3 所有的选择器整理(2023.2)
  • CSS 奇思妙想之酷炫倒影
  • js+css实现飞机大战游戏
  • Vue+TailWindcss实现一个简单的闯关小游戏
  •