经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » CSS » 查看文章
CSS-蜂窝状展示区域(多个六边形)的一种实现方式
来源:cnblogs  作者:ZhangCui  时间:2019/1/22 9:32:49  对本文有异议

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

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

示意图:

1、HTML结构

  1. <body>
  2. <ul>
  3. <li>
  4. <span class="hex"><span class="hexIn">1</span></span>
  5. </li>
  6. <li>
  7. <span class="hex"><span class="hexIn">2</span></span>
  8. </li>
  9. <li>
  10. <span class="hex"><span class="hexIn">3</span></span>
  11. </li>
  12. <li>
  13. <span class="hex"><span class="hexIn">4</span></span>
  14. </li>
  15. <li>
  16. <span class="hex"><span class="hexIn">5</span></span>
  17. </li>
  18. <li>
  19. <span class="hex"><span class="hexIn">6</span></span>
  20. </li>
  21. <li>
  22. <span class="hex"><span class="hexIn">7</span></span>
  23. </li>
  24. <li>
  25. <span class="hex"><span class="hexIn">8</span></span>
  26. </li>
  27. <li>
  28. <span class="hex"><span class="hexIn">9</span></span>
  29. </li>
  30. <li>
  31. <span class="hex"><span class="hexIn">10</span></span>
  32. </li>
  33. <li>
  34. <span class="hex"><span class="hexIn">11</span></span>
  35. </li>
  36. <li>
  37. <span class="hex"><span class="hexIn">12</span></span>
  38. </li>
  39. <li>
  40. <span class="hex"><span class="hexIn">13</span></span>
  41. </li>
  42. <li>
  43. <span class="hex"><span class="hexIn">14</span></span>
  44. </li>
  45. <li>
  46. <span class="hex"><span class="hexIn">15</span></span>
  47. </li>
  48. <li>
  49. <span class="hex"><span class="hexIn">16</span></span>
  50. </li>
  51. <li>
  52. <span class="hex"><span class="hexIn">17</span></span>
  53. </li>
  54. <li>
  55. <span class="hex"><span class="hexIn">18</span></span>
  56. </li>
  57. <li>
  58. <span class="hex"><span class="hexIn">19</span></span>
  59. </li>
  60. <li>
  61. <span class="hex"><span class="hexIn">20</span></span>
  62. </li>
  63. </ul>
  64. </body>

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

2、CSS

  1. ul {
  2. margin: 0;
  3. padding: 0;
  4. }
  5. ul {
  6. list-style: none;
  7. width: 560px;
  8. margin: 100px auto;
  9. }
  10. li {
  11. float: left;
  12. margin: 0 5px;
  13. height: 96px;
  14. }
  15. .hex {
  16. overflow: hidden;
  17. display: block;
  18. width: 100px;
  19. height: 116px;
  20. transform: rotate(-60deg) skewY(30deg);
  21. }
  22. .hexIn {
  23. background-color: #ccc;
  24. display: block;
  25. width: 100px;
  26. height: 116px;
  27. line-height: 116px;
  28. text-align: center;
  29. transform: skewY(-30deg) rotate(60deg);
  30. }
  31. li:nth-child(9n + 6) {
  32. margin-left: 60px;
  33. }

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

  1. li的宽度,li的宽度由内部元素撑开。
  2. li的高度,多排六边形的情况下,li的高度与排与排之间的间隙有关。
  3. .hex的宽度,即六边形平行边之间的距离。
  4. .hex的高度,六边形对应顶点间的距离。
  5. .hexIn的高度和宽度同.hex。

.hexIn区域如图:

.hex区域如图:

li区域如图:

 

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

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

那么:

  1.  li的高度:0.866(w+m)
  2. .hex的宽度:w,高度:1.155w
  3. .hexIn同上
  4. 如果第一排有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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号