纯CSS实现圆角三角形的3种方法(技巧分享)

本篇文章给大家介绍一下利用css绘制圆角三角形的3种方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

纯CSS实现圆角三角形的3种方法(技巧分享)

之前在这篇文章中 — 《利用CSS绘制三角形的6种技巧(分享)》,介绍了 6 种使用 CSS 实现三角形的方式。

但是其中漏掉了一个非常重要的场景,如何使用纯 CSS 实现带圆角的三角形呢?,像是这样:

1.png

立即学习“前端免费学习笔记(深入)”;

本文将介绍几种实现带圆角的三角形的实现方式。

法一. 全兼容的 SVG 大法

想要生成一个带圆角的三角形,代码量最少、最好的方式是使用 SVG 生成。

使用 SVG 的 多边形标签 生成一个三边形,使用 SVG 的 stroke-linejoin="round" 生成连接处的圆角。

代码量非常少,核心代码如下:

  
.triangle {    fill: #0f0;    stroke: #0f0;    stroke-width: 10;}

实际图形如下:

2.png

这里,其实是借助了 SVG 多边形的 stroke-linejoin: round 属性生成的圆角,stroke-linejoin 是什么?它用来控制两条描边线段之间,有三个可选值:

miter 是默认值,表示用方形画笔在连接处形成尖角round 表示用圆角连接,实现平滑效果bevel 连接处会形成一个斜接

3.png

我们实际是通过一个带边框,且边框连接类型为 stroke-linejoin: round 的多边形生成圆角三角形的

如果,我们把底色和边框色区分开,实际是这样的:

.triangle {    fill: #0f0;    stroke: #000;    stroke-width: 10;}

4.png

通过 stroke-width 控制圆角大小

那么如何控制圆角大小呢?也非常简单,通过控制 stroke-width 的大小,可以改变圆角的大小。

当然,要保持三角形大小一致,在增大/缩小 stroke-width 的同时,需要缩小/增大图形的 width/height

5.png

完整的 DEMO 你可以戳这里:CodePen Demo — 使用 SVG 实现带圆角的三角形https://codepen.io/Chokcoco/pen/eYWZvKo

法二. 图形拼接

不过,上文提到了,使用纯 CSS 实现带圆角的三角形,但是上述第一个方法其实是借助了 SVG。那么仅仅使用 CSS,有没有办法呢?

当然,发散思维,CSS 有意思的地方正在于此处,用一个图形,能够有非常多种巧妙的解决方案!

我们看看,一个圆角三角形,它其实可以被拆分成几个部分:

6.png

所以,其实我们只需要能够画出一个这样的带圆角的菱形,通过 3 个进行旋转叠加,就能得到圆角三角形:

7.png

绘制带圆角的菱形

那么,接下来我们的目标就变成了绘制一个带圆角的菱形,方法有很多,本文给出其中一种方式:

1、首先将一个正方形变成一个菱形,利用 transform 有一个固定的公式:

div {    width:  10em;    height: 10em;    transform: rotate(-60deg) skewX(-30deg) scale(1, 0.866);}

纯CSS实现圆角三角形的3种方法(技巧分享)9.gif

2、将其中一个角变成圆角:

div { width:  10em; height: 10em; transform: rotate(-60deg) skewX(-30deg) scale(1, 0.866);  + border-top-right-radius: 30%;}

10.png

至此,我们就顺利的得到一个带圆角的菱形了!

拼接 3 个带圆角的菱形

接下来就很简单了,我们只需要利用元素的另外两个伪元素,再生成 2 个带圆角的菱形,将一共 3 个图形旋转位移拼接起来即可!

完整的代码如下:

div{    position: relative;    background-color: orange;}div:before,div:after {    content: '';    position: absolute;    background-color: inherit;}div,div:before,div:after {    width:  10em;    height: 10em;    border-top-right-radius: 30%;}div {    transform: rotate(-60deg) skewX(-30deg) scale(1,.866);}div:before {    transform: rotate(-135deg) skewX(-45deg) scale(1.414, .707) translate(0,-50%);}div:after {    transform: rotate(135deg) skewY(-45deg) scale(.707, 1.414) translate(50%);}

就可以得到一个圆角三角形了!效果如下:

11.png

完整的代码你可以戳这里:CodePen Demo — A triangle with rounded

https://codepen.io/Chokcoco/pen/vYmLVZr

法三. 图形拼接实现渐变色圆角三角形

完了吗?没有!

上述方案,虽然不算太复杂,但是有一点还不算太完美的。就是无法支持渐变色的圆角三角形。像是这样:

12.png

如果需要实现渐变色圆角三角形,还是有点复杂的。但真就还有人鼓捣出来了,下述方法参考至 — How to make 3-corner-rounded triangle in CSS。

同样也是利用了多块进行拼接,但是这次我们的基础图形,会非常的复杂。

首先,我们需要实现这样一个容器外框,和上述的方法比较类似,可以理解为是一个圆角菱形(画出 border 方便理解):

13.png

div {    width: 200px;    height: 200px;    transform: rotate(30deg) skewY(30deg) scaleX(0.866);    border: 1px solid #000;    border-radius: 20%;}

接着,我们同样使用两个伪元素,实现两个稍显怪异的图形进行拼接,算是对 transform 的各种用法的合集:

div::before,div::after {    content: "";    position: absolute;    width: 200px;    height: 200px;}div::before {    border-radius: 20% 20% 20% 55%;    transform: scaleX(1.155) skewY(-30deg) rotate(-30deg) translateY(-42.3%) skewX(30deg) scaleY(0.866) translateX(-24%);    background: red;}div::after {    border-radius: 20% 20% 55% 20%;    background: blue;    transform: scaleX(1.155) skewY(-30deg) rotate(-30deg) translateY(-42.3%) skewX(-30deg) scaleY(0.866) translateX(24%);}

为了方便理解,制作了一个简单的变换动画:

14.gif

本质就是实现了这样一个图形:

15.png

最后,给父元素添加一个 overflow: hidden 并且去掉父元素的 border 即可得到一个圆角三角形:

16.png

由于这两个元素重叠空间的特殊结构,此时,给两个伪元素添加同一个渐变色,会完美的叠加在一起:

div::before,div::after, {    background: linear-gradient(#0f0, #03a9f4);}

最终得到一个渐变圆角三角形:

17.png

上述各个图形的完整代码,你可以戳这里:CodePen Demo — A triangle with rounded and gradient background

https://codepen.io/Chokcoco/pen/LYyGRpV

最后

本文介绍了几种在 CSS 中实现带圆角三角形的方式,虽然部分有些繁琐,但是也体现了 CSS ”有趣且折磨人“ 的一面,具体应用的时候,还是要思考一下,对是否使用上述方式进行取舍,有的时候,切图也许是更好的方案。

好了,本文到此结束,希望对你有帮助 :)

原文地址:https://segmentfault.com/a/1190000040344317

作者:chokcoco

更多编程相关知识,请访问:编程视频!!

以上就是纯CSS实现圆角三角形的3种方法(技巧分享)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1620925.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 07:19:57
下一篇 2025年12月24日 07:20:02

相关推荐

  • CSS选择器学习之聊聊复合选择器(详细介绍)

    本篇文章给大家详细介绍一下css中的复合选择器,了解一下css中的交集选择器、并集复合选择器、层级选择器、伪类与伪元素选择器、属性选择器,一起学习吧! 一、交集选择器 又称标签指定式选择器 作用:选择出同时符合两个标签的内容 格式:1.由两个选择器构成,其中第一个为标签选择器,第二个为class选择…

    2025年12月24日
    000
  • 使用JS或CSS如何实现瀑布流布局,几种方案介绍

    本篇文章带大家了解一下瀑布流布局,介绍一下三种靠谱js方案,以及n种不靠谱css方案。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 本着实用精神,我们今天来分享一下瀑布流布局(昨天有个小兄弟问我怎么做,我找了半天没找到,啊原来写在内网了)。 演示地址: http://www.li…

    2025年12月24日 好文分享
    000
  • css怎么写五角星

    css写五角星的方法:首先创建一个HTML示例文件;然后通过small名class创建div;最后通过设置“transform: rotate(70deg);”等样式来实现五角星即可。 本文操作环境:windows7系统、HTML5&&CSS3版,DELL G3电脑 使用css实现五…

    2025年12月24日
    000
  • 2021年值得了解的10 个 CSS 功能(分享收藏)

    本篇文章给大家分享值得了解的10 个2021 年比较有用但又不热门的css功能,快来收藏吧! 没有 CSS,现代 Web 应用程序将无法实现。标记语言(译者注:这是样式表语言……)负责让网站有良好的视觉体验、令人愉悦的布局,并且每个元素都各居其位。但是,你知道新的 CSS 特性一直在出现吗? 多年来…

    2025年12月24日 好文分享
    000
  • css怎么设置4个div并排显示

    css设置4个div并排的方法:1、使用float属性让4个div浮动起来即可。2、使用“display:inline;”或“display: inline-block;”样式将4个div转换为内联元素或内联块状元素即可。 本教程操作环境:windows7系统、CSS3&&HTML5…

    2025年12月24日
    000
  • css怎么设置鼠标经过元素显示图片

    在css中,可以使用“:hover”选择器来实现鼠标经过元素显示图片效果,“:hover”选择器用于规定鼠标指针浮动元素上时添加的特殊样式,语法格式“元素:hover{background: url(图片地址);}”。 本教程操作环境:windows7系统、CSS3&&HTML5版、…

    2025年12月24日
    000
  • css怎么删除滚动条

    css删除滚动条:1、计算滚动条宽度,通过定位设置滚动条的位置,把滚动条给隐藏起来。2、利用“::-webkit-scrollbar”选择器或“overflow”属性来删除滚动条。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 css删除滚动条…

    2025年12月24日
    000
  • css三种颜色写法是什么

    颜色写法是:1、使用颜色名,语法“color:颜色名”;2、使用百分比,语法“color:rgb(百分比,百分比,百分比)”;3、使用数值,语法“color:rgb(数值,数值,数值)”。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 在 CS…

    2025年12月24日
    000
  • css怎么控制元素隐藏

    方法:1、使用“opacity:0;”;2、使用“visibility: hidden;”;3、使用“diaplay:none;”;4、使用“position:absolute;top:-999px;”;5、利用clip-path属性。 本教程操作环境:windows7系统、CSS3&&am…

    2025年12月24日
    000
  • css如何加空格

    在css中,可以利用伪元素“:before”和“:after”来在元素内容前或元素内容后添加空格,语法格式“元素:before {content: “ ”;}”或“元素:after {content: “ ”;}”。 本教程操作环境:windows7系…

    2025年12月24日
    000
  • css怎么实现超出高度隐藏

    在CSS中,可以利用overflow-y属性来实现超出高度隐藏效果,只需要给元素添加“overflow-y:hidden”样式即可。overflow-y属性规定当内容溢出元素上/下边缘时发生的事情,当值为hidden时,超出部分会被隐藏。 本教程操作环境:windows7系统、CSS3&&a…

    2025年12月24日
    000
  • css怎么设置文本框宽度

    在css中,可以使用width属性来设置文本框宽度,只需要给文本框元素textarea添加“width:宽度值;”样式即可。width属性可以设置元素的宽度,它定义了元素内容区的宽度,在内容区外面可以增加内边距、边框和外边距。 本教程操作环境:windows7系统、CSS3&&HTM…

    2025年12月24日
    000
  • 纯CSS如何实现血轮眼+轮回眼特效(代码详解)

    本篇文章给大家介绍一下使用纯css实现血轮眼+轮回眼特效的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助。 效果(完整代码在底部) 其实实现并不难,都是重复的代码比较多。 实现(可跟着一步一步写): 1. 先定义基本标签: 2. 定义左右眼的基本css样式: 立即学习“前端免费学…

    2025年12月24日
    000
  • css样式冲突怎么办

    解决方法:1、细化选择符,将选择器的描述写得更加精确;2、再写一次选择器名;3、改变CSS样式表中的顺序;4、主动提升优先级,在需要使用的样式后加上关键字“!important”。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 1. 细化选择符…

    2025年12月24日
    000
  • css如何设置所有标签

    设置方法:1、将所有标签都列出来,语法“body,ol,ul,h1,h2,h3,h4,h5,h6,p,th…{属性:属性值;}”;2、使用*进行设置,语法格式为“*{属性:属性值;}”。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。…

    2025年12月24日
    000
  • css结构化伪类选择器有哪些

    选择器有::root、:not、:only-child、:first-child、:last-child、:empty:target、:nth-child(n)、nth-last-child(n)、:nth-of-type(n)等。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月24日 好文分享
    000
  • CSS如何实现渐变提示框(tooltips)

    本篇文章给大家介绍一下使用css如何实现支持渐变的提示框(tooltips)。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助。 今天来看一种十分常见的交互:提示框(tooltips)。通常提示框都是纯色的,比如下面这个 这类布局实现还不算复杂,可以用一个圆角矩形和一个小三角拼接形成,设…

    2025年12月24日 好文分享
    000
  • 网页设计css样式特效代码大全(建议收藏)

    本篇文章给大家分享一些常用的CSS样式代码,使用这些代码,你可以轻而易举地让页面的风格变得更漂亮,伙伴们来收藏吧!! css规定字体样式大全 字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX、P…

    2025年12月24日
    000
  • css3跟css区别是什么

    css3跟css区别是:1、CSS3是CSS技术的升级版本,CSS是用来表现HTML或XML等文件样式的计算机语言;2、CSS3主要包括盒子模型、列表模块等模块,CSS可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月24日
    000
  • css继承样式有哪些

    css继承样式有:visibility、cursor、letter-spacing、color、font、text-indent、text-align、list-style、list-style-type、border-collapse等。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信