CSS 故障藝術

2021-10-02 17:03:19 字數 4503 閱讀 5169

本文的主題是 glitch art,故障藝術。

什麼是故障藝術?我們熟知的抖音的 logo 正是故障藝術其中一種表現形式。它有一種魔幻的感覺,看起來具有閃爍、震動的效果,很吸引人眼球。

故障藝術它模擬了畫面訊號出現故障導致成像錯誤的感覺。青色色塊與紅色色塊無法重合就是這種故障的體現。從膠片時代開始到今天的數碼時代,這種故障一直是觀眾非常熟悉的現象。即使抖音的 logo 只是靜態的,大腦也會自己補完整個效果,甚至還會自己腦補訊號干擾的噪音。

當然,廣義的故障藝術不僅僅指這種效果,我覺得是很寬泛的,本文將介紹一些 css 能夠模擬完成的故障藝術效果。

首先從靜態的開始,抖音的 logo 就是很好的乙個例子。

它看著像是 3 個 j 形重疊在一起。而實際上,是兩個 j 形重疊在一起,重疊部分表現為白色,這個特性,使用 css 的混合模式mix-blend-mode非常好實現,而單個 j 形示意圖如下:

**於知乎:為什麼抖音的標誌,看起來具有「電」「閃爍」「震動」的感覺?

單個 j 形其實是由 3/4圓 + 豎線 + 1/4圓組成,使用乙個標籤即可完成(加上兩個偽元素)。

所以整個效果只需要兩個標籤:

簡易 sass **:

// 實現第乙個 j

.j &::after

}// 實現第二個 j,加上混合模式

.j:last-child

&::after

}

示意圖如下(為了更好理解,加上了動畫):

完整的 demo:

使用 mix-blend-mode 實現抖音 logo

當然,上面實現的是我們實現的 j 形的疊加,理解了這種技巧之後,我們可以把它運用到之上。

這裡我們會運用到background-blend-modemix-blend-mode

假設,我們有這樣一張圖:

只需要乙個標籤即可

給兩張同樣的,疊加上 青色#0ff和 紅色#f00,並且錯開一定的距離,兩張圖都要加上background-blend-mode: lighten,其中一張再加上mix-blend-mode: darken

.mix 

}

得到如下效果:

這裡與上述抖音 logo 的處理是有點不一樣的,使用的混合模式也不止一種,簡單解釋下。

因為本身不是紅色和青色的,所以需要通過background-image疊加上這兩種顏色,並通過background-blend-mode: lighten讓其表現出來

為了保持中間疊加部分的原色,需要再疊加乙個mix-blend-mode: darken反向處理一下。(不理解的同學可以開啟除錯,手動關掉幾個混合模式,自己感受感受即可)

完整的 demo:

的類抖音 logo glitch 效果

ok,有了上面的鋪墊,我們接下來可以給這種效果加上動畫。

看看效果:

類抖音 logo 文字故障效果

當然,我們也不是一定要使用混合模式去使得融合部分為白色,可以僅僅是使用這個配色效果,基於上面效果的另外乙個版本,沒有使用混合模式。

完整 demo 在這裡:

css文字故障效果

僅僅使用配色沒有使用混合模式的好處在於,對於每乙個文字的副本,有了更大的移動距離和可以處理的空間。

稍微替換一下文字文案為 404,再新增上一些濾鏡效果(hue-rotate()blur())嘿嘿,找到了乙個可能實際可用的場景:

效果一:

效果二:

兩個 404 效果的 demo 如下:

當然,不僅僅只有這一種紅 + 青的配色效果。還有一些其他的配色及混合模式的搭配,如黃 + 粉紅 + 藍配合mix-blend-mode: multiply

然後,有的時候,效果不希望和背景混合在一起,可以使用isolation: isolate進行隔離。

好,上述效果可以歸類為乙個分類。接下來開啟下乙個分類,下半篇幅的主角主要是clip-path

clip-path乙個非常有意思的 css 屬性。

clip-path css 屬性可以建立乙個只有元素的部分區域可以顯示的剪下區域。區域內的部分顯示,區域外的隱藏。剪下區域是被引用內嵌的url定義的路徑或者外部 svg 的路徑。

也就是說,使用clip-path可以將乙個容器切成我們想要的樣子。

例如這樣:

txet

div

正常是這樣的:

使用clip-path剪裁為乙個平行四邊形:

div

結果如下:

那麼,思路就有了,我們可以將乙個文字複製幾個副本,重疊在一起,再分別裁剪這幾個副本進行位移動畫即可。

我們還是使用元素的::before::after兩個偽元素複製兩份副本,再分別使用clip-path進行剪裁,再使用 transform 進行控制。

核心**:

text crack

div 

div span

div::before,

div::after

div::before

div::after

// 元素晃動,斷裂前搖

@keyframes shake

@keyframes crack1

100%

}@keyframes crack2

100%

}

可以得到這樣的效果:

完整的 demo:

clip-path 實現文字斷裂效果

ok,繼續,有了上面的鋪墊之後,接下來,我們把這個效果作用於之上,並且再新增上動畫。

隨便選一張:

哇哦,非常的賽博朋克。

實現動畫的關鍵在於:

簡單貼一下偽**:

$img: "";

div

div::before,

div::after

div::after

div::before

@keyframes glitch-one % px;

clip-path: inset(#px 0 #px);}}

15.5%

16%

....

}@keyframes glitch-two % px;

clip-path: inset(#px 0 #px);}}

25.5%

26%

...}@keyframes main-img-hide

...}

由於動畫部分**量太多,所以使用了 sass 迴圈函式隨機生成了部分。如果手動控制,效果其實還會更好,當然,除錯動畫消耗的時間會更多。

看看效果,雖然 css 能力有限,但實際的效果也不是說那麼的差:

gif 圖太大,掉幀太多,效果大打折扣。完整的 demo 及效果,你可以戳這裡:

clip-path 實現的故障藝術風格動畫

本文重點介紹了純 css 下使用混合模式和clip-path實現的一些故障藝術(glitch art),當然,上述的幾個效果都不僅僅是靠這兩個屬性單打獨鬥就能完成的。

在其中,transformfilter也在其中發揮了很重要的作用。當然僅僅使用transformfilter也能夠實現一些基礎的故障藝術效果,這個讀者們感興趣的可以自己多加嘗試。如果想使用於生產環境,需要考慮mix-blend-modeclip-path的相容性問題。

我自己對 glitch art 的理解其實也比較淺顯,只是覺得使用 css 去實現這樣一些類似的效果比較有意思,就動手嘗試實踐了一番,相關術語或者名詞理解錯誤煩請各位諒解指出。

好了,本文到此結束,希望對你有幫助 :)

如果還有什麼疑問或者建議,可以多多交流,原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。

抖音抖一抖 SVG和CSS視覺故障藝術小賞

故障藝術,英文名稱叫glitch,在很多賽博朋克作品中經常看到,其實就是故意表現一種顯示裝置的小故障效果,抖音的圖示其實就是這種的效果,我們看下這個圖示 這個圖示中的紅色和藍色的偏移其實就是一種故障藝術,看到這個,我就能想到早年我家還沒有有線電視時,搖天線對電視訊號的場景,訊號一差就是對著電視一陣拳...

建立小型測試程式排除軟體故障的藝術

建立小型測試程式排除軟體故障的藝術 又來了!無論你如何細心地測試了所用語言 函式庫和架構的每一項效能,無論你如何審慎地為每個元件建立了單元測試,當你最終把它納入應用程式時,得到的是不可理解的故障。嘗試所知的每一種除錯技術 改寫並簡化了最可疑的 段 掐掉或剔除整個元件。這可能會幫助你把故障縮小到特定區...

如何用ps做故障藝術風格效果

今天這個教程主要是用ps動作來做的,能給我們在工作上面帶來很大的方便,特別是突然做故障藝術風格海報的人來說,這個還是非常有用滴,至於動作怎麼找,可以搜 賽博故障風格海報藝術效果ps動作 02 關閉ps cc2018軟體,在ps cc2018安裝目錄 預設位置 c program files adob...