巧用 CSS3 filter(濾鏡) 屬性
原文鏈接:CSS3 filter(濾鏡) 屬性
效果預覽
filter: grayscale(100%);
定義和使用
filter 屬性定義了元素(通常是<img>
)的可視效果(例如:模糊與飽和度)。
默認值 | none |
---|---|
繼承 | no |
動畫支援 | 是。詳細可查閱 CSS 動畫 |
版本 | CSS3 |
瀏覽器支援
表格中的數字表示支援該方法的第一個瀏覽器的版本號。
緊跟在數字後面的 -webkit- 為指定瀏覽器的前綴。
屬性 | filter |
---|---|
![]() |
18.0 -webkit- |
![]() |
不支援 |
![]() |
35.0 |
![]() |
6.0 -webkit- |
![]() |
15.0 -webkit- |
注意: 舊版 Internet Explorer 瀏覽器(4.0 to 8.0) 支援的非標準 “filter” 屬性已被廢棄。 IE8 及更低版本瀏覽器通常使用 opacity 屬性。
CSS 語法
filter: none | blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | saturate() | sepia() | url();
Filter 函數
注意: 濾鏡通常使用百分比 (如:75%), 當然也可以使用小數來表示 (如:0.75)。
Filter | 描述 |
---|---|
none | 默認值,沒有效果。 |
blur(px) | 給影像設置高斯模糊。”radius”一值設定高斯函數的標準差,或者是螢幕上以多少像素融在一起, 所以值越大越模糊; 如果沒有設定值,則默認是0;這個參數可設置css長度值,但不接受百分比值。 |
brightness(%) | 給圖片應用一種線性乘法,使其看起來更亮或更暗。如果值是0%,影像會全黑。值是100%,則影像無變化。 其他的值對應線性乘數效果。值超過100%也是可以的,影像會比原來更亮。如果沒有設定值,默認是1。 |
contrast(%) | 調整影像的對比度。值是0%的話,影像會全黑。值是100%,影像不變。值可以超過100%,意味著會運用更低的對比。若沒有設置值,默認是1。 |
drop-shadow(h-shadow v-shadow blur spread color) | 給影像設置一個陰影效果。陰影是合成在影像下面,可以有模糊度的,可以以特定顏色畫出的遮罩圖的偏移版本。 函數接受<shadow> (在CSS3背景中定義)類型的值,除了 “inset” 關鍵字是不允許的。該函數與已有的 box-shadow box-shadow 屬性很相似;不同之處在於,通過濾鏡,一些瀏覽器為了更好的性能會提供硬體加速。<shadow> 參數如下:<offset-x> <offset-y> (必須) 這是設置陰影偏移量的兩個 <length> 值。 <offset-x> 設定水平方向距離, 負值會使陰影出現在元素左邊。 <offset-y> 設定垂直距,負值會使陰影出現在元素上方,查看<length> 可能的單位,如果兩個值都是0, 則陰影出現在元素正後面 (如果設置了 <blur-radius> and/or <spread-radius> ,會有模糊效果)。<blur-radius> (可選)這是第三個code <length> 值。 值越大,越模糊,則陰影會變得更大更淡。不允許負值 若未設定,默認是0 (則陰影的邊界很銳利)。<spread-radius> (可選)這是第四個 注意: Webkit , 以及一些其他瀏覽器 不支援第四個長度,如果加了也不會渲染。 <color> (可選)查看 <color> 該值可能的關鍵字和標記。若未設定,顏色值基於瀏覽器。在Gecko (Firefox), Presto (Opera)和Trident (Internet Explorer)中, 會應用colorcolor屬性的值。另外, 如果顏色值省略,WebKit中陰影是透明的。 |
grayscale(%) | 將影像轉換為灰度影像。值定義轉換的比例。值為100%則完全轉為灰度影像,值為0%影像無變化。值在0%到100%之間,則是效果的線性乘子。若未設置,值默認是0。 |
hue-rotate(deg) | 給影像應用色相旋轉。”angle”一值設定影像會被調整的色環角度值。值為0deg,則影像無變化。若值未設置,默認值是0deg。該值雖然沒有最大值,超過360deg的值相當於又繞一圈。 |
invert(%) | 反轉輸入影像。值定義轉換的比例。100%的價值是完全反轉。值為0%則影像無變化。值在0%和100%之間,則是效果的線性乘子。 若值未設置,值默認是0。 |
opacity(%) | 轉化影像的透明程度。值定義轉換的比例。值為0%則是完全透明,值為100%則影像無變化。值在0%和100%之間,則是效果的線性乘子,也相當於影像樣本乘以數量。 若值未設置,值默認是1。該函數與已有的opacity屬性很相似,不同之處在於通過filter,一些瀏覽器為了提升性能會提供硬體加速。 |
saturate(%) | 轉換影像飽和度。值定義轉換的比例。值為0%則是完全不飽和,值為100%則影像無變化。其他值,則是效果的線性乘子。超過100%的值是允許的,則有更高的飽和度。 若值未設置,值默認是1。 |
sepia(%) | 將影像轉換為深褐色。值定義轉換的比例。值為100%則完全是深褐色的,值為0%影像無變化。值在0%到100%之間,則是效果的線性乘子。若未設置,值默認是0; |
url() | URL函數接受一個XML文件,該文件設置了 一個SVG濾鏡,且可以包含一個錨點來指定一個具體的濾鏡元素。 例如: filter: url(svg-url#element-id) |
initial | 設置屬性為默認值,可參閱: CSS initial 關鍵字 |
inherit | 設置屬性為默認值,可參閱: CSS inherit 關鍵字 |
實例
初始圖片如下:
模糊實例
圖片使用高斯模糊效果:
img { -webkit-filter: blur(5px); /* Chrome, Safari, Opera */ filter: blur(5px); }
效果如下:
注意: Internet Explorer 不支援 filter 屬性。
Brightness 函數實例
使圖片變亮:
img { -webkit-filter: brightness(200%); /* Chrome, Safari, Opera */ filter: brightness(200%); }
效果如下:
Contrast 函數實例
調整影像的對比度:
img { -webkit-filter: contrast(200%); /* Chrome, Safari, Opera */ filter: contrast(200%); }
效果如下:
drop-shadow 函數實例
給影像設置一個陰影效果:
img { -webkit-filter: drop-shadow(8px 8px 10px red); /* Chrome, Safari, Opera */ filter: drop-shadow(8px 8px 10px red); }
效果如下:
Grayscale 函數實例
將影像轉換為灰度影像:
img { -webkit-filter: grayscale(50%); /* Chrome, Safari, Opera */ filter: grayscale(50%); }
效果如下:
hue-rotate() 函數實例
給影像應用色相旋轉:
img { -webkit-filter: hue-rotate(90deg); /* Chrome, Safari, Opera */ filter: hue-rotate(90deg); }
效果如下:
Invert 函數實
反轉輸入影像:
img { -webkit-filter: invert(100%); /* Chrome, Safari, Opera */ filter: invert(100%); }
效果如下:
Opacity 函數實例
轉化影像的透明程度:
img { -webkit-filter: opacity(30%); /* Chrome, Safari, Opera */ filter: opacity(30%); }
效果如下:
Saturate 函數實
轉換影像飽和度:
img { -webkit-filter: saturate(800%); /* Chrome, Safari, Opera */ filter: saturate(800%); }
效果如下:
Sepia 函數實例
將影像轉換為深褐色:
img { -webkit-filter: sepia(100%); /* Chrome, Safari, Opera */ filter: sepia(100%); }
效果如下:
複合函數
使用多個濾鏡,每個濾鏡使用空格分隔。
注意: 順序是非常重要的 (例如使用 grayscale() 後再使用 sepia()將產生一個完整的灰度圖片)。
img { -webkit-filter: contrast(200%) brightness(150%); /* Chrome, Safari, Opera */ filter: contrast(200%) brightness(150%); }
效果如下:
所有濾鏡實例
使用多個濾鏡,每個濾鏡使用空格分隔。
注意: 順序是非常重要的 (例如使用 grayscale() 後再使用 sepia()將產生一個完整的灰度圖片)。
`
注意: Internet Explorer 不支援 filter 屬性。
`
效果如下:
一些常見效果
1 電影效果
濾鏡中的 brightness 用於調整影像的明暗度。默認值是1;小於1時影像變暗,為0時顯示為全黑影像;大於1時影像顯示比原圖更明亮。
我們可以通過調整 背景圖的明暗度 和 文字的透明度 ,來模擬電影謝幕的效果。
<div class="container">
<div class="ethan"></div>
<div class="p-t">
<p>如果生活中有什麼使你感到快樂,那就去做吧</p>
<br>
<p>不要管別人說什麼</p>
</div>
</div>
.ethan{
height: 100%;
width: 100%;
position: absolute;
background: url('./images/movie.webp') no-repeat;
background-size: cover;
/* forwards當動畫完成後,保持最後一幀的狀態 */
animation: fade-away 2.5s linear forwards;
}
.p-t{
position: absolute;
line-height: 55px;
color: #fff;
font-size: 36px;
text-align: center;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
opacity: 0;
animation: show 2s cubic-bezier(.74,-0.1,.86,.83) forwards;
}
/* 背景圖的明暗度動畫 */
@keyframes fade-away {
30%{
filter: brightness(1);
}
100%{
filter: brightness(0);
}
}
/* 文字的透明度動畫 */
@keyframes show{
20%{
opacity: 0;
}
100%{
opacity: 1;
}
}
效果如下:
2 模糊效果
在下面的單詞卡片中,當滑鼠hover
到某一張卡片上時,其他卡片背景模糊,使用戶焦點集中到當前卡片。
<ul class="cards">
<li class="card">
<p class="title">Flower</p>
<p class="content">The flowers mingle to form a blaze of color.</p>
</li>
<li class="card">
<p class="title">Sunset</p>
<p class="content">The sunset glow tinted the sky red.</p>
</li>
<li class="card">
<p class="title">Plain</p>
<p class="content">The winds came from the north, across the plains, funnelling down the valley. </p>
</li>
</ul>
實現的方式,是將背景加在 .card
元素的偽類上,當元素不是焦點時,為該元素的偽類加上濾鏡。
.card:before{
z-index: -1;
content: '';
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
border-radius: 20px;
filter: blur(0px) opacity(1);
transition: filter 200ms linear, transform 200ms linear;
}
/*
這裡不能將濾鏡直接加在.card元素,而是將背景和濾鏡都加在偽類上。
因為,父元素加了濾鏡,它的子元素都會一起由該濾鏡改變。
如果濾鏡直接加在.card元素上,會導致上面的文字也變模糊。
*/
/* 通過css選擇器選出非hover的.card元素,給其偽類添加模糊、透明度和明暗度的濾鏡 */
.cards:hover > .card:not(:hover):before{
filter: blur(5px) opacity(0.8) brightness(0.8);
}
/* 對於hover的元素,其偽類增強飽和度,尺寸放大 */
.card:hover:before{
filter: saturate(1.2);
transform: scale(1.05);
}
效果如下:
3 褪色效果
褪色效果可以打造出一種懷舊的風格。下面這組照片牆,我們通過sepia濾鏡將影像基調轉換為深褐色,再通過降低 飽和度 saturate
和 色相旋轉 hue-rotate
微調,模擬老照片的效果。
.pic{
border: 3px solid #fff;
box-shadow: 0 10px 50px #5f2f1182;
filter: sepia(30%) saturate(40%) hue-rotate(5deg);
transition: transform 1s;
}
.pic:hover{
filter: none;
transform: scale(1.2) translateX(10px);
z-index: 1;
}
效果如下: