CSS 三角形生成器

CSS 三角形生成器,是指在线选择方向、调节宽高与颜色,实时预览并一键复制纯 CSS 三角形代码的前端工具。它免费、无需注册,支持上下左右与四个斜角共 8 个方向、等腰/直角/等边三角形、border 与 clip-path 两种写法,以及带边框的对话框小三角。预览区直接渲染生成的样式,还能拆开四条边框看清原理。计算全在浏览器本地完成,内容不上传。

底边 100px · 深度 60px · 顶角 79.6°

尖端朝向
宽 Wpx
高 Hpx

顶点位置50%

从左往右量,50% 为等腰

颜色

支持 HEX 与 rgb() / rgba();取色器不支持透明度,半透明色请手输

快捷按钮只做一次性赋值,之后可以继续手调

生成的 CSS 三角形代码
.triangle {
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 60px 50px 0 50px;
  border-color: #3b82f6 transparent transparent transparent;
}

如何使用CSS 三角形生成器

1

在九宫格里点三角形尖端朝向,拖滑杆调宽高、顶点位置并选颜色;顶点放在 50% 就是等腰三角形。

2

按需点「等腰 / 等边 / 直角等腰」一次性设好比例,或切到「气泡箭头」设置描边宽度、描边色与箭头位置。

3

在 border 写法、clip-path 写法、气泡箭头三种输出之间切换,点「复制代码」把 CSS 三角形代码粘进项目。

关于CSS 三角形生成器的常见问题

CSS 用 border 画三角形的原理是什么?
把元素的 width 和 height 设为 0,它就只剩四条边框;相邻两条边在角上以一条斜线分界,于是每条边都退化成一个三角形。保留与尖端方向相反的那条边并涂色,相邻两条设为透明、尖端那条设为 0,剩下的就是一个三角形。例如朝下的 100×60 三角形,border-width 是 60px 50px 0 50px,涂色的是上边。本工具的「拆开看原理」会用四种颜色把四条边画出来。
CSS 三角形用 border 还是 clip-path 好?
border 写法兼容性最好、代码最短,但只能纯色,元素本身宽高为 0,点击区域和布局尺寸都不是三角形本身。clip-path 写法的元素有真实宽高,可以把 background 换成渐变或图片,但 box-shadow 会被一起裁掉,要阴影得改用 filter: drop-shadow。两种写法画的是同一个三角形,本工具两种都能生成,切换标签即可对照。
怎么用 CSS 给气泡对话框加一个小三角?
给气泡容器写 position: relative,再用 ::after 伪元素按 border 写法画一个三角形,用 top: 100%(箭头朝下时)把它挂到气泡外侧,沿边位置用 left 定位。三角形颜色要和气泡底色一致才能接上。本工具的「气泡箭头」标签会直接生成这三段规则,tooltip 箭头和下拉菜单的小三角也是同一个写法。
CSS 三角形怎么加边框(描边)?
用两层伪元素叠:::before 用描边色画外层三角形,::after 用底色画一个略小的内层三角形盖在上面。内层不能只是把外层「缩小 1px」,那样斜边上的描边会比底边细。本工具按平行偏移算:两条斜边各内移 t,尖端沿中轴后退 d = t·√(b²+D²)/b,例如 20×10 的箭头、描边 1px 时 d ≈ 1.414。几何上尖端处沿中轴的描边厚度是 d,比 t 略厚,这是尖角的必然,不是误差。
CSS 画等边三角形宽高怎么设置?
等边三角形的深度等于底边乘以 √3/2。底边 100px 时深度约 86.6px,三个内角都是 60.0°。用 border 写法时,朝下的等边三角形就是左右两边各一半底边、上边写这个深度。本工具点「等边」按钮会按当前底边自动算好深度,并在预览下方显示三个内角供你核对。
CSS 三角形不显示是什么原因?
最常见的四个原因:一是用在 span 这类行内元素上,要加 display: inline-block 或 block;二是漏写 border-style: solid,边框根本不画;三是有色边写反了,尖朝下要涂的是上边;四是元素有 padding、line-height 或字号把内容区撑开,三角形会变成梯形,要把宽高和 padding 都清零、font-size 设成 0。
生成的 CSS 三角形代码要加浏览器前缀吗?
border 写法不需要任何前缀,主流浏览器都支持。clip-path 的 polygon() 在现代浏览器里均支持无前缀写法,本工具因此不输出 -webkit-clip-path;只有极老的内核可能不支持,需要兼容时请自行补前缀并实测。
CSS 三角形生成器能做直角三角形吗?
能。点九宫格四个斜角方向就是直角三角形,直角在你点的那个角上,宽高就是两条直角边;或者在上下左右方向把顶点位置拖到 0% 或 100%,也会得到直角三角形。「直角等腰」按钮会把深度设为底边的一半,例如底边 100px 时深度 50px,顶角正好 90°。
CSS 下拉箭头小三角怎么用伪元素写?
在按钮或下拉框上写 position: relative,用 ::after 画一个朝下的小三角(例如 10×6),再用 position: absolute 加 right 与 top 把它放到右侧垂直居中。伪元素三角形不会增加 DOM 节点,展开时给它加 transform: rotate(180deg) 就能翻转。在本工具选「朝下」并把宽高调小,复制 border 写法里的声明即可。
CSS 三角形能做成渐变色或圆角吗?
border 写法本身只能纯色,不支持渐变。要渐变请用 clip-path 写法,把生成代码里的 background 换成 linear-gradient 即可,渐变代码可以用站内的 CSS 渐变生成器调。圆角三角形用这两种写法都做不到,需要 SVG 或更复杂的 clip-path 路径,本工具不生成。

CSS 三角形参数含义速查表

下表是 100×60 的 CSS 三角形在 8 个方向上的 border 写法,数值由本工具的生成逻辑现算。四个值的顺序永远是上、右、下、左。记住一句话就不会写反:有色边与尖端方向相反,尖朝下要涂上边。

宽 100px、高 60px、顶点居中时,8 个方向的 border-width 与 border-color
尖端朝向border-widthborder-color
左上60px 100px 0 0#3b82f6 transparent transparent transparent
朝上0 50px 60px 50pxtransparent transparent #3b82f6 transparent
右上60px 0 0 100px#3b82f6 transparent transparent transparent
朝左30px 100px 30px 0transparent #3b82f6 transparent transparent
朝右30px 0 30px 100pxtransparent transparent transparent #3b82f6
左下0 100px 60px 0transparent transparent #3b82f6 transparent
朝下60px 50px 0 50px#3b82f6 transparent transparent transparent
右下0 0 60px 100pxtransparent transparent #3b82f6 transparent

这件事在英文里叫 CSS triangle generator 或 CSS arrow generator,中文也有人叫三角形代码生成、CSS 箭头生成,说的都是同一件事:调出一个三角形,复制走一段纯 CSS 代码。本工具的功能特点是 8 个方向加可调顶点、等边与直角一键设置、border 与 clip-path 两种写法互相校验、带描边的气泡箭头,以及拆开四条边框看原理;一键复制 CSS 三角形代码,内容不上传。

为什么四条 border 能拼出一个三角形

CSS 三角形原理只有一句:宽高为 0 的元素只剩边框,而相邻两条边框在角上是用斜线分界的。CSS 画三角形最经典的办法是 border —— 盒子的内容区缩成一个点后,每条边都从外侧的两个角连到这个点,退化成一个三角形。把其中一条涂色、两侧相邻的两条设为透明,就得到一个 border 三角形;透明的两条边宽度决定底边被顶点分成的两段,涂色那条边的宽度就是三角形的深度。

border 写法与 clip-path 写法怎么选

clip-path 三角形是先画一个真实宽高的矩形,再用 polygon() 按三个顶点裁出三角形。两种写法画出来的形状一样,差别在元素本身。

两种纯 CSS 三角形写法的差别
对比项border 写法clip-path 写法
能否渐变或图片填充不能,只能纯色能,把 background 换掉即可
能否加阴影box-shadow 画的是方盒子box-shadow 会被裁掉,改用 drop-shadow
元素尺寸是否真实宽高为 0,靠边框撑开有真实宽高
点击区域整个边框盒,含透明部分只有三角形内部
兼容性主流浏览器均支持现代浏览器无前缀可用

想要渐变三角形,就用 clip-path 写法,把 background 换成站内 CSS 渐变生成器 调出的渐变即可。

气泡箭头:用伪元素给对话框加小三角

对话框小三角、tooltip 箭头也是同一个写法:气泡容器写 position: relative,再用 ::after 伪元素画一个 CSS 箭头挂在气泡外侧。伪元素三角形不占 DOM 节点,改颜色、改位置都只动样式。下拉箭头 CSS 也能这样写,只是把伪元素放在按钮内部。

本工具的气泡箭头只支持上下左右四个方向的等腰三角形 —— 斜角或不等边的箭头挂在气泡边上会歪,这时代码区不输出代码,而是给出「切到朝下」「设为等腰」一键修正。箭头位置可以居中,也可以指定箭头中线到气泡起始边的距离;定位用 calc() 减去半个底宽,不用 transform,免得和你自己的动画冲突。

带边框的三角形:两层伪元素叠出描边

CSS 三角形加边框,常见做法是 ::before 画描边色的外层三角形、::after 画底色的内层三角形盖在上面。问题在于内层该小多少:网上多数教程只把外层「加大 1px」,结果斜边上的描边比底边细。正确做法是把两条斜边各向内平移 t,尖端沿中轴因此后退 d = t·√(b²+D²)/b(b 是半个底宽、D 是深度)。

以朝下、20×10、描边 1px 的箭头为例,d ≈ 1.414,外层 border-width 是 11px 11px 0 11px,内层是 9.59px 9.59px 0 9.59px。两层的底边都从气泡描边内侧起画,内层正好盖住气泡那一段描边,箭头与气泡就接通了。

等边三角形与直角三角形的宽高怎么算

CSS 等边三角形:深度 = 底边 × √3/2。底边 100px 时深度约 86.6px,三个内角都是 60.0°。等腰三角形只要顶点在底边正中(顶点位置 50%)。CSS 直角三角形有两种做法:直接选四个斜角方向,宽高就是两条直角边;或者在上下左右方向把顶点拖到 0% 或 100%。直角等腰三角形的深度是底边的一半,底边 100px 时深度 50px。

输出数值最多保留 2 位小数,浏览器会按设备像素取整,1px 以内的差异不做承诺;斜边的抗锯齿由浏览器决定,不同缩放比下边缘可能略有锯齿。

三角形不显示或变形的常见原因

排查顺序:元素类型 → 边框样式 → 涂色的边 → 内容区
现象原因改法
完全不显示用在 span 等行内元素上加 display: inline-block 或 block
完全不显示漏写 border-style: solid补上边框样式
方向反了有色边写反涂与尖端相反的那条边
变成梯形padding、line-height 或字号撑开了内容区宽高与 padding 清零,font-size 设为 0