日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

淺談CSS不規(guī)則邊框的生成方案

瀏覽:4日期:2022-06-02 15:30:42
目錄
  • 需求背景,給不規(guī)則圖形添加邊框
  • 嘗試使用 drop-shadow 添加邊框
  • 使用 SVG feMorphology 濾鏡添加邊框
    • feMorphology 濾鏡
  • 總結(jié)

    需求背景,給不規(guī)則圖形添加邊框

    在我們?nèi)粘i_(kāi)發(fā)中,時(shí)長(zhǎng)會(huì)遇到一些非矩形、非圓形的圖案。類似下面這些:

    使用純 CSS,搭配一些技巧,是可以制作出上面的圖形的,當(dāng)然這只是需求的第一步。

    緊接著,可能會(huì)有要給上述圖形添加邊框的訴求,這個(gè)時(shí)候,CSS 就很難辦到了。

    嘗試使用 drop-shadow 添加邊框

    第一種方法,我們可以嘗試使用 drop-shadow,給不規(guī)則的圖形,添加一個(gè)外陰影。

    我們以一個(gè)箭頭圖形為例使用 CSS 簡(jiǎn)單實(shí)現(xiàn)它的其中一種方式如下:

    <div></div>
    .arrow-button {position: relative;width: 180px;height: 64px;background: #f49714;&::after {content: "";position: absolute;width: 32px;height: 64px;top: 0;right: -32px;background:linear-gradient(-45deg, transparent 0, transparent 22px, #f49714 22px, #f49714 100%),linear-gradient(-135deg, transparent 0, transparent 22px, #f49714 22px, #f49714 100%);background-size: 32px 32px;background-repeat: no-repeat;background-position: 0 bottom, 0 top;}}

    我們通過(guò)給 .arrow-button 添加一個(gè) drop-shadow,可以實(shí)現(xiàn)給不規(guī)則圖形添加一個(gè)陰影,效果如下:

    .arrow-button {...filter: drop-shadow(0px 0px 2px #000);...}

    drop-shadow 方案的局限性

    使用 drop-shadow 方案的局限性在于,drop-shadow 只能對(duì)不規(guī)則圖形生成陰影,無(wú)法生成不帶模糊的邊框效果。

    上述圖形添加 drop-shadow 的效果如下,與我們想要的實(shí)體不帶模糊的邊框還是差了一點(diǎn):

    使用 SVG feMorphology 濾鏡添加邊框

    我們還可以換個(gè)思路,復(fù)制一個(gè)原圖形,再將其稍微放大一點(diǎn)點(diǎn)改變?yōu)檫吙虻念伾缓髢蓚€(gè)圖形疊加在一起,就能夠生成一個(gè)帶邊框的不規(guī)則圖形了。

    CSS 中也有能夠放大元素的能力 transform: scale(),但是本身實(shí)現(xiàn)一個(gè)原圖形的代碼可能已經(jīng)非常復(fù)雜了,再疊加一個(gè)可能會(huì)顯得不太優(yōu)雅,我們得另辟蹊徑,尋找其他類似的實(shí)現(xiàn)方案。

    這里,我們嘗試使用 SVG的 feMorphology 濾鏡來(lái)實(shí)現(xiàn)給不規(guī)則圖形添加邊框。

    如果你對(duì) SVG 濾鏡還不算太了解,可以簡(jiǎn)單看看我的這篇文章入門(mén):有意思!強(qiáng)大的 SVG 濾鏡

    簡(jiǎn)單介紹下 feMorphology 濾鏡

    feMorphology 濾鏡

    feMorphology 為形態(tài)濾鏡,它的輸入源通常是圖形的 alpha 通道,用來(lái)它的兩個(gè)操作可以使源圖形腐蝕(變薄)或擴(kuò)張(加粗)。

    使用屬性 operator 確定是要腐蝕效果還是擴(kuò)張效果。使用屬性 radius 表示效果的程度,可以理解為筆觸的大小。

    operator:erode 腐蝕模式,dilate 為擴(kuò)張模式,默認(rèn)為 eroder

    adius:筆觸的大小,接受一個(gè)數(shù)字,表示該模式下的效果程度,默認(rèn)為 0

    我們將這個(gè)濾鏡簡(jiǎn)單的應(yīng)用到文字上看看效果:

    <div><p>Normal Text</p><p>Normal Text</p><p>Normal Text</p></div><svg width="0" height="0"><filter id="dilate"><feMorphology in="SourceAlpha" result="DILATED" operator="dilate" radius="3"></feMorphology></filter><filter id="erode"><feMorphology in="SourceAlpha" result="ERODE" operator="erode" radius="1"></feMorphology></filter></svg>
    p {font-size: 64px;}.dilate {filter: url(#dilate);}.erode {filter: url(#erode);}

    效果如下:最左邊的是正常文字,中間的是擴(kuò)張的模式,右邊的是腐蝕模式,看看效果,非常好理解:

    借用 feMorphology 的擴(kuò)張能力給不規(guī)則圖形添加邊框

    利用 feMorphology 的擴(kuò)張能力,我們可以提前準(zhǔn)備好一個(gè) SVG feMorphology 濾鏡,其作用就是上述所說(shuō)的:

    復(fù)制一個(gè)原圖形,再將其稍微放大一點(diǎn)點(diǎn)改變?yōu)檫吙虻念伾缓髢蓚€(gè)圖形疊加在一起,就能夠生成一個(gè)帶邊框的不規(guī)則圖形了。

    并且 SVG 濾鏡可以非常簡(jiǎn)單的通過(guò) CSS Filter 的 url 模式引入到各個(gè)不同的圖形當(dāng)中去,復(fù)用性非常的高。

    該濾鏡的簡(jiǎn)單代碼如下:

    <svg width="0" height="0"><filter id="outline"><feMorphology in="SourceAlpha" result="DILATED" operator="dilate" radius="1"></feMorphology><feMerge><feMergeNode in="DILATED" /><feMergeNode in="SourceGraphic" /></feMerge></filter></svg>

    簡(jiǎn)單淺析一下這段 SVG 濾鏡代碼:

    1.<feMorphology in="SourceAlpha" result="DILATED" operator="dilate" radius="1"></feMorphology> 將原圖的不透明部分作為輸入,采用了 dilate 擴(kuò)張模式且程度為 radius="1",生成了一個(gè)比原圖大 1px 的黑色圖塊

    2.使用 feMerge 將黑色圖塊和原圖疊加在一起

    我們還是給上述的 .arrow-button 添加一個(gè) CSS filter filter: url(#outline),引入我們創(chuàng)建的 SVG 濾鏡:

    .arrow-button {...filter: url(#outline);...}

    url 是 CSS 濾鏡屬性的關(guān)鍵字之一,url 模式是 CSS 濾鏡提供的能力之一,允許我們引入特定的 SVG 過(guò)濾器,這極大的增強(qiáng) CSS 中濾鏡的能力。

    看看效果:

    Wow,這下成功了,通過(guò) feMorphology 濾鏡,我們成功的實(shí)現(xiàn)了給不規(guī)則的圖形添加了邊框效果,我能可以通過(guò)控制濾鏡中的 radius="1" 來(lái)控制邊框的大小。

    再將上述濾鏡運(yùn)用在各種不規(guī)則圖形下看看效果:

    效果還算可以,就是顏色是黑色的。如果我們希望邊框的顏色是其他顏色,有沒(méi)有辦法呢?

    輔以 feFlood 和 feComposite 改變邊框顏色

    通過(guò) feFlood 和 feComposite 兩個(gè) SVG 濾鏡,可以給生成的圖塊上不同的顏色,代碼如下:

    <svg width="0" height="0"><filter id="outline"><feMorphology in="SourceAlpha" result="DILATED" operator="dilate" radius="1"></feMorphology><feFlood flood-color="green" flood-opacity="1" result="flood"></feFlood><feComposite in="flood" in2="DILATED" operator="in" result="OUTLINE"></feComposite><feMerge><feMergeNode in="OUTLINE" /><feMergeNode in="SourceGraphic" /></feMerge></filter></svg>

    通過(guò) feFlood 中的 flood-color="green",即可控制生成的邊框(圖塊)的顏色,這里設(shè)置為了綠色。應(yīng)用到各個(gè)圖形上的效果如下:

    至此,我們實(shí)現(xiàn)了通過(guò) SVG 濾鏡實(shí)現(xiàn)對(duì)不規(guī)則圖形添加不同顏色的邊框。

    總結(jié)

    簡(jiǎn)單的總結(jié)一下:

    • 使用 drop-shadow 可以實(shí)現(xiàn)給不規(guī)則圖形添加陰影,但是無(wú)法實(shí)現(xiàn)給不規(guī)則圖形添加實(shí)體不帶模糊的邊框
    • 使用 feMorphology SVG 濾鏡可以實(shí)現(xiàn)給給不規(guī)則圖形添加邊框效果,通過(guò)控制 radius="1" 可以調(diào)節(jié)邊框的大小
    • 使用 feMorphology 輔以 feFlood 和 feComposite 濾鏡改變邊框顏色
    • 通過(guò) CSS Filter 的 url 模式,可以快速的將 SVG 濾鏡引入 HTML 元素,例如 filter: url(#outline)

    值得注意的是,由于圖形高寬不是 1:1 的,并且 feMorphology 的 dilate 模式也不會(huì)根據(jù)元素的高寬等比例的擴(kuò)張,所以生成的邊框是不一定在各處的均勻相等的,而 feMorphology 的 radius 屬性可以傳入兩個(gè)值,使用空格分離,分別表示橫向與縱向的擴(kuò)張大小,實(shí)際使用的時(shí)候可以微調(diào)一下。

    本文更多的是提供一種不規(guī)則邊框的生成方案思路,當(dāng)然,具體遇到這種情況大部分還是會(huì)以切圖為主,不過(guò)多了解掌握一種可行方法也不是壞事。

    以上就是淺談CSS不規(guī)則邊框的生成方案的詳細(xì)內(nèi)容,更多關(guān)于CSS不規(guī)則邊框的生成方案的資料請(qǐng)關(guān)注其它相關(guān)文章!

    標(biāo)簽: CSS HTML
    相關(guān)文章:
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    中文不卡在线| 国产精品免费精品自在线观看| 亚洲国产成人精品女人| 精品三级av| 九色porny丨国产首页在线| 欧美激情aⅴ一区二区三区| 麻豆一区二区三| 欧美日韩色图| 欧美日韩夜夜| 国产aa精品| 蜜桃视频免费观看一区| 国产一卡不卡| 久久激情综合网| 精品视频黄色| 欧美aa在线观看| 国产午夜久久| 午夜亚洲福利在线老司机| 国产一区二区三区四区五区传媒| 亚洲福利精品| 久久精品国产99国产精品| 日韩一区二区三区免费视频 | 午夜精品一区二区三区国产| а√天堂8资源在线| 久久天堂精品| 国产午夜精品一区二区三区欧美 | 欧美一级久久| 国产成年精品| 亚洲福利国产| 日韩高清欧美激情| 精品亚洲二区| 亚洲午夜电影| 日韩专区欧美专区| 国产欧美日韩免费观看| av日韩中文| 国产精品外国| 极品日韩av| 国产一区二区三区精品在线观看 | 激情五月色综合国产精品| 国产日韩欧美中文在线| 亚洲成人精选| 久久国产直播| 黄色网一区二区| 国产精品v日韩精品v欧美精品网站 | 麻豆精品视频在线观看| 国产婷婷精品| 亚洲电影有码| 中文字幕亚洲影视| 99久久久久久中文字幕一区| 黑丝美女一区二区| 亚洲一区网站| 99久久99久久精品国产片果冰| 伊人久久视频| 国产精品激情| 超碰成人av| 亚洲丝袜啪啪| 欧美国产小视频| 免费人成黄页网站在线一区二区 | 久久91导航| 亚洲一区导航| 99久久99久久精品国产片果冰| 欧美亚洲自偷自偷| 久久亚洲在线| 国产精品一区二区三区四区在线观看 | 亚洲精品看片| 日日摸夜夜添夜夜添国产精品| 亚洲视频www| 不卡中文字幕| 久久精品免费一区二区三区 | 国产日韩视频| 91欧美在线| 先锋亚洲精品| 国产精品chinese| 日韩精品电影| 亚洲精品日本| 999久久久亚洲| 亚洲免费精品| 日本成人在线视频网站| 高清一区二区三区| 亚洲永久av| 欧美精品一线| 国产成人精品一区二区三区免费 | 国产99久久| 香蕉成人av| 91精品国产经典在线观看| 婷婷亚洲综合| 欧美日韩视频网站| 精品一区二区男人吃奶| 一二三区精品| 亚洲精品一二三区区别| 97精品一区| 欧美精品97| 青青伊人久久| 最新国产精品视频| 日韩视频在线一区二区三区| 日韩欧美在线中字| 久久伊人久久| 国产精品美女午夜爽爽| 午夜天堂精品久久久久| 中日韩男男gay无套| 韩日一区二区| 国产传媒在线观看| 国产日韩精品视频一区二区三区| 免费观看亚洲天堂| 水野朝阳av一区二区三区| 精品欧美久久| 98精品久久久久久久| 国产一级成人av| 亚洲tv在线| 国产另类在线| 亚洲精品女人| 青草国产精品久久久久久| 亚洲免费福利一区| 日本精品国产| 国产成人在线中文字幕| 樱桃视频成人在线观看| 久久美女性网| 日韩大片在线播放| 男女精品网站| 日韩av福利| 日本在线高清| 国产精品久久久久77777丨| 日韩av中文字幕一区二区三区| 国产欧美欧美| 中文在线а√天堂| 国产精品av久久久久久麻豆网| 精精国产xxxx视频在线野外| 激情欧美一区二区三区| 欧美综合国产| 亚洲我射av| 日本在线视频一区二区| 97成人在线| 国产精品.xx视频.xxtv| 日韩不卡手机在线v区| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲综合另类| 自拍自偷一区二区三区| 色8久久久久| 国产欧美91| 精品中国亚洲| 日韩一区欧美| 欧美特黄一级| 蜜桃视频一区二区三区| 国产情侣一区在线| 久久gogo国模啪啪裸体| 四虎国产精品免费观看| 蜜桃视频第一区免费观看| 国产乱子精品一区二区在线观看| 亚洲精品伊人| 久久国产人妖系列| 亚洲综合在线电影| 日韩综合小视频| 电影亚洲精品噜噜在线观看| 欧美一区自拍| 国产婷婷精品| 伊人久久亚洲热| 国产精品115| 91p九色成人| 日韩一级不卡| 久久久成人网| 91亚洲国产| 成人午夜毛片| 国产黄色一区| 免费看日韩精品| 亚洲综合电影| av高清不卡| 欧美日韩国产观看视频| 亚洲综合另类| 亚洲人www| 成人羞羞在线观看网站| а√天堂8资源中文在线| 国产精品主播| 国产激情一区| 久久精品国产成人一区二区三区| 免费日韩视频| 黄色aa久久| 亚洲97av| 国际精品欧美精品| 国产精选在线| 三级欧美在线一区| 欧美黄色精品| 免费久久精品| 国产探花一区在线观看| 日韩欧美一区二区三区免费观看| 视频在线观看一区| 久久婷婷国产| 亚洲自拍另类| 电影91久久久| 亚洲精品人人| 国产在线|日韩| 久久国产婷婷国产香蕉| 日韩欧美另类一区二区| 日韩中文字幕无砖| 精品免费视频| 日韩精品一区第一页| 高清久久精品| 亚洲日本免费电影| 国产精品白丝av嫩草影院| 亚洲人妖在线| 国产精品中文字幕制服诱惑| 国产精品第一国产精品|