在 CSS 中,我们可以通过使用 border 属性来实现一个三角形。这种方法利用了边框的斜切特性,通过设置不同方向的边框宽度和颜色,将元素的内容区域缩小为 0,从而形成一个三角形。
以下是实现三角形的详细步骤和代码示例:
实现原理
- 元素的宽度和高度设置为 0:将元素的 width和height设置为 0,使其内容区域消失。
- 设置边框:通过设置不同方向的边框宽度和颜色,利用边框的斜切特性形成三角形。
- 隐藏不需要的边框:将不需要显示的边框颜色设置为透明(transparent)。
代码示例
1. 向上的三角形
| 1
 | <div class="triangle-up"></div>
 | 
| 12
 3
 4
 5
 6
 7
 
 | .triangle-up {width: 0;
 height: 0;
 border-left: 50px solid transparent;
 border-right: 50px solid transparent;
 border-bottom: 100px solid #007bff;
 }
 
 | 
效果:
- 一个底边为 100px,高度为 100px 的蓝色三角形,方向向上。
2. 向下的三角形
| 1
 | <div class="triangle-down"></div>
 | 
| 12
 3
 4
 5
 6
 7
 
 | .triangle-down {width: 0;
 height: 0;
 border-left: 50px solid transparent;
 border-right: 50px solid transparent;
 border-top: 100px solid #007bff;
 }
 
 | 
效果:
- 一个底边为 100px,高度为 100px 的蓝色三角形,方向向下。
3. 向左的三角形
| 1
 | <div class="triangle-left"></div>
 | 
| 12
 3
 4
 5
 6
 7
 
 | .triangle-left {width: 0;
 height: 0;
 border-top: 50px solid transparent;
 border-bottom: 50px solid transparent;
 border-right: 100px solid #007bff;
 }
 
 | 
效果:
- 一个底边为 100px,高度为 100px 的蓝色三角形,方向向左。
4. 向右的三角形
| 1
 | <div class="triangle-right"></div>
 | 
| 12
 3
 4
 5
 6
 7
 
 | .triangle-right {width: 0;
 height: 0;
 border-top: 50px solid transparent;
 border-bottom: 50px solid transparent;
 border-left: 100px solid #007bff;
 }
 
 | 
效果:
- 一个底边为 100px,高度为 100px 的蓝色三角形,方向向右。
5. 斜边三角形(等腰直角三角形)
| 1
 | <div class="triangle-right-angle"></div>
 | 
| 12
 3
 4
 5
 6
 
 | .triangle-right-angle {width: 0;
 height: 0;
 border-bottom: 100px solid #007bff;
 border-right: 100px solid transparent;
 }
 
 | 
效果:
进阶:通过伪元素实现三角形
我们通常使用伪元素(::before 或 ::after)来实现三角形,这样的好处是可以避免额外的 HTML 元素。
示例:在按钮上添加一个向下的三角形
| 1
 | <button class="btn-with-arrow">点击我</button>
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | .btn-with-arrow {position: relative;
 padding: 10px 20px;
 background-color: #007bff;
 color: white;
 border: none;
 cursor: pointer;
 }
 
 .btn-with-arrow::after {
 content: '';
 position: absolute;
 top: 100%;
 left: 50%;
 transform: translateX(-50%);
 width: 0;
 height: 0;
 border-left: 8px solid transparent;
 border-right: 8px solid transparent;
 border-top: 8px solid #007bff;
 }
 
 | 
效果:
