效果篇-实现三角形-《前端知识进阶》

admin 2025-11-01 15:17:32 编程 来源:ZONE.CI 全球网 0 阅读模式
  • 1. border
  • 2. linear-gradient
  • 3. clip-path

    CSS 提供了三种出色的方法可以实现基本的形状。本文就来看看如何使用这些方法来实现一个三角形。三种方法如下:

    • border;
    • linear-gradient;
    • clip-path。

      1. border

      使用 CSS 绘制三角形的第一种方法就是使用 border 属性。

    给定一个宽度和高度都为 0 的元素,其 border 的任何值都会直接相交,我们可以利用这个交点来创建三角形。也就是说,border属性是三角形组成的,下面给每一边都提供不同的边框颜色:

    1. .triangle {
    2. width: 0;
    3. height: 0;
    4. border: 100px solid;
    5. border-color: orangered skyblue gold yellowgreen;
    6. }

    将元素的长宽都设置为0,效果是这样的:image.png可以看到,我们已经基本上实现了4个三角形形状。所以可以根据border这个特性来绘制三角形。

    如果想要一个指向下面的三角形,可以让 border 的上边可见,其他边都设置为透明:

    1. .triangle {
    2. width: 0;
    3. height: 0;
    4. border-top: 50px solid skyblue;
    5. border-right: 50px solid transparent;
    6. border-left: 50px solid transparent;
    7. }

    image.png如果想要一个指向右面的三角形,可以让 border 的左边可见,其他边都设置为透明:

    1. .triangle {
    2. width: 0;
    3. height: 0;
    4. border-left: 50px solid skyblue;
    5. border-top: 50px solid transparent;
    6. border-bottom: 50px solid transparent;
    7. }

    image.png上面的代码也可以这样写:

    1. .triangle {
    2. border-style: solid;
    3. border-color: transparent;
    4. border-width: 50px 0 50px 50px;
    5. border-left-color: skyblue;
    6. }

    我们还可以通过调整不同方向边框的值来实现不同方向和大小的三角形:

    1. .triangle {
    2. width: 0;
    3. height: 0;
    4. border-top: 100px solid skyblue;
    5. border-right: 100px solid transparent;
    6. }

    image.png当然,实现一个等边三角形也是可以的:

    1. .triangle {
    2. width: 0;
    3. height: 0;
    4. border-left: 69px solid transparent;
    5. border-right: 69px solid transparent;
    6. border-bottom: 120px solid skyblue;
    7. }

    image.png

    2. linear-gradient

    linear-gradient 需要结合 background-image 来实现三角形,下面就来逐步使用渐变实现一个三角形。

    首先,我们先来画一个长方形:

    1. .triangle {
    2. width: 80px;
    3. height: 100px;
    4. background-repeat: no-repeat;
    5. outline: 1px solid skyblue;
    6. }

    效果如下:image.png接下来,添加一个渐变,这会使元素的一半呈现红色:

    1. background-image: linear-gradient(45deg, orangered 50%, rgba(255, 255, 255, 0) 50%);

    效果如下:image.png我们的目标是创建一个与使用 border 方法时外观相同的三角形。 因此,需要调整 background-size 和 background-position 值:

    1. background-size: 100% 50%;

    效果如下:image.png由于渐变设置了 45 度角,形状看起来有些奇怪。 需要调整角度,使三角形的顶边是从左上角开始,直到右侧的中间。可以使用浏览器开发者工具进行调试,直到预期的效果。将 linear-gradient 值更新为:

    1. background-image: linear-gradient(32deg, orangered 50%, rgba(255, 255, 255, 0) 50%);

    效果如下:image.png这其实已经是一个三角形了,但还不是我们想要的效果。对于线性渐变,我们需要添加多个背景来实现三角形。下面来添加一个它的镜像效果:

    1. background-image: linear-gradient(32deg, orangered 50%, rgba(255, 255, 255, 0) 50%), linear-gradient(148deg, orangered 50%, rgba(255, 255, 255, 0) 50%);

    效果如下:image.png看似距离三角形还很远,但是只需最后一步,只需调整两个三角形的位置即可,这里使用 background-position 属性来调整:

    1. background-position: top left, bottom left;

    效果如下:image.png这样就实现了三角形的效果(去掉outline即可),最终的代码如下:

    1. .triangle {
    2. width: 160px;
    3. height: 200px;
    4. outline: 2px solid skyblue;
    5. background-repeat: no-repeat;
    6. background-image: linear-gradient(32deg, orangered 50%, rgba(255, 255, 255, 0) 50%), linear-gradient(148deg, orangered 50%, rgba(255, 255, 255, 0) 50%);
    7. background-size: 100% 50%;
    8. background-position: top left, bottom left;
    9. }

    CSS 线性渐变可用于创建很多种形状。不过它是有缺点的,就是需要调试出合适的渐变角度。

    3. clip-path

    最后一种方法——clip-path,它是最精简和最可具扩展性的。 不过目前其在浏览器兼容性不是很好,使用时要考虑浏览器是否支持。image.png下面先画一个带背景颜色的长方形:

    1. .triangle {
    2. width: 80px;
    3. height: 100px;
    4. background-color: skyblue;
    5. }

    效果如下:image.pngclip-path 就是使用它来绘制多边形(或圆形、椭圆形等)并将其定位在元素内。实际上,浏览器不会绘制 clip-path 之外的任何区域,因此我们看到的是 clip-path 的边界。

    下面来绘制一个指向右侧的三角形:

    1. clip-path: polygon(0 0, 0% 100%, 100% 50%);

    这个值是怎么来的呢?使用 clip-path 可以为沿路径放置的每个点定义坐标。在这种情况下,就定义了三个点:top-left (0 0)bottom-left (0% 100%)right-center (100% 50%)。效果如下:image.png完整代码如下:

    1. .triangle{
    2. margin: 100px;
    3. width: 160px;
    4. height: 200px;
    5. background-color: skyblue;
    6. clip-path: polygon(0 0, 0% 100%, 100% 50%);
    7. }

    可以使用在线工具来尝试这个属性,绘制不同的图形:https://bennettfeely.com/clippy/

    以太坊cppgolang区别 编程

    以太坊cppgolang区别

    以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
    progolang 编程

    progolang

    Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
    golangn个发送者 编程

    golangn个发送者

    Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
    golang技能图谱 编程

    golang技能图谱

    从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
    评论:0   参与:  5