• css实现圆角三角形,圆角三角形的实现


    今天给大家带来一个如何实现圆角三角形的方案,这个方案虽然可以实现,但是也是借助拼凑等方式来实现的,假如想一个div来实现圆角三角形,还是比较困难的。之前文章讲了如何实现对话框,里面介绍了三角形的实现方式。今天讲讲如何实现圆角三角形。

    方案一:全兼容的 SVG 方案

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

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

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

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

    通过 stroke-width 控制圆角大小 那么如何控制圆角大小呢?也非常简单,通过控制 stroke-width 的大小,可以改变圆角的大小。 当然,要保持三角形大小一致,在增大/缩小 stroke-width 的同时,需要缩小/增大图形的 width/height。

    方案二:图形拼接

    可以用正方形变成菱形,然后加圆角

    1. div {
    2. width: 10em;
    3. height: 10em;
    4. transform: rotate(-60deg) skewX(-30deg) scale(1, 0.866);
    5. border-top-right-radius: 30%;
    6. }

    拼接 3 个带圆角的菱形

    1. <style>
    2. div{
    3. position: relative;
    4. background-color: orange;
    5. margin:50px auto;
    6. }
    7. div:before,
    8. div:after {
    9. content: '';
    10. position: absolute;
    11. background-color: inherit;
    12. }
    13. div,
    14. div:before,
    15. div:after {
    16. width: 10em;
    17. height: 10em;
    18. border-top-right-radius: 30%;
    19. }
    20. div {
    21. transform: rotate(-60deg) skewX(-30deg) scale(1,.866);
    22. }
    23. div:before {
    24. transform: rotate(-135deg) skewX(-45deg) scale(1.414, .707) translate(0,-50%);
    25. }
    26. div:after {
    27. transform: rotate(135deg) skewY(-45deg) scale(.707, 1.414) translate(50%);
    28. }
    29. style>
    30. <div>div>

    将上面代码放到html中,可以看到效果!

    方案三:图形拼接实现渐变色圆角三角形

    本质就是实现一个贝壳形状,然后通过旋转,伪类来实现,贝壳形状做个渐变就可以了。

    代码如下:

    1. <div>div>
    2. <style>
    3. div {
    4. width: 200px;
    5. height: 200px;
    6. transform: rotate(30deg) skewY(30deg) scaleX(0.866);
    7. border-radius: 20%;
    8. margin-top:70px;
    9. overflow: hidden;
    10. border: unset;
    11. }
    12. div::before,
    13. div::after {
    14. content: "";
    15. position: absolute;
    16. width: 200px;
    17. height: 200px;
    18. }
    19. div::before {
    20. border-radius: 20% 20% 20% 55%;
    21. background: #000;
    22. transform: scaleX(1.155) skewY(-30deg) rotate(-30deg) translateY(-42.3%) skewX(30deg) scaleY(0.866) translateX(-24%);
    23. }
    24. div::after {
    25. border-radius: 20% 20% 55% 20%;
    26. background: #000;
    27. transform: scaleX(1.155) skewY(-30deg) rotate(-30deg) translateY(-42.3%) skewX(-30deg) scaleY(0.866) translateX(24%);
    28. }
    29. div::before,
    30. div::after {
    31. background: linear-gradient(#0f0, #03a9f4);
    32. }
    33. style>

    直接将上面代码放到html中,就可以看到效果了!

  • 相关阅读:
    python2和python3有什么区别
    【题解】P8817 [CSP-S 2022] 假期计划(bfs,dfs)
    RabbitMQ快速入门笔记
    Java8中的Stream的汇总和分组操作~它并不难的
    混淆电路的优化:P&P、Free XOR、GRR2
    二进制部署1.23.4版本k8s集群-6-部署Node节点服务
    2022全球隐私计算专利排行榜发布,微众银行位居全球银行业第一
    通用汽车在华加速推出智能电动车型
    【计算机网络笔记】网络应用进程通信
    STM32F103通用定时器介绍(中断实验)
  • 原文地址:https://blog.csdn.net/weixin_44786530/article/details/132792298