Skip to content

用 CSS 画三角形的原理是什么? ​

把元素的宽高设为 0,只留边框。相邻边框在交界处是斜切的,让三条边透明、一条边有颜色,斜边就合成一个三角形。

原理 ​

css
.triangle {
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 0 8px 10px 8px;
  border-color: transparent transparent #333 transparent;
}

左右边框透明,下边框有颜色,得到朝上的三角形。底边越宽,三角形越钝。这是边框接合方式决定的,不是画了一块背景。

图标和可缩放的三角形更适合用 SVG,或者用两个边的 clip-path: polygon(...)。边框三角形放大后边缘清楚,但不好跟着字号和颜色系统走,也不好做描边以外的填充渐变。

箭头按钮还可以用空元素加两条边,再 rotate。那是折线箭头,不是实心三角。

追问 ​

为什么宽高必须是 0?

宽高是内容盒。内容盒有面积时,你看到的是矩形加四边,中间不是尖的。宽高为 0 时,四条边在中心相接,斜切才露出来。

和 clip-path 比呢?

clip-path 裁的是元素本身,背景、渐变都能留在三角形里,尺寸也好写成 em。边框法不依赖较新的裁切,但语义上是用边框拼形状。

易错点 ​

  • 元素是 inline 时,宽高不生效,要改成 inline-block 或块级。
  • 三条边都没设透明,得到的是一个由四块斜切组成的矩形,不是三角。
  • 用边框三角形当图标,颜色和点击区域要单独给,边框本身不好点。

相关 ​