当前位置:首页 > CSS

css制作六边形

2026-01-15 11:44:58CSS

使用 CSS 制作六边形

方法一:使用 clip-path 属性

通过 clip-path 直接定义六边形的路径,简单高效且支持动画效果。

.hexagon {
  width: 100px;
  height: 110px;
  background-color: #3498db;
  clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
}

参数说明

  • polygon 中的百分比值为六边形六个顶点的坐标,依次为:顶部中点、右上角、右下角、底部中点、左下角、左上角。

方法二:利用伪元素旋转

通过旋转伪元素叠加实现六边形效果,兼容性较好。

.hexagon {
  width: 100px;
  height: 57.74px; /* 高度 = 宽度 × (√3 / 2) */
  background-color: #3498db;
  position: relative;
  margin: 28.87px 0; /* 边距 = 高度 / 2 */
}

.hexagon:before,
.hexagon:after {
  content: "";
  position: absolute;
  width: 100%;
  height: 100%;
  background-color: inherit;
}

.hexagon:before {
  transform: rotate(60deg);
}

.hexagon:after {
  transform: rotate(-60deg);
}

关键点

  • 六边形高度与宽度的比例为 √3/2(约 0.866)。
  • 伪元素通过旋转 60° 和 -60° 补全六边形的另外两部分。

方法三:SVG 内联

直接使用 SVG 绘制六边形,嵌入到 HTML 中。

<svg width="100" height="115" viewBox="0 0 100 115">
  <polygon points="50 0, 100 25, 100 75, 50 100, 0 75, 0 25" fill="#3498db" />
</svg>

优势

  • SVG 为矢量图形,缩放无损清晰度。
  • 可通过 CSS 控制填充色和动画。

六边形布局技巧

若需将多个六边形拼接为蜂窝网格,需注意以下 CSS:

.hex-grid {
  display: flex;
  flex-wrap: wrap;
  margin-left: 50px; /* 偏移半个六边形宽度 */
}

.hexagon {
  margin-right: -25px; /* 重叠部分 */
  margin-bottom: -14px; /* 垂直重叠 */
}

原理

css制作六边形

  • 通过负边距和偏移实现六边形的紧密排列。

标签: css六边形
分享给朋友:

相关文章

css如何制作圆

css如何制作圆

使用 border-radius 属性制作圆 通过设置 border-radius 属性为元素添加圆角效果。当 border-radius 的值等于元素宽度和高度的一半时,元素会呈现圆形。 .cir…

css制作按钮

css制作按钮

基础按钮样式 创建一个基础的CSS按钮样式,可以通过以下代码实现。这个例子包含了按钮的基本属性,如背景色、边框、内边距和文字样式。 .button { background-color: #4C…

纯css制作tab菜单

纯css制作tab菜单

纯CSS制作Tab菜单的方法 使用radio input控制切换 通过<input type="radio">和<label>元素配合实现无JavaScript的Tab切换效果…

css制作详情页

css制作详情页

CSS制作详情页的关键步骤 布局规划 确定详情页的整体布局结构,通常包括头部、商品展示区、参数区、评价区等模块。使用Flexbox或Grid布局实现响应式设计,确保在不同设备上正常显示。 样式设计…

css如何制作未读图标

css如何制作未读图标

未读图标实现方法 通过CSS可以创建多种未读图标的样式,以下是几种常见的实现方式: 使用伪元素创建小红点 .unread-badge { position: relative; disp…

风车制作css

风车制作css

风车制作CSS方法 使用CSS创建风车效果可以通过动画和变换属性实现。以下是一个简单的风车旋转动画示例: HTML结构 <div class="windmill"> <div…