原码笔记

原码笔记

css实现带圆角三角型的示例代码

小诸哥 0

这篇文章主要介绍了css实现带圆角三角型的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前言

目标实现效果图如下:

实现

  1. <i class="triangle triangle-up"></i>
  2. <i class="triangle triangle-right"></i>
  3. <i class="triangle triangle-down"></i>
  4. <i class="triangle triangle-left"></i>
  1. .triangle{
  2.      display: inline-block;
  3.      font-size: 0;
  4.      overflow: hidden;
  5. }
  6.  
  7. .triangle:before{
  8.      content: "";
  9.      position: relative;
  10.      display: inline-block;
  11.      border: 25px solid transparent;
  12. }
  13.  
  14. .triangle-up{
  15.      position: relative;
  16.      top: 2px;
  17.      border-top-left-radius: 50%;
  18.      border-top-right-radius: 50%;
  19. }
  20. .triangle-up:before{
  21.      bottom: 2px;
  22.      border-top-width: 0;
  23.      border-bottom-width: 50px;
  24.      border-bottom-color: rgb(181, 181, 181);
  25. }
  26.  
  27. .triangle-right{
  28.      position: relative;
  29.      right: 2px;
  30.      border-top-right-radius: 50%;
  31.      border-bottom-right-radius: 50%;
  32. }
  33. .triangle-right:before{
  34.      left: 2px;
  35.      border-right-width: 0;
  36.      border-left-width: 50px;
  37.      border-left-color: rgb(181, 181, 181);
  38. }
  39.  
  40. .triangle-down{
  41.      position: relative;
  42.      bottom: 2px;
  43.      border-bottom-right-radius: 50%;
  44.      border-bottom-left-radius: 50%;
  45. }
  46. .triangle-down:before{
  47.      top: 2px;
  48.      border-bottom-width: 0;
  49.      border-top-width: 50px;
  50.      border-top-color: rgb(181, 181, 181);
  51. }
  52.  
  53. .triangle-left{
  54.      position: relative;
  55.      left: 2px;
  56.      border-top-left-radius: 50%;
  57.      border-bottom-left-radius: 50%;
  58. }
  59. .triangle-left:before{
  60.      right: 2px;
  61.      border-left-width: 0;
  62.      border-right-width: 50px;
  63.      border-right-color: rgba(181, 181, 181, 1);
  64. }

剖析

从以上代码中抽出一个triangle来剖析,就拿triangle-down来说。

一般css是不能画斜线的,因此得另辟蹊径。观以上实现代码,你会发现大量使用到border,其实这就是核心,也不复杂,一幅图便可说明

调整三角形的大小或形状可以通过调节不同方向的border-width的大小来达到此目的,比如说调整triangle-down的大小:

  1. 调整高度:border-top-width: 100px;;
  2. 调整宽度:border-right-width: 50px;border-left-width: 50px;

其他方向的triangle如此类推调节大小。
 

看“前言”中的triangle-down你会发现向下的角并不是尖锐的,而是有那么点“小弧度”。

这个“小弧度”实现并不难,其实也不是弧度,而是利用overflow: hidden将角“切去”一点点,放大便可发现过渡并不和谐,但由于此类三角形实际使用时尺寸会很小,因此肉眼对此不和谐并无感知,会误以为是小圆角,上面例子即是切去了2px。

另外一个可实现比较和谐的过渡的想法是,绘制一个足够大的圆形overflow: hidden区域,再将三角形放进去,三个角便会被切割得比较和谐,但此时三角形已经相当大,便可使用transform: scale()将它缩小。很麻烦是不是?事倍功半,我还是算了……

应用

  1. <div class="bubble-box">
  2.      <div class="bubble-box-hat">
  3.      <i class="triangle triangle-up"></i>
  4.      </div>
  5.      <div class="bubble-box-body">i am isaac!</div>
  6. </div>
  1. .bubble-box{
  2.      font-size: 0;
  3.      margin-top: 50px;
  4. }
  5.  
  6. .bubble-box-hat{
  7.      text-align: center;
  8. }
  9.  
  10. .bubble-box-body{
  11.      color: #FFFFFF;
  12.      background: rgb(181, 181, 181);
  13.      font-size: 28px;
  14.      border-radius: 10px;
  15.      padding: 100px;
  16.      text-align: center;
  17. }

写在最后

把脑子里的记忆,笔述出来也是一种整理知识的方式!(这逼装得……),希望对大家的学习有所帮助,也希望大家多多支持我们。

标签: 实现 代码