You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSS实现竖尖六边形网格时部分单元格溢出容器问题求助

仅用CSS实现竖尖六边形网格时,最后几个单元格溢出容器的问题

我正尝试仅使用CSS实现竖尖六边形网格,参考了一篇CSS技巧类文章。实现方案是用一个block容器,内部以inline-block子元素作为网格单元格。有时显示正常,但偶尔最后几个单元格会溢出父容器,经过数小时排查仍不清楚原因。

正常效果:
正常六边形网格效果

异常效果:
六边形网格溢出容器的异常效果

我尝试过box-sizing、flex-basis、height、min-height、margin、padding、overflow等多种属性组合,但都无法解决问题。已在两台设备的Chrome和Firefox浏览器中进行测试。我只希望容器元素的内容框能完全包裹其内容,部分子元素无法被容器包含的现象让我十分困惑。

代码实现

CSS代码

/* global.css */

:root {
  --color0: #393646;
  --color1: #4F4557;
  --color2: #6D5D6E;
  --color3: #F4EEE0;
  background-color: var(--color3);
}

* {
  font-family: Verdana, Helvetica, Arial, sans-serif;
  font-size: 1rem;
  color: var(--color0);
  border-color: var(--color1);
  border-radius: 4px;
  background-color: transparent;
  margin: 0px;
  padding: 8px;
}

body {
  position: absolute;
  top: 0px;
  left: 0px;
  right: 0px;
  bottom: 0px;
}

button, input[type=submit] {
  border: none;
  color: var(--color3);
  background-color: var(--color0);
  cursor: pointer;
}

fieldset {
  border-width: 1px;
}

legend {
  margin-left: 4px;
  padding: 0px 4px;
  line-height: 1px;
}

/* map.css */

body {
  display: flex;
  flex-flow: column nowrap;
  justify-content: center;
  align-items: stretch;
  padding: 0px;
}

.wrapper {
  flex-grow: 1;
  display: flex;
  flex-flow: column nowrap;
  justify-content: space-around;
  align-items: center;
  padding: 0px;
  overflow: auto;
}

.container {
  --hex-columns: 14;
  --hex-span: 50px;
  --hex-diameter: calc(1.1547 * var(--hex-span));
  --hex-triameter: calc(1.5 * var(--hex-diameter) - 0.2px);
  --hex-overlap: calc(-0.25 * var(--hex-diameter));
  flex-basis: max-content;
  display: block;
  padding: 0px;
  width: calc(var(--hex-columns) * var(--hex-span) + 0.2px);
  overflow: hidden; /* DEBUG, to show when content overflows */
  font-size: 0px;
  box-sizing: border-box;
}

.container::before {
  content: "";
  float: left;
  width: calc(var(--hex-span) / 2);
  height: 100%;
  shape-outside: repeating-linear-gradient(
    to bottom,
    transparent 0 calc(var(--hex-triameter) - 3px),
    black calc(var(--hex-triameter) - 3px) var(--hex-triameter)
  );
}

.container .hex {
  display: inline-block;
  margin: 0px;
  margin-bottom: var(--hex-overlap);
  padding: 0px;
  width: var(--hex-span);
  height: var(--hex-diameter);
  vertical-align: top;
  line-height: var(--hex-diameter);
  font-size: initial;
  box-sizing: border-box;
  clip-path: polygon(0% 25%, 0% 75%, 50% 100%, 100% 75%, 100% 25%, 50% 0%);
}

.container .hex:last-child {
  margin-bottom: 0px;
}

/* For debug: */

.container .hex:nth-child(4n + 1) {
  background-color: red;
}

.container .hex:nth-child(4n + 2) {
  background-color: tomato;
}

.container .hex:nth-child(4n + 3) {
  background-color: firebrick;
}

.container .hex:nth-child(4n + 4) {
  background-color: indianred;
}

HTML代码

<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Map</title>
    <link rel="stylesheet" href="/stylesheets/global.css" />
    <link rel="stylesheet" href="/stylesheets/map.css" />
  </head>
  <body>
    <div class="wrapper">
      <div class="container">
        <!-- Repeat a bunch of times -->
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
        <div class="hex"></div>
      </div>
    </div>
  </body>
</html>

内容的提问来源于stack exchange,提问作者Anon Ymus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:40:54