<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          不同樣式tooltip對(duì)話框小三角的css實(shí)現(xiàn)

          共 9819字,需瀏覽 20分鐘

           ·

          2021-09-14 02:14

          開發(fā)過(guò)程中已經(jīng)遇到過(guò)好多次需要手動(dòng)實(shí)現(xiàn) tooltip 樣式了,這里就總結(jié)下,以便未來(lái)更好的復(fù)制粘貼。

          如上圖,常見(jiàn)的 tooltip 總共有 3 種類型,純背景色無(wú)邊框、有邊框、包含背景圖,其中的小三角可能是純色、尖尖有弧度。

          下邊介紹四種常用的方法來(lái)實(shí)現(xiàn) tooltip

          貼圖

          簡(jiǎn)單方便快捷,一個(gè)三角形的圖定下位即可。在女朋友的幫助下,用 AI 成功畫了三種三角形。

          下邊我們只需要把三角形貼到矩形下邊即可。

          • 純背景色三角形

            .wxml
            <view class="tooltip">
                  <view class="tooltip-text">我是一句提示內(nèi)容</view>
                  <image class="tooltip-trianglesrc="https://windliangblog.oss-cn-beijing.aliyuncs.com/tooltip-01.png" />
            </view>

            .wxss
            .tooltip {
              width400rpx;
              margin100rpx;
              position: relative;
            }

            .tooltip-text {
              height60rpx;
              line-height60rpx;
              background#F5F8FF;
              color#494949;
              border-radius5rpx;
              padding0 20rpx;
            }

            .tooltip-triangle {
              position: absolute;
              width30rpx;
              height30rpx;
              top60rpx;
              left200rpx;
            }
          • 帶邊框的三角形和三角形圓角

            .wxml
            <view class="tooltip">
                  <view class="tooltip-text">我是一句提示內(nèi)容</view>
                  <image class="tooltip-trianglesrc="https://windliangblog.oss-cn-beijing.aliyuncs.com/tooltip-02.png" />
            </view>

            .wxss
            .tooltip {
            width400rpx;
            margin100rpx;
            position: relative;
            }

            .tooltip-text {
            height60rpx;
            line-height60rpx;
            background#f5f8ff;
            color#494949;
            border-radius5rpx;
            padding0 20rpx;
            border2px solid #002fa7;
            }

            .tooltip-triangle {
            position: absolute;
            width30rpx;
            height30rpx;
            top62rpx;
            left200rpx;
            }

            發(fā)現(xiàn)原有的 border 沒(méi)有蓋住,然后從重新做了一張上邊延伸背景色的圖。

            圓角的三角同理,換下 imagesrc 即可。

          利用 border

          不知道是誰(shuí)第一個(gè)想到的這種方案,是真的很神奇。我們經(jīng)常寫 border ,可有沒(méi)有想過(guò)它的四個(gè)角的連接處是什么樣的?

          讓我們將連接處放大:

          會(huì)發(fā)現(xiàn)每條邊其實(shí)是一個(gè)梯形,然后互相接起來(lái)。那么如果 border 中內(nèi)容的寬高都是 0 會(huì)怎么樣呢?

          .border {
            border-width: 4px;
            border-color: #F00 #0F0 #00F #0FF;
            border-style: solid;
            width: 0px; 
            height: 0px;
          }

          三角形出現(xiàn)了!我們只需要將左邊下邊右邊的 border 顏色設(shè)置為透明就是我們要的三角形了,border-color: #F00 transparent transparent transparent;

          此外,雖然底部 boder 設(shè)置為透明了,但是還占據(jù)高度,我們可以將它的 width 設(shè)為 0border-bottom-width: 0。

          然后我們只需要將之前使用的圖片替換掉即可。

          .wxml
          <view class="tooltip">
                  <view class="tooltip-text">我是一句提示內(nèi)容</view>
                  <view class="tooltip-triangle"></view>
          </view>

          .wxss
          .tooltip {
              max-width400rpx;
              margin-left20rpx;
              position: relative;
          }
          .tooltip-text {
              padding15rpx;
              background#002FA7;
              color#fff;
              border-radius5rpx;
          }

          .tooltip-triangle {
              position: absolute;
              top62rpx;
              left200rpx;
              border-width30rpx;
              border-color#002FA7 transparent transparent transparent;
              border-style: solid;
              width0px;
              height0px;
          }

          效果如下:

          三角形形狀的話,我們可以通過(guò) border-width 屬性去調(diào)整高低胖瘦。

          • 帶邊框三角

          上邊的矩形和三角形都沒(méi)有邊框,如果是有邊框的,下邊這種該怎么實(shí)現(xiàn)呢?

          其實(shí)很簡(jiǎn)單,我們只需要在原有三角形的位置寫一個(gè)一樣的三角形,然后顏色設(shè)置為對(duì)話框的背景色,向上偏移一定位置即可。

          把覆蓋的三角形顏色設(shè)置為紅色,這樣看起來(lái)就很明顯了,如下圖:

          代碼如下:

          .wxml
          <view class="tooltip">
                  <view class="tooltip-text">我是一句提示內(nèi)容</view>
                  <view class="tooltip-triangle-top"></view>
                  <view class="tooltip-triangle"></view>
          </view>

          .wxss
          .tooltip {
              max-width400rpx;
              margin-left20rpx;
              position: relative;
          }

          .tooltip-text {
              padding15rpx;
              background#fff;
              border-radius5rpx;
              border5rpx solid #002FA7;
          }

          .tooltip-triangle-top {
              position: absolute;
              top71rpx;
              left200rpx;
              border-width30rpx;
              border-left-width20rpx;
              border-right-width20rpx;
              border-color#FFF transparent transparent transparent;
              border-style: solid;
              width0px;
              height0px;
              z-index10;
          }

          .tooltip-triangle {
              position: absolute;
              top76rpx;
              left200rpx;
              border-width30rpx;
              border-left-width20rpx;
              border-right-width20rpx;
              border-color#002FA7 transparent transparent transparent;
              border-style: solid;
              width0px;
              height0px;
          }

          矩形旋轉(zhuǎn)

          只需要兩個(gè)同樣位置的矩形,然后旋轉(zhuǎn)上邊的矩形即可。旋轉(zhuǎn)過(guò)來(lái)的三角形的長(zhǎng)邊就是原來(lái)矩形的長(zhǎng),三角形邊長(zhǎng)比是11 比根號(hào) 2。所以原有矩形的長(zhǎng)寬比應(yīng)該為根號(hào) 21。即,width = 1.41 * height 。

          代碼的話,我們用偽元素矩形旋轉(zhuǎn),另一個(gè)矩形設(shè)置 overflow:hidden 即可。

          .wxml
          <view class="tooltip">
                  <view class="tooltip-text">我是一句提示內(nèi)容</view>
                  <view class="tooltip-triangle"></view>
          </view>

          .wxss
          .tooltip {
              max-width400rpx;
              position: relative;
          }

          .tooltip-text {
              padding15rpx;
              background#002FA7;
              border-radius5rpx;
              color#FFF;
          }


          .tooltip-triangle {
              position: relative;
              left150rpx;
              widthcalc(30rpx * 1.41);
              height30rpx;
              overflow: hidden;
          }


          .tooltip-triangle::before {
              content'';
              width100%;
              height100%;
              background#002FA7;
              display: block;
              transformrotate(-45deg);
              transform-origin: left top;
          }

          由于我們?nèi)切问怯删匦紊傻?,所以帶邊框?tooltip  相對(duì) border 的方法就容易多了。

          我們只需要給偽元素設(shè)置邊框即可。

          .wxss
          .tooltip {
              max-width400rpx;
              position: relative;
          }

          .tooltip-text {
              padding15rpx;
              background#f5f8ff;
              color#494949;
              border-radius5rpx;
              border4rpx solid #002fa7;
          }


          .tooltip-triangle {
              position: relative;
              left150rpx;
              widthcalc(30rpx * 1.41);
              height30rpx;
              overflow: hidden;
          }


          .tooltip-triangle::before {
              content'';
              border4rpx solid #002fa7;
              background#f5f8ff;
              width100%;
              height100%;
              display: block;
              transformrotate(-45deg);
              transform-origin: left top;
              box-sizing: border-box;
              border-radius8rpx;
          }

          此時(shí)出現(xiàn)了一個(gè)問(wèn)題,上邊矩形的 border 露了出來(lái)。

          這里用一個(gè) trick 的方法,我們?cè)谠芯匦紊线吋右粋€(gè) border 蓋住上邊矩形的邊框。

          .wxss 添加下邊的屬性
          .tooltip-triangle {
              border-top4rpx solid #f5f8ff;
              bottom8rpx;
          }

          此外,帶弧角的三角形,我們也只需要在偽元素矩形上設(shè)置圓角即可。

          .wxss 添加下邊的屬性
          .tooltip-triangle::before 
              border-radius: 8rpx;
          }

          clip-path

          下邊這種 tooltip 類型,小三角延伸了背景圖片(背景圖片 url 可能不是固定的),上邊幾種方法都是無(wú)能為力的。

          此時(shí)就需要 clip-path 屬性了,我們可以在 clippy 快速生成我們需要的多邊形路徑。

          https://bennettfeely.com/clippy/


          polygon 就是畫多邊形,然后給定各個(gè)點(diǎn)的坐標(biāo)即可,代碼中各個(gè)顏色和圖片中的各個(gè)點(diǎn)是對(duì)應(yīng)的。

          然后我們把上邊的代碼復(fù)制過(guò)來(lái)即可。

          .wxml
          <view class="tooltip">
                  <image src="https://windliangblog.oss-cn-beijing.aliyuncs.com/meituan4.jpgclass="tooltip-text"></image>
          </view>

          .wxss
          .tooltip {
              max-width400rpx;
              position: relative;
          }

          .tooltip-text {
              width400rpx;
              height200rpx;
              overflow: hidden;
              clip-pathpolygon(0% 0%, 100% 0%, 100% 80%, 70% 80%, 63% 100%, 55% 80%, 1% 80%);
          }

          使用 clip-path 的話 border 和圓角就比較難搞了,因?yàn)樽钕逻叺倪吰鋵?shí)是被截掉了。

          Web 頁(yè)面中可以使用 SVG 來(lái)實(shí)現(xiàn)想要的效果,可以 參考這里 的一個(gè)回答。

          https://stackoverflow.com/questions/31854185/how-to-add-border-in-my-clip-path-polygon-css-style

          但在小程序中我沒(méi)想到好方法,歡迎大家和我交流。

          上邊主要介紹了貼圖、border、矩形旋轉(zhuǎn)、clip-path四種方法。日常開發(fā)中,border 方案基本滿足需要了,偷懶的話也可以直接找設(shè)計(jì)要圖。大家還用過(guò)其他方法嗎?


          這還不「分享、點(diǎn)贊、在看」三連擊嘛


          瀏覽 58
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  玖草福利 | 男女拍拍拍拍免费视频 | 精品无码产区一区二 | 久操资源站 | 国产乱伦AV片 |