整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線:

          CSS如何快速實(shí)現(xiàn)下劃線動(dòng)畫(huà)效果!CSS交互動(dòng)畫(huà)代碼示例分析!

          寫(xiě)一個(gè)好的段落,需要注意幾個(gè)方面。需要有一個(gè)明確的中心思想,即段落所要表達(dá)的主題。需要有明確的支持和解釋中心思想的論據(jù)和例子。這些論據(jù)和例子應(yīng)該能夠幫助讀者更好地理解和接受中心思想。段落的結(jié)構(gòu)也很重要,需要有一個(gè)清晰的開(kāi)頭、主體和結(jié)尾。段落中使用的語(yǔ)言應(yīng)該簡(jiǎn)單明了,易于理解,避免使用過(guò)于復(fù)雜或難以理解的術(shù)語(yǔ)和語(yǔ)法。

          可以使用CSS中的偽類(lèi)選擇器和過(guò)渡效果來(lái)實(shí)現(xiàn)下劃線的交互動(dòng)畫(huà)效果。以下是一個(gè)簡(jiǎn)單的例子:

          HTML代碼:

          <a href="#">Hover me</a>

          CSS代碼:

          a {

          position: relative;

          text-decoration: none;

          }

          a::after {

          content: '';

          position: absolute;

          bottom: -2px;

          left: 0;

          width: 0;

          height: 2px;

          background-color: blue;

          transition: width 0.3s ease-in-out;

          }

          a:hover::after {

          width: 100%;

          }

          CSS下劃線交互效果代碼示例解釋?zhuān)?/strong>

          首先,將鏈接元素(<a>標(biāo)簽)的text-decoration屬性設(shè)置為none,以去除默認(rèn)的下劃線。

          然后,在鏈接元素上使用position: relative屬性,以使偽元素的位置相對(duì)于鏈接元素而不是文檔流定位。

          接下來(lái),在鏈接元素上使用::after偽類(lèi)選擇器,以創(chuàng)建一個(gè)偽元素(即鏈接下方的下劃線)。

          在偽元素上設(shè)置content: '',以使其顯示為空。

          設(shè)置偽元素的position屬性為absolute,使其相對(duì)于鏈接元素定位。

          將偽元素的bottom屬性設(shè)置為-2px,使其在鏈接下方,留出2像素的空白。

          將偽元素的left屬性設(shè)置為0,使其與鏈接元素左對(duì)齊。

          設(shè)置偽元素的width屬性為0,使其不可見(jiàn)。

          將偽元素的height屬性設(shè)置為2px,使其成為下劃線。

          將偽元素的background-color屬性設(shè)置為想要的顏色(在這個(gè)例子中是藍(lán)色)。

          最后,設(shè)置偽元素的過(guò)渡效果,使其在鼠標(biāo)懸停鏈接時(shí)漸變?yōu)?00%的寬度。

          續(xù)創(chuàng)作,加速成長(zhǎng)!這是我參與「掘金日新計(jì)劃 · 6 月更文挑戰(zhàn)」的第20天,點(diǎn)擊查看活動(dòng)詳情


          本文簡(jiǎn)介

          點(diǎn)贊 + 關(guān)注 + 收藏 = 學(xué)會(huì)了


          在 HTML 也好,Word 也好,基本都有下劃線和刪除線(中劃線)。

          Fabric.js 作為一個(gè)老牌 canvas 庫(kù),當(dāng)然也提供中劃線下劃線的配置啦,除此之外還提供了上劃線的配置。

          本文要講解的就是這3種裝飾線在 fabric.js 中的使用方法。除了初始化配置外,還支持項(xiàng)目運(yùn)行時(shí),讓用戶動(dòng)態(tài)配置。

          本文案例使用了 IText ,該組件支持編輯功能。



          初始化時(shí)設(shè)置

          這是上劃線、中劃線和下劃線的文檔:

          • 上劃線 overline
          • 中劃線 linethrough
          • 下劃線 underline


          <canvas id="c" width="300" height="300" style="border: 1px solid #ccc"></canvas>
          
          <script src="../../script/fabric.5.2.1.js"></script>
          <script>
            const canvas = new fabric.Canvas('c')
          
            const iText = new fabric.IText('aaa',{
              styles: {
                0: {
                  0: { overline: true }, // 上劃線
                  1: { linethrough: true }, // 中劃線
                  2: { underline: true } // 下劃線
                }
              }
            })
          
            canvas.add(iText)
          </script>
          

          本例只有3個(gè)字母 a ,而且都在同一行。

          styles 第一個(gè)元素的 key 為 0 的意思是第一行,行號(hào)下標(biāo)從0開(kāi)始。

          大概這個(gè)意思

          styles: {
            0: { // 第1行
              0:, // 第1行 第1個(gè)字
              1:, // 第1行 第2個(gè)字
              2:  // 第1行 第3個(gè)字
            }
          }
          

          如果需要換行,那就要根據(jù)行號(hào)來(lái)定義了。換行的方法是文本內(nèi)容里使用 \n 做換行。

          動(dòng)態(tài)設(shè)置

          除了在初始化時(shí)可以設(shè)置裝飾線外,F(xiàn)abric.js 也提供了在運(yùn)行時(shí)用戶手動(dòng)設(shè)置。不過(guò)代碼會(huì)稍微復(fù)雜一點(diǎn)。

          其實(shí)動(dòng)態(tài)設(shè)置上劃線、中劃線和下劃線的操作都是一樣的,唯一要變的就是屬性名。

          我以中劃線為例,之后上劃線和下劃線只需改個(gè)屬性名。

          <button onclick="linethrough()">中劃線</button>
          
          <canvas id="c" width="300" height="300" style="border: 1px solid #ccc"></canvas>
          
          <canvas id="c" width="300" height="300" style="border: 1px solid #ccc"></canvas>
          
          <!-- 引入fabric -->
          <script src="../../script/fabric.5.2.1.js"></script>
          <script>
            const canvas = new fabric.Canvas('c') // 初始化畫(huà)布
          
            const iText = new fabric.IText('hello wor\nld') // 創(chuàng)建文字
          
            canvas.add(iText)
          
            function linethrough() {
              let activeTxt = canvas.getActiveObject() // 獲取當(dāng)前選中的文字
          
              // 如果當(dāng)前沒(méi)選中文字,那什么都不操作
              if (!activeTxt) return
          
              // 判斷當(dāng)前是否進(jìn)入編輯狀態(tài)
              if (activeTxt.isEditing) {
                // 編輯狀態(tài)
                const state = activeTxt.getSelectionStyles().find(item => item.linethrough !== true)
          
                // 如果當(dāng)前
                if (!state || (JSON.stringify(state) === '{}' && activeTxt['linethrough'] === true)) {
                  // 如果當(dāng)前已經(jīng)設(shè)置了中劃線,那就把全局中劃線取消
                  activeTxt.setSelectionStyles({ 'linethrough': false })
                } else {
                  // 如果當(dāng)前沒(méi)設(shè)置中劃線,那就添加上中劃線
                  activeTxt.setSelectionStyles({ 'linethrough': true })
                }
              } else {
                // 選擇狀態(tài)
                if (activeTxt['linethrough'] === true) {
                  activeTxt.linethrough = false
                  activeTxt.dirty = true;
                  let s = activeTxt.styles
                  for(let i in s) {
                    for (let j in s[i]) {
                      s[i][j].linethrough = false
                    }
                  }
                } else {
                  activeTxt.linethrough = true
                  activeTxt.dirty = true;
                  let s = activeTxt.styles
                  for(let i in s) {
                    for (let j in s[i]) {
                      s[i][j].linethrough = true
                    }
                  }
                }
              }
          
              canvas.renderAll()
            }
          </script>
          

          上面的代碼主要做這幾步操作:

          1. 初始化畫(huà)布
          2. 創(chuàng)建文字
          3. 將文字添加到畫(huà)布中
          4. linethrough 方法添加或取消中劃線


          最主要的操作邏輯寫(xiě)在 linethrough 方法里了。

          linethrough 的邏輯如下

          1. 獲取當(dāng)前選中的文字
          2. 如果沒(méi)選中就不做任何操作
          3. 如果選中了,判斷是否進(jìn)入編輯狀態(tài)
          4. 編輯狀態(tài) 獲取當(dāng)前被選中文字的中劃線狀態(tài) 如果被選中文字設(shè)置了中劃線,就把中劃線取消掉 如果被選中文字沒(méi)設(shè)置中劃線,就添加中劃線
          5. 如果不是編輯狀態(tài),只是單擊了 iText 進(jìn)入框選狀態(tài) 如果需要全局取消中劃線 全局取消 循環(huán)每個(gè)字符,并取消每個(gè)字符的中劃線 需要全局設(shè)置中劃線 全局設(shè)置 再逐個(gè)字符單獨(dú)設(shè)置
          6. 重新渲染畫(huà)布



          代碼倉(cāng)庫(kù)

          ?IText 動(dòng)態(tài)設(shè)置裝飾線

          https://gitee.com/k21vin/fabricjs-demo/blob/master/tutorial/IText/styles04decoration.html

          端網(wǎng)頁(yè)的開(kāi)發(fā)中總是不可避免會(huì)使用到超鏈接,但是使用超鏈接時(shí)下面都會(huì)有一條下劃線,這在網(wǎng)頁(yè)中有時(shí)會(huì)顯得很突兀,不合適也不美觀,所以我們就需要將超鏈接下的這條下劃線給去掉.接下來(lái)給大家介紹Html下超鏈接去掉下劃線的方

          您可以使用CSS的text-decoration屬性來(lái)去掉超鏈接下劃線。只需將其設(shè)置為none即可,示例代碼如下:

          a{

          text-decoration: none;

          }

          這會(huì)將頁(yè)面中所有超錐接下劃線都去,如果您只想去掉某些超鏈接的下劃線,可以為這些鏈接添加一個(gè)特定的class,并針對(duì)該CIass設(shè)置上述CSS屬性。

          例子:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>css超鏈接去掉下劃線示例</title>

          <style>

          a{

          text-decoration: none;

          }

          </style>

          </head>

          <body>

          <a href="">大家再看我還有沒(méi)有下劃線了!</a>

          </body>

          </html>

          可以發(fā)現(xiàn),此時(shí)文本超鏈接下劃線是不是已經(jīng)去掉了?這個(gè)效果實(shí)現(xiàn)是不是非常簡(jiǎn)單呢?大家主要掌握一個(gè)樣式屬性就是text-decoration: none;這個(gè)屬性。給對(duì)應(yīng)的a標(biāo)簽文本添加這個(gè)屬性就可以去除文本超鏈接下劃線了


          擴(kuò)展資料:

          HTML 超鏈接(鏈接)的屬性:

          超鏈接可以是一個(gè)字,一個(gè)詞,或者一組詞,也可以是一幅圖像,您可以點(diǎn)擊這些內(nèi)容來(lái)跳轉(zhuǎn)到新的文檔或者當(dāng)前文檔中的某個(gè)部分。

          當(dāng)您把鼠標(biāo)指針移動(dòng)到網(wǎng)頁(yè)中的某個(gè)鏈接上時(shí),箭頭會(huì)變?yōu)橐恢恍∈帧?/span>

          我們通過(guò)使用 標(biāo)簽在 HTML 中創(chuàng)建鏈接。

          有兩種使用 標(biāo)簽的方式:

          1、通過(guò)使用 href 屬性 - 創(chuàng)建指向另一個(gè)文檔的鏈接;

          2、通過(guò)使用 name 屬性 - 創(chuàng)建文檔內(nèi)的書(shū)簽。


          主站蜘蛛池模板: 国产AV国片精品一区二区| 国产福利一区二区在线视频| 国产丝袜美女一区二区三区| 亚洲精品日韩一区二区小说| 一区二区免费国产在线观看| AA区一区二区三无码精片| 久久国产精品一区| 一区二区三区免费在线观看| 性色av无码免费一区二区三区| 亚洲国产美国国产综合一区二区| 香蕉视频一区二区三区| 鲁大师成人一区二区三区| 精品一区二区久久久久久久网精| 性无码免费一区二区三区在线| 精品国产一区二区三区香蕉事| 日韩视频在线一区| 国产精品一区不卡| 日本精品无码一区二区三区久久久| 波多野结衣电影区一区二区三区| 国产一区二区三区高清在线观看| 日本免费一区二区在线观看| 国产精品成人国产乱一区| 国产精品分类视频分类一区| 久久久精品日本一区二区三区| 韩国福利一区二区三区高清视频| 亚洲乱码国产一区三区| 99久久综合狠狠综合久久一区| 无码aⅴ精品一区二区三区| 无码8090精品久久一区| 精品人伦一区二区三区潘金莲| 综合一区自拍亚洲综合图区| 国产一区二区精品久久| 国精产品一区一区三区MBA下载| 日韩精品一区二区三区影院| 色妞色视频一区二区三区四区| 国产精品免费视频一区| 无码少妇一区二区性色AV| 国产精品亚洲综合一区在线观看| 亚洲乱色熟女一区二区三区丝袜| 无码精品一区二区三区| 久久一区二区三区免费播放|