• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 纯CSS巧妙的实现带圆角的三角形

纯CSS巧妙的实现带圆角的三角形

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了纯CSS,带圆角的三角形等相关知识,希望对您有所帮助

之前在这篇文章中 -- 《N种使用 CSS 实现三角形的技巧》,介绍了 6 种使用 CSS 实现三角形的方式。

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


60f14400d774c.png


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

法一. 全兼容的 SVG 大法

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

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

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

<svg  width="250" height="250" viewBox="-50 -50 300 300">  <polygon class="triangle" stroke-linejoin="round" points="100,0 0,200 200,200"/></svg>
.triangle {    fill: #0f0;    stroke: #0f0;    stroke-width: 10;}

实际图形如下:


60f144117036d.png


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

miter 是默认值,表示用方形画笔在连接处形成尖角

round 表示用圆角连接,实现平滑效果

bevel 连接处会形成一个斜接


60f1441bbc468.png


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

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

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


60f14428c4910.png

通过 stroke-width 控制圆角大小

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

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


60f1443e45ca4.png


完整的 DEMO 你可以戳这里:CodePen Demo -- 使用 SVG 实现带圆角的三角形


法二. 图形拼接

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

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

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


60f145b60b1b4.png


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


60f14775a9693.png


绘制带圆角的菱形

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

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


60f1478a956b5.png


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


60f1479c27c41.gif


将其中一个角变成圆角:

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


60f147b46ae63.png


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


拼接 3 个带圆角的菱形

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

完整的代码如下:

<div></div>
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%);}

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


60f147c20a3f5.png


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


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

完了吗?没有!

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


60f147ceec0e5.png


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

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

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


60f147da75fd9.png

<div></div>
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:&
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 纯CSS使图片有放大效果代码
  • 纯CSS实现心形加载动画(附源码)
  • 纯CSS巧妙的实现带圆角的三角形
  • 纯CSS3怎么创建瀑布流布局?columns方法浅析
  • 纯css实现gif动图生成字画符

相关文章

  • 怎么在swarm集群里通过service部署wordpress
  • Photoshop创建简洁绚丽的几何组合背景
  • PHP实现长轮询消息实时推送功能代码实例讲解
  • JS中循环遍历数组的四种方式总结
  • JS判断当前浏览器是否是微信端
  • AI教程圆环渐变LOGO设计教程
  • 掌握PHP中对数组进行排序的正确姿势
  • thinkphp5与laravel的区别是什么
  • DEDECMS如何设置搜索页热门搜索词
  • 讲解Laravel8.5是如何添加验证码mews/captcha的

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • WordPress后台出现多篇英文文章
    • PHP中子类如何调用父类的静态方法
    • PHP使用Apache的伪静态功能实现“网页404时跳转指定页面
    • 织梦DedeCMS站点高级安全策略(Linux篇)
    • 小程序怎样在页面传递对象数组?
    • Centos7下宝塔面板PHP7.3怎么安装sqlsrv扩展
    • PS绘制可爱的熊猫头像
    • 纯CSS使图片有放大效果代码
    • Thinkphp6自定义配置文件以及调用(config文件夹下的配置)
    • Uniapp中怎么使用scrpll-view组件实现下拉刷新

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有