亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
通過濾鏡實(shí)現(xiàn)圓角圓弧
使用 filter: contrast() 配合 filter: blur() 實(shí)現(xiàn)波浪效果
SVG 濾鏡,讓使用更簡(jiǎn)單
總結(jié)一下
首頁 web前端 css教程 另辟蹊徑!看看使用CSS濾鏡怎么構(gòu)建圓角和波浪效果

另辟蹊徑!看看使用CSS濾鏡怎么構(gòu)建圓角和波浪效果

Oct 18, 2022 pm 08:21 PM
css 濾鏡

本篇文章帶大家另辟蹊徑,聊聊使用CSS濾鏡構(gòu)建圓角的方法,并利用圓角聊聊實(shí)現(xiàn)波浪效果的方法,希望對(duì)大家有所幫助!

另辟蹊徑!看看使用CSS濾鏡怎么構(gòu)建圓角和波浪效果

【學(xué)習(xí)視頻分享:css視頻教程、web前端

首先,我們來看這樣一個(gè)圖形:

一個(gè)矩形,沒什么特別的,代碼如下:

div?{
????width:?200px;
????height:?40px;
????background-color:?#000;
}

如果,我們現(xiàn)在需要給這個(gè)矩形的兩端加上圓角,像是這樣,該怎么做呢:

So easy,不過就是加個(gè) border-radius 而已:

div?{
????width:?200px;
????height:?40px;
??+?border-radius:?40px;
????background-color:?#000;
}

好,那如果,不再是直線,而是一條曲線,希望曲線兩端,帶有圓角,像是這樣,又該怎么辦呢:

image

到這,基本上觸及了傳統(tǒng) CSS 的天花板,想通過一個(gè)屬性搞定這個(gè)效果是不太可能了。

當(dāng)然,有這樣一種方式,通過首尾兩端,利用兩個(gè)偽元素,實(shí)現(xiàn)兩個(gè)圓形,疊加上去:

emm,這也是一個(gè)可行的方案,主要是定位會(huì)稍微有點(diǎn)點(diǎn)麻煩。那么除了這個(gè)方式以及直接使用 SVG 外,還有沒有其他方法能夠?qū)崿F(xiàn)帶圓角的曲線?

有!在 CSS 中,我們還可以通過 filter: contrast() 配合 filter: blur() 這對(duì)組合來實(shí)現(xiàn)這個(gè)圖形。

filter: contrast() 配合 filter: blur() 的奇妙化學(xué)作用

神奇的濾鏡!巧妙實(shí)現(xiàn)內(nèi)凹的平滑圓角 一文中,其實(shí)已經(jīng)介紹過這個(gè)組合的另類用法。

經(jīng)常閱讀我的文章的小伙伴,對(duì) filter: contrast() 配合 filter: blur() 的組合一定不陌生,上經(jīng)典的一張圖:

單獨(dú)將兩個(gè)濾鏡拿出來,它們的作用分別是:

  • filter: blur(): 給圖像設(shè)置高斯模糊效果。

  • filter: contrast(): 調(diào)整圖像的對(duì)比度。

但是,當(dāng)他們“合體”的時(shí)候,產(chǎn)生了奇妙的融合現(xiàn)象。

仔細(xì)看兩圓相交的過程,在邊與邊接觸的時(shí)候,會(huì)產(chǎn)生一種邊界融合的效果,通過對(duì)比度濾鏡把高斯模糊的模糊邊緣給干掉,利用高斯模糊實(shí)現(xiàn)融合效果。

當(dāng)然,重點(diǎn)來了,blur 與 contrast 濾鏡的組合不僅能用于這種融合效果,其特殊的性質(zhì)使得它們的組合可以將直角變成圓角!

先看看之前的一個(gè)例子:

首先,我們只需要實(shí)現(xiàn)這樣一個(gè)圖形:

<div class="g-container">
????<div class="g-content">
????????<div class="g-filter"></div>
????</div>
</div>
.g-container?{
????position:?relative;
????width:?300px;
????height:?100px;
????
????.g-content?{
????????height:?100px;
????????
????????.g-filter?{
????????????height:?100px;
????????????background:?radial-gradient(circle?at?50%?-10px,?transparent?0,?transparent?39px,?#000?40px,?#000);
????????}
????}
}

得到這樣一個(gè)簡(jiǎn)單的圖形:

看到這里,肯定會(huì)疑惑,為什么這個(gè)圖形需要用 3 層 div 嵌套的方式?不是一個(gè) div 就足夠了嗎?

是因?yàn)槲覀冇忠\(yùn)用 filter: contrast()filter: blur() 這對(duì)神奇的組合。

我們簡(jiǎn)單改造一下上述代碼,仔細(xì)觀察和上述 CSS 的異同:

.g-container?{
????position:?relative;
????width:?300px;
????height:?100px;
????
????.g-content?{
????????height:?100px;
????????filter:?contrast(20);
????????background-color:?white;
????????overflow:?hidden;
????????
????????.g-filter?{
????????????filter:?blur(10px);
????????????height:?100px;
????????????background:?radial-gradient(circle?at?50%?-10px,?transparent?0,?transparent?29px,?#000?40px,?#000);
????????}
????}
}

我們給 .g-content 添加了 filter: contrast(20)background-color: white,給 .g-filter 添加了 filter: blur(10px)。

神奇的事情發(fā)生了,我們得到了這樣一個(gè)效果:

通過對(duì)比度濾鏡把高斯模糊的模糊邊緣給干掉,將原本的直角,變成了圓角,Amazing。

通過一個(gè) Gif 圖更直觀的感受:


完整的代碼你可以戳這里:CodePen Demo - Smooth concave rounded corners By filter

通過濾鏡實(shí)現(xiàn)圓角圓弧

到這里,你應(yīng)該知道如何通過直角圓弧得到圓角圓弧了。就是借助 filter: contrast() 配合 filter: blur() 的組合。

直接上代碼:

div?{
????position:?relative;
????width:?250px;
????height:?250px;
????filter:?contrast(20);
????background-color:?#fff;
????overflow:?hidden;
}
div::before?{
????content:?"";
????position:?absolute;
????top:?0;
????left:?0;
????bottom:?0;
????right:?0;
????filter:?blur(7px);
????border:?25px?solid?transparent;
????border-bottom:?25px?solid?#000;
????border-radius:?50%;
}

效果如下:

通過 Gif 看,更加直觀:

CodePen Demo -- Arc with rounded corners

使用 filter: contrast() 配合 filter: blur() 實(shí)現(xiàn)波浪效果

好了,有了上面的鋪墊,我們?cè)賮砜匆粋€(gè)有意思的。使用 filter: contrast() 配合 filter: blur() 實(shí)現(xiàn)波浪效果。

在之前,我們?nèi)绻胧褂眉?CSS,實(shí)現(xiàn)下述的波浪效果,是非常的困難的:

這種波浪效果,通常會(huì)使用在優(yōu)惠券等切圖中:

在之前,我們是怎么去做的呢?如果不切圖,使用純 CSS 的話,需要使用兩層漸變進(jìn)行疊加,大概是這樣,感受一下:

bgg2

其代碼也比較復(fù)雜,需要不斷的調(diào)試漸變,使兩個(gè)徑向漸變吻合:

div?{
????position:?relative;
????width:?400px;
????height:?160px;
????background:?linear-gradient(90deg,?#945700?0%,?#f49714?100%);
????
????&::before,
????&::after?{
????????content:?"";
????????position:?absolute;
????????top:?0;
????????right:?0;
????????bottom?:0;
????}
????&::before?{
????????width:?10px;
????????background-image:?radial-gradient(circle?at?-5px?10px,?transparent?12px,?#fff?13px,?#fff?0px);
????????background-size:?20px?20px;
????????background-position:?0?15px;
????}
????&::after?{
????????width:?15px;
????????background-image:?radial-gradient(circle?at?15px?10px,?#fff?12px,?transparent?13px,?transparent?0px);
????????background-size:?20px?40px;
????????background-position:?0?15px;
????}
}

那么,如果使用 filter: contrast() 配合 filter: blur() 的話,整個(gè)過程將會(huì)變得非常簡(jiǎn)單。

我們只需要實(shí)現(xiàn)這樣一個(gè)圖形:

這個(gè)圖形使用漸變是容易得到的:

div?{
????background:?radial-gradient(circle?at?20px?0,?transparent,?transparent?20px,?#000?21px,?#000?40px);
????background-size:?80px?100%;
}

按照上文介紹的技巧,只需要應(yīng)用上 filter: contrast() 配合 filter: blur(),就能將銳利的直角轉(zhuǎn)化成圓角。我們嘗試一下:

<div class="g-container">
????<div class="g-inner"></div>
</div>
.g-container?{
????position:?relative;
????margin:?auto;
????height:?200px;
????padding-top:?100px;
????filter:?contrast(20);
????background-color:?#fff;
????overflow:?hidden;
}

.g-inner?{
????position:?relative;
????height:?200px;
????background:?radial-gradient(circle?at?20px?0,?transparent,?transparent?20px,?#000?21px,?#000?40px);
????background-size:?80px?100%;
????filter:?blur(10px)
}

可以寫在 1 個(gè) DIV 里面(通過元素和它的偽元素構(gòu)造父子關(guān)系),也可以用 2 個(gè),都可以,問題不大。

得到如下所示的波浪圖形:

我們希望它波浪的地方的確是波了,但是我們不希望的地方,它也變成了圓角:

這是 filter: blur() 的一個(gè)問題,好在,我們是可以使用 backdrop-filter() 去規(guī)避掉這個(gè)問題的,我們簡(jiǎn)單改造下代碼:

.g-container?{
????position:?relative;
????width:?380px;
????padding-top:?100px;
????filter:?contrast(20);
????background-color:?#fff;
????overflow:?hidden;
????
????&::before?{
????????content:?"";
????????position:?absolute;
????????top:?0;
????????left:?0;
????????bottom:?0;
????????right:?0;
????????backdrop-filter:?blur(10px);
????????z-index:?1;
????}
}
.g-inner?{
????position:?relative;
????width:?380px;
????height:?100px;
????background:?radial-gradient(circle?at?20px?0,?transparent,?transparent?20px,?#000?21px,?#000?40px);
????background-size:?80px?100%;
}

這樣,我們就實(shí)現(xiàn)了一份完美的波浪效果:

部分同學(xué)可能對(duì)上面的 padding-top 100px 有所疑惑,這個(gè)也是目前我所發(fā)現(xiàn)的一個(gè) BUG,暫未解決,不影響使用,你可以嘗試將 padding-top: 100px 替換成 height: 100px。

基于這種方式實(shí)現(xiàn)的波浪效果,我們甚至可以給它加上動(dòng)畫,讓他動(dòng)起來,也非常的好做,簡(jiǎn)單改造下代碼:

.g-inner?{
????position:?relative;
??-?width:?380px;
??+?width:?480px;
????height:?100px;
????background:?radial-gradient(circle?at?20px?0,?transparent,?transparent?20px,?#000?21px,?#000?40px);
????background-size:?80px?100%;
??+?animation:?move?1s?infinite?linear;?
}

@keyframes?move?{
????100%?{
????????transform:?translate(-80px,?0);
????}
}

通過一個(gè)簡(jiǎn)單的位移動(dòng)畫,并且使之首尾幀一致,看上去就是連續(xù)的:

完整的代碼,你可以戳這里:CodePen Demo -- Pure CSS Wave

SVG 濾鏡,讓使用更簡(jiǎn)單

這就結(jié)束了嗎?沒有!上述雙濾鏡的組合固然強(qiáng)大,確實(shí)還是有一點(diǎn)麻煩。

再補(bǔ)充一種 SVG 濾鏡的方案。這里,對(duì)于大部分場(chǎng)景,我們可以借助 SVG 濾鏡,在 CSS 中一行引入,實(shí)現(xiàn)同樣的功能。

看這樣一個(gè) DEMO,我們有這樣一個(gè)三角形:

我們想通過它得到一個(gè)圓角三角形:

借助 SVG 濾鏡,其實(shí)也可以快速達(dá)成,省去了上面還需要疊加一個(gè) filter: contrast() 的煩惱:

<div class="g-triangle"></div>
<svg width="0">
????<filter id="blur" color-interpolation-filters="sRGB">
??????<feGaussianBlur stdDeviation="10" />
??????<feComponentTransfer>
??????????<feFuncA type="table" tableValues="0 0 10"/>
??????</feComponentTransfer>
????</filter>
</svg>
div?{
????????border:?60px?solid?transparent;
????????border-left:?120px?solid?#f48;
????????filter:?url(#blur);
}

效果如下:

是的,利用 filter: url(xxx) 可以快速引入一個(gè)定義好的 SVG 濾鏡。也可以這樣,直接嵌入到 URL 中:

div?{
????????border:?60px?solid?transparent;
????????border-left:?120px?solid?#f48;
????????filter:?url("data:image/svg+xml,%3Csvg?xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter?id='blur'?color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur?stdDeviation='10'/%3E%3CfeComponentTransfer%3E%3CfeFuncA?type='table'?tableValues='0?0?10'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3C/svg%3E#blur");
}

完整的代碼,你可以戳這里:CodePen Demo -- triangle with rounded corners and shadow

總結(jié)一下

本文介紹了一種使用 filter: contrast() 配合 filter: blur() 的方式,將直角圖形變?yōu)閳A角圖形的方式,在一些特定的場(chǎng)景下,可能有著妙用。同時(shí),在很多場(chǎng)景下,可以使用 SVG 濾鏡簡(jiǎn)化操作。

不過,這種方式也有幾個(gè)小缺陷:

  • 使用了 filter: contrast() 之后,圖形的尺寸可能相對(duì)而言會(huì)縮小一點(diǎn)點(diǎn),要達(dá)到固定所需尺寸的話,要一定的調(diào)試

  • 此方式產(chǎn)生的圖形,畢竟經(jīng)過了一次 filter: blur(),放大來看圖形會(huì)有一定的鋸齒,可以通過調(diào)整 contrast 和 blur 的大小盡可能的去除,但是沒法完全去掉

當(dāng)然,我覺得這兩個(gè)小缺點(diǎn)瑕不掩瑜,在特定的場(chǎng)景下,此方式還是有一定的用武之地的。

原文地址:https://www.cnblogs.com/coco1s/p/16516585.html

作者:ChokCoco

更多編程相關(guān)知識(shí),請(qǐng)?jiān)L問:編程視頻?。?/p>

以上是另辟蹊徑!看看使用CSS濾鏡怎么構(gòu)建圓角和波浪效果的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
如何用PHP搭建社交分享功能 PHP分享接口集成實(shí)戰(zhàn) 如何用PHP搭建社交分享功能 PHP分享接口集成實(shí)戰(zhàn) Jul 25, 2025 pm 08:51 PM

在PHP中搭建社交分享功能的核心方法是通過動(dòng)態(tài)生成符合各平臺(tái)要求的分享鏈接。1.首先獲取當(dāng)前頁面或指定的URL及文章信息;2.使用urlencode對(duì)參數(shù)進(jìn)行編碼;3.根據(jù)各平臺(tái)協(xié)議拼接生成分享鏈接;4.在前端展示鏈接供用戶點(diǎn)擊分享;5.動(dòng)態(tài)生成頁面OG標(biāo)簽優(yōu)化分享內(nèi)容展示;6.務(wù)必對(duì)用戶輸入進(jìn)行轉(zhuǎn)義以防止XSS攻擊。該方法無需復(fù)雜認(rèn)證,維護(hù)成本低,適用于大多數(shù)內(nèi)容分享需求。

PHP打造博客評(píng)論系統(tǒng)變現(xiàn) PHP評(píng)論審核與防刷策略 PHP打造博客評(píng)論系統(tǒng)變現(xiàn) PHP評(píng)論審核與防刷策略 Jul 25, 2025 pm 08:27 PM

1.評(píng)論系統(tǒng)商業(yè)價(jià)值最大化需結(jié)合原生廣告精準(zhǔn)投放、用戶付費(fèi)增值服務(wù)(如上傳圖片、評(píng)論置頂)、基于評(píng)論質(zhì)量的影響力激勵(lì)機(jī)制及合規(guī)匿名數(shù)據(jù)洞察變現(xiàn);2.審核策略應(yīng)采用前置審核 動(dòng)態(tài)關(guān)鍵詞過濾 用戶舉報(bào)機(jī)制組合,輔以評(píng)論質(zhì)量評(píng)分實(shí)現(xiàn)內(nèi)容分級(jí)曝光;3.防刷需構(gòu)建多層防御:reCAPTCHAv3無感驗(yàn)證、Honeypot蜜罐字段識(shí)別機(jī)器人、IP與時(shí)間戳頻率限制阻止灌水、內(nèi)容模式識(shí)別標(biāo)記可疑評(píng)論,持續(xù)迭代應(yīng)對(duì)攻擊。

什么是常見的CSS瀏覽器不一致? 什么是常見的CSS瀏覽器不一致? Jul 26, 2025 am 07:04 AM

不同瀏覽器對(duì)CSS解析存在差異,導(dǎo)致顯示效果不一致,主要包括默認(rèn)樣式差異、盒模型計(jì)算方式、Flexbox和Grid布局支持程度及某些CSS屬性行為不一致。1.默認(rèn)樣式處理不一致,解決方法是使用CSSReset或Normalize.css統(tǒng)一初始樣式;2.舊版IE的盒模型計(jì)算方式不同,建議統(tǒng)一使用box-sizing:border-box;3.Flexbox和Grid在邊緣情況或舊版本中表現(xiàn)有差異,應(yīng)多測(cè)試并使用Autoprefixer;4.某些CSS屬性行為不一致,需查閱CanIuse并提供降級(jí)

如何用Mac搭建PHP Nginx環(huán)境 MacOS配置Nginx與PHP服務(wù)組合 如何用Mac搭建PHP Nginx環(huán)境 MacOS配置Nginx與PHP服務(wù)組合 Jul 25, 2025 pm 08:24 PM

Homebrew在Mac環(huán)境搭建中的核心作用是簡(jiǎn)化軟件安裝與管理。1.Homebrew自動(dòng)處理依賴關(guān)系,將復(fù)雜的編譯安裝流程封裝為簡(jiǎn)單命令;2.提供統(tǒng)一的軟件包生態(tài),確保軟件安裝位置與配置標(biāo)準(zhǔn)化;3.集成服務(wù)管理功能,通過brewservices可便捷啟動(dòng)、停止服務(wù);4.便于軟件升級(jí)與維護(hù),提升系統(tǒng)安全性與功能性。

描述'垂直align”屬性及其典型用例 描述'垂直align”屬性及其典型用例 Jul 26, 2025 am 07:35 AM

1.ItAdjustSelementsLikeImagesRikeImagesOrformInputswithIntExtLineSustLineSlineSlineSlineSlikeLikeLikeBaseline,中間,Super,Super,Super和Sub.2.intablebecells,ItControlScontentalStalteNtalmscontentalMedwithThtop,Middle,Middle,Midder,Midder,經(jīng)常

什么是口音色的物業(yè)? 什么是口音色的物業(yè)? Jul 26, 2025 am 09:25 AM

accent-color是CSS中用于自定義復(fù)選框、單選按鈕和滑塊等表單元素高亮顏色的屬性;1.它直接改變表單控件選中狀態(tài)的默認(rèn)顏色,如將復(fù)選框的藍(lán)色勾選標(biāo)記改為紅色;2.支持的元素包括type="checkbox"、type="radio"和type="range"的輸入框;3.使用accent-color可避免復(fù)雜的自定義樣式和額外DOM結(jié)構(gòu),保持原生可訪問性;4.現(xiàn)代瀏覽器普遍支持,舊瀏覽器需降級(jí)處理;5.設(shè)置accent-col

如何將SCSS編譯到CSS? 如何將SCSS編譯到CSS? Jul 27, 2025 am 01:58 AM

installdartsassvianpmafterinstallingnode.jsusingnpminstall-gsass.2.compilescsstocssssusingthecommandSassInput.scsssoutput.css.3。 useass - watchinput.scssoutput.csstoauto-compileonsave.4.watchentirefolderswithsass-watchscss:css.5.usepartialswith_prefixfo

如何更改CSS中的文本顏色? 如何更改CSS中的文本顏色? Jul 27, 2025 am 04:25 AM

要改變CSS中文本顏色,需使用color屬性;1.使用color屬性可設(shè)置文本前景色,支持顏色名稱(如red)、十六進(jìn)制碼(如#ff0000)、RGB值(如rgb(255,0,0))、HSL值(如hsl(0,100%,50%))以及帶透明度的RGBA或HSLA(如rgba(255,0,0,0.5));2.可將顏色應(yīng)用于包含文本的任何元素,如h1至h6標(biāo)題、段落p、鏈接a(需注意a:link、a:visited、a:hover、a:active不同狀態(tài)的顏色設(shè)置)、按鈕、div、span等;3.最

See all articles