上一篇
使用CSS
clip-path 属性定义六边形路径,或通过伪元素旋转拼接各边,`
在HTML中实现六边形的绘制,主要依赖CSS样式、SVG矢量图形或Canvas绘图技术,以下是几种常用方法的详细实现步骤及原理分析:
CSS边框法(基础六边形)
利用CSS的border属性组合生成六边形,核心原理是通过旋转元素的6个边形成闭合路径。
步骤与代码示例:
- 创建容器元素
<div class="hexagon"></div>
- 设置CSS样式
.hexagon { width: 100px; / 六边形宽度 / height: 0; / 高度设为0,防止撑开空间 / border-left: 50px solid transparent; / 左边框长度 / border-right: 50px solid transparent; / 右边框长度 / border-top: 50px solid #3498db; / 顶部边框颜色 / border-bottom: 50px solid #3498db; / 底部边框颜色 / position: relative; / 便于后续定位 / }原理说明:
- 通过
border-left和border-right生成左右两个斜边,border-top和border-bottom生成上下两条直边。 transparent关键字使侧边边框隐形,仅保留颜色填充的顶部和底部边框,形成六边形轮廓。
- 通过
CSS伪元素法(复杂场景适配)
结合:before和:after伪元素,可构建更灵活的六边形结构。
代码示例:

<div class="hexagon-container"> <div class="hexagon"></div> </div>
.hexagon-container {
position: relative;
width: 120px; / 容器宽度 /
margin: 50px auto;
}
.hexagon {
width: 0;
height: 0;
border-left: 60px solid transparent;
border-right: 60px solid transparent;
border-top: 60px solid #e74c3c;
border-bottom: 60px solid #e74c3c;
position: absolute;
top: 0;
left: 0;
}
.hexagon:before, .hexagon:after {
content: "";
position: absolute;
width: 0;
height: 0;
border-left: 30px solid transparent;
border-right: 30px solid transparent;
border-top: 30px solid #e74c3c;
border-bottom: 30px solid #e74c3c;
top: -60px;
left: -30px;
}
.hexagon:after {
top: auto;
bottom: -60px;
}
优势:
- 通过伪元素补充缺失的角落,解决边框法可以直接进行内凹或多层六边形的问题。
- 适合需要叠加效果或动态动画的场景。
SVG路径绘制(高精度控制)
SVG的<path>标签可精确定义六边形路径,适合需要缩放或动画的场合。
代码示例:
<svg width="200" height="200">
<polygon points="100,10 40,198 190,78 10,78 160,198"
style="fill:#2ecc71;stroke:#fff;stroke-width:5px;"/>
</svg>
关键点:

points属性按顺序定义六个顶点坐标,需保证相邻点连接成边。- 可通过
transform属性旋转角度(如transform="rotate(30)")。 - 支持渐变填充(
fill="url(#gradient)")和交互事件绑定。
Canvas绘图(动态生成)
使用JavaScript在Canvas画布上绘制六边形,适合游戏或数据可视化场景。
代码示例:
<canvas id="hexCanvas" width="300" height="300"></canvas>
<script>
const canvas = document.getElementById('hexCanvas');
const ctx = canvas.getContext('2d');
function drawHexagon(x, y, size) {
ctx.beginPath();
for (let i = 0; i < 6; i++) {
const angle = Math.PI / 3 i; // 每个顶点间隔60度
const dx = x + size Math.cos(angle);
const dy = y + size Math.sin(angle);
if (i === 0) ctx.moveTo(dx, dy);
else ctx.lineTo(dx, dy);
}
ctx.closePath();
ctx.fillStyle = '#9b59b6';
ctx.fill();
ctx.strokeStyle = '#fff';
ctx.lineWidth = 3;
ctx.stroke();
}
drawHexagon(150, 150, 100); // 在画布中心绘制
</script>
特点:
- 数学计算精准,适合动态调整大小或位置。
- 可结合动画库(如Three.js)实现3D效果。
布局与响应式设计
水平排列多个六边形(蜂巢布局)
使用CSS Grid或Flexbox实现六边形的均匀分布。
示例代码:
.hex-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); / 自动适应列数 /
gap: 20px;
}
.hexagon {
justify-self: center; / 垂直居中 /
}
响应式尺寸调整
通过vw单位或媒体查询适配不同屏幕:

.hexagon {
width: 20vw; / 基于视口宽度 /
border-left: calc(20vw / 2) solid transparent;
/ 其他边框同理 /
}
FAQs
Q1:如何让六边形在不同屏幕尺寸下保持比例?
A1:使用CSS的calc()函数动态计算边框长度,或结合vw单位设置宽度。
width: 15vw; border-left: calc(15vw / 2) solid transparent;
Q2:如何实现多个六边形的蜂巢状排列?
A2:利用CSS Grid的auto-fit特性或Flexbox的flex-wrap,配合margin调整间距。
.container {
display: grid;
grid-template-rows: repeat(auto-fill, minmax(100px, auto));
