Skip to content
HangoverHangover
首页
项目收藏
留言板
github icon
  • 文章

      • 响应式设计
        • flex弹性布局
          • grid网格布局
            • 视差滚动效果
              • 文本溢出省略
                • css画三角形
                  • 一、前言
                    • 二、实现过程
                      • 三、原理分析
                      • css实现动画
                        • 隐藏页面元素

                      css画三角形

                      author iconHangovercalendar icon2022年4月24日category icon
                      • CSS
                      tag icon
                      • 三角形
                      timer icon大约 3 分钟

                      此页内容
                      • 一、前言
                      • 二、实现过程
                      • 三、原理分析

                      画三角形

                      # 一、前言

                      在前端开发的时候,我们有时候会需要用到一个三角形的形状,比如地址选择或者播放器里面播放按钮

                      地址选择

                      通常情况下,我们会使用图片或者svg去完成三角形效果图,但如果单纯使用css如何完成一个三角形呢?

                      实现过程似乎也并不困难,通过边框就可完成

                      # 二、实现过程

                      在以前也讲过盒子模型,默认情况下是一个矩形,实现也很简单

                      <style>
                          .border {
                              width: 50px;
                              height: 50px;
                              border: 2px solid;
                              border-color: #96ceb4 #ffeead #d9534f #ffad60;
                          }
                      </style>
                      <div class="border"></div>
                      
                      1
                      2
                      3
                      4
                      5
                      6
                      7
                      8
                      9

                      效果如下图所示:

                      效果图

                      将border设置50px,效果图如下所示:

                      效果图

                      白色区域则为width、height,这时候只需要你将白色区域部分宽高逐渐变小,最终变为0,则变成如下图所示:

                      效果图

                      这时候就已经能够看到4个不同颜色的三角形,如果需要下方三角形,只需要将上、左、右边框设置为0就可以得到下方的红色三角形

                      效果图

                      但这种方式,虽然视觉上是实现了三角形,但实际上,隐藏的部分任然占据部分高度,需要将上方的宽度去掉

                      最终实现代码如下:

                      .border {
                          width: 0;
                          height: 0;
                          border-style:solid;
                          border-width: 0 50px 50px;
                          border-color: transparent transparent #d9534f;
                      }
                      
                      1
                      2
                      3
                      4
                      5
                      6
                      7

                      如果想要实现一个只有边框是空心的三角形,由于这里不能再使用border属性,所以最直接的方法是利用伪类新建一个小一点的三角形定位上去

                      .border {
                          width: 0;
                          height: 0;
                          border-style:solid;
                          border-width: 0 50px 50px;
                          border-color: transparent transparent #d9534f;
                          position: relative;
                      }
                      .border:after{
                          content: '';
                          border-style:solid;
                          border-width: 0 40px 40px;
                          border-color: transparent transparent #96ceb4;
                          position: absolute;
                          top: 0;
                          left: 0;
                      }
                      
                      1
                      2
                      3
                      4
                      5
                      6
                      7
                      8
                      9
                      10
                      11
                      12
                      13
                      14
                      15
                      16
                      17

                      效果图如下所示:

                      效果图

                      伪类元素定位参照对象的内容区域宽高都为0,则内容区域即可以理解成中心一点,所以伪元素相对中心这点定位

                      将元素定位进行微调以及改变颜色,就能够完成下方效果图:

                      效果图

                      最终代码如下:

                      .border:after {
                          content: '';
                          border-style: solid;
                          border-width: 0 40px 40px;
                          border-color: transparent transparent #96ceb4;
                          position: absolute;
                          top: 6px;
                          left: -40px;
                      }
                      
                      1
                      2
                      3
                      4
                      5
                      6
                      7
                      8
                      9

                      # 三、原理分析

                      可以看到,边框是实现三角形的部分,边框实际上并不是一个直线,如果我们将四条边设置不同的颜色,将边框逐渐放大,可以得到每条边框都是一个梯形

                      效果图

                      当分别取消边框的时候,发现下面几种情况:

                      • 取消一条边的时候,与这条边相邻的两条边的接触部分会变成直的

                      • 当仅有邻边时, 两个边会变成对分的三角

                      • 当保留边没有其他接触时,极限情况所有东西都会消失

                      效果图

                      通过上图的变化规则,利用旋转、隐藏,以及设置内容宽高等属性,就能够实现其他类型的三角形

                      如设置直角三角形,如上图倒数第三行实现过程,我们就能知道整个实现原理

                      实现代码如下:

                      .box {
                          /* 内部大小 */
                          width: 0px;
                          height: 0px;
                          /* 边框大小 只设置两条边*/
                          border-top: #4285f4 solid;
                          border-right: transparent solid;
                          border-width: 85px; 
                          /* 其他设置 */
                          margin: 50px;
                      }
                      
                      1
                      2
                      3
                      4
                      5
                      6
                      7
                      8
                      9
                      10
                      11
                      上一页
                      文本溢出省略
                      下一页
                      css实现动画
                      鸟无声兮山寂寂,夜正长兮风淅淅。 ──李华《吊古战场文》
                      Copyright © 2023 Hangover