CSS 三角形生成器
通过 border hack 生成任意方向的 CSS 三角形,选择方向、尺寸和颜色,即时获得可用的 CSS 代码。免费在线工具。
- 在浏览器中处理
- 数据不离开你的设备
- 免费 · 无需注册
用微信扫描以下二维码即可分享
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。
生成的 CSS 怎么读
生成的规则始终以 width: 0 和 height: 0 开始,元素没有内容区,整个盒子都由边框组成。上、右、下、左四个方向各用三条边框:两条透明边框合起来就是底边的长度,一条实色边框的宽度就是三角形的高。四个角方向只用两条边框:一条实色、一条透明,从矩形的一角切出一个直角三角形。复制后把 .triangle 换成自己的类名即可。
聊天气泡的小箭头
聊天界面里,对方的消息通常靠左、气泡上有一个朝左的小箭头,自己的消息靠右、箭头朝右。先做对方那一侧:方向选「左」,宽度 8、高度 12,颜色填气泡的白色 #ffffff:
.triangle {
width: 0;
height: 0;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-right: 8px solid #ffffff;
}
高度 12 被平分成上下两条 6px 的透明边框,右边框 8px 是箭头伸出的长度。自己那一侧方向选「右」,尺寸不变,颜色换成绿色 #95ec69:
.triangle {
width: 0;
height: 0;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-left: 8px solid #95ec69;
}
实际使用时不必多写一个 div,把这些声明放进气泡的伪元素,再用绝对定位挂到气泡外侧。箭头宽 8px,所以向左移出 8px:
.bubble-left {
position: relative;
background: #ffffff;
}
.bubble-left::before {
content: "";
position: absolute;
top: 12px;
left: -8px;
width: 0;
height: 0;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-right: 8px solid #ffffff;
}
右侧气泡同理,用 right: -8px 和朝右的那组边框。
奇数尺寸会让尖角偏半个像素
上一节如果把高度改成 13,两条透明边框就不能平分:工具按向下取整和向上取整拆成 6px 和 7px,两者之和仍是 13px,但尖角比正中偏上 0.5px。
.triangle {
width: 0;
height: 0;
border-top: 6px solid transparent;
border-bottom: 7px solid transparent;
border-left: 8px solid #95ec69;
}
写成两条 6.5px 也没有用:浏览器会把边框宽度向下取整到整数个设备像素(CSS Backgrounds and Borders Level 3),在普通屏幕上底边会变成 12px。需要尖角正好居中时,上下方向用偶数宽度,左右方向用偶数高度。
全角字符不会改变颜色
颜色文本框只认 # 加六位半角十六进制。中文输入法全角状态下打出的 #ffffff 不符合格式,状态行会显示格式提示,颜色不变,CSS 里仍是原来的颜色。下面是默认颜色 #3b82f6 时,方向「右」、宽 8、高 12,输入全角白色之后的输出:
.triangle {
width: 0;
height: 0;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-left: 8px solid #3b82f6;
}
如果复制出的颜色和预期不符,先检查文本框里的 # 和字母是不是全角。
限制
- 只有一种纯色。 一条边框只有一个颜色,做不出渐变、图片填充、描边,也没有沿斜边的
box-shadow。需要这些效果时,用 clip-path 生成器的clip-path: polygon(50% 0, 100% 100%, 0 100%)裁出形状。 - 尺寸为 1 到 500 之间的整数像素。 宽度或高度为空、为 0、为负数、带小数或超过 500 时,生成的 CSS 下方显示错误,CSS 和预览清空,改回有效值后恢复。
- 只能用像素。 边框宽度不能写百分比,所以边框三角形不会随容器缩放。
- 颜色只接受
#加六位十六进制。 三位或八位的码、颜色名和rgba()都会保留原颜色并显示提示。想用currentColor或 CSS 变量,复制后自己改。 - HTML 片段固定为
<div class="triangle"></div>。 只起装饰作用的三角形对读屏软件没有意义;如果它是唯一表示状态的标记(比如展开箭头),状态还要写在文字或aria-expanded里。
常见使用场景
CSS 三角形常用于工具提示箭头、下拉菜单指示符、面包屑分隔符和聊天气泡的尾部。它只是几条边框,不用加载图片,颜色也能用 CSS 变量随主题切换。
FAQ
CSS 三角形的原理是什么?
把元素的 width 和 height 设为 0,元素就只剩边框。四条边框在角上按斜线相接,所以每条边框各是一个三角形或梯形。例如左右边框透明、下边框为实色,看到的就是一个朝上的三角形。
尖角为什么偏了半个像素?
工具输出的边框宽度都是整数像素。上下方向的三角形,两条透明边框之和必须等于宽度,所以奇数宽度无法平分,较小的一半写在前面:宽度 25 拆成 12px + 13px,底边仍是 25px,尖角在正中偏左 0.5px。左右方向的三角形按同样的方法拆分高度。改成两边各 12.5px 在普通屏幕上也没有用,浏览器会把边框宽度向下取整到整数个设备像素,底边会变成 24px。需要尖角正好居中时请用偶数。
width 和 height 对各方向分别控制什么?
上下方向的三角形:宽度是底边的总长,高度是三角形的高。左右方向:宽度是三角形伸出的长度,高度是竖直方向的总长。四个角方向(如左上):宽度和高度是切出直角三角形的那个矩形的两条边,例如 16 × 10 得到两条直角边分别为 16px 和 10px 的三角形。
该用边框技巧、clip-path 还是 SVG?
边框技巧不需要任何资源,主流浏览器都支持,但只能是一种纯色。clip-path: polygon() 可以裁切任意元素,三角形因此可以用渐变或图片填充,也能用百分比随容器缩放。需要描边、圆角或三个以上顶点的形状,用 SVG 更合适。只是工具提示的小箭头或下拉标记时,边框技巧写起来最短。
CSS 三角形支持暗黑模式吗?
支持。由于三角形由 border 构成,你可以用 CSS 自定义属性或暗色模式媒体查询来覆盖 border 颜色。例如,使用 CSS 变量作为颜色值,即可在明暗主题之间自动切换。
输入的尺寸和颜色会发送或保存吗?
不会。CSS 在浏览器标签页里生成,方向、尺寸和颜色不会发送到服务器,也不会保存到浏览器存储。页面统计只记录使用事件(工具名和动作),不包含尺寸或颜色。