請各位讀者新增一下作者的微信公眾號,以後有新的文章,將在微信公眾號直接推送給各位,非常感謝。
0.前言
注意:
若文章中發現圖片無法載入,請移步作者其他部落格。
最近在用手機的過程中,發現蘋果在非常多的地方都使用了模糊的效果。
高斯效果雖然炫酷,可是我們們身為前端人員,又該如何去模仿這個效果呢?
這時候我們就要說到 CSS 3 中的一個屬性,Filter 了。
1.Filter
CSS濾鏡(filter):
提供的圖形特效,像模糊,銳化或元素變色。
過濾器通常被用於調整圖片,背景和邊界的渲染。
Filter 的一些基礎內容:
名稱 | 說明 |
---|---|
初始值 | none |
適用元素 | 所有元素;在SVG,它適用於容器元素不包括def元素和所有圖形元素 |
繼承性 | 不繼承 |
適用效果 | 視覺處理 |
增添版本 | CSS3 |
JS 語法 | object.style.WebkitFilter="grayscale(100%)" |
關於適用瀏覽器版本:
平時推薦大家還是用 Chrome 瀏覽器來檢視效果吧。
除此之外,再補充一下在 MDN 上給出的相容性說明。
出自之外,Filter
雖然在屬性介紹中說明是不繼承的,但是它其實和 Opacity
非常類似,都會導致子級發生問題。
這時候我們就要用到另外一個內容,Filter()
函式了。
但是,我們們還是循序漸進,先繼續來看 Filter
吧。
在介紹了 Filter
的基礎使用之後,我們接下來介紹一下它的屬性。
屬性名 | 屬性介紹 | 填寫方式 |
---|---|---|
none | 無效果 | 預設值 |
grayscale | 灰度 | 百分比 |
sepia | 褐色 | 百分比 |
saturate | 飽和度 | 百分比 |
hue-rotate | 色相旋轉 | deg |
invert | 反色 | 百分比 |
opacity | 透明度 | 百分比 |
brightness | 亮度 | 百分比 |
contrast | 對比度 | 百分比 |
blur | 模糊 | px |
drop-shadow | 陰影 | h-shadow v-shadow blur spread color |
既然知道了都有哪些屬性,那麼我們接下來就來一起看看。
這些屬性都是如何去使用的吧。
2.屬性的書寫
2.1 grayscale :灰度
示例程式碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>李鵬 --> QQ:3206064928</title>
<style type="text/css">
div{
width: 467px;
height: 700px;
border: 1px solid #000;
margin: 0px auto;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-ms-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
img{
width: 100%;
height: 100%;
}
div:hover{
-webkit-filter:grayscale(1);
}
h3{
margin: 0;
text-align: center;
font-size: 40px;
}
</style>
</head>
<body>
<div>
<img src="IMG_3479.JPG">
</div>
<h3>
grayscale :灰度
</h3>
</body>
</html>複製程式碼
實現效果:
解釋說明:
灰度會將我們的照片進行灰白處理,其實說白了就是由原本的彩色照片變成 黑白照片而已。
需要注意:
- 值為100%則完全轉為灰度影像,值為0%影像無變化。
- 值在0%到100%之間,則是效果的線性乘子。
- 若未設定,W3C說值預設是0,但是實際測試應為 100%。
2.2 sepia : 褐色
示例程式碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>李鵬 --> QQ:3206064928</title>
<style type="text/css">
div{
width: 467px;
height: 700px;
border: 1px solid #000;
margin: 0px auto;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-ms-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
img{
width: 100%;
height: 100%;
}
div:hover{
-webkit-filter:sepia(1);
}
h3{
margin: 0;
text-align: center;
font-size: 40px;
}
</style>
</head>
<body>
<div>
<img src="IMG_3479.JPG">
</div>
<h3>
sepia : 褐色
</h3>
</body>
</html>複製程式碼
實現效果:
解釋說明:
sepia 是將影像轉換為深褐色。
處理過後能實現一種類似於“老照片”的泛黃感覺。
除此之外,需要注意:
- 值為100%則完全是深褐色的,值為0%影像無變化。
- 值在0%到100%之間,則是效果的線性乘子。
- 若未設定,W3C說值預設是0,但是實際測試應為 100%。
2.3 saturate :飽和度
示例程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>李鵬 --> QQ:3206064928</title>
<style type="text/css">
div{
width: 467px;
height: 700px;
border: 1px solid #000;
margin: 0px auto;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-ms-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
img{
width: 100%;
height: 100%;
}
div:hover{
-webkit-filter:saturate(4);
}
h3{
margin: 0;
text-align: center;
font-size: 40px;
}
</style>
</head>
<body>
<div>
<img src="IMG_3479.JPG">
</div>
<h3>
saturate :飽和度
</h3>
</body>
</html>複製程式碼
實現效果:
解釋說明:
saturate 是用於轉換影像飽和度。
雖然轉換成 0 的話,看上去實現效果和“灰度”差不多。
但是飽和度是可以設定超過原本圖片色彩的。
除此之外,需要注意:
- 值為0%則是完全不飽和,值為100%則影像無變化。
- 其他值,則是效果的線性乘子。
- 超過100%的值是允許的,則有更高的飽和度。
- 若值未設定,值預設是1。
2.4 hue-rotate :色相旋轉
示例程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>李鵬 --> QQ:3206064928</title>
<style type="text/css">
div{
width: 467px;
height: 700px;
border: 1px solid #000;
margin: 0px auto;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-ms-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
img{
width: 100%;
height: 100%;
}
div:hover{
-webkit-filter:hue-rotate(90deg);
}
h3{
margin: 0;
text-align: center;
font-size: 40px;
}
</style>
</head>
<body>
<div>
<img src="IMG_3479.JPG">
</div>
<h3>
hue-rotate :色相旋轉
</h3>
</body>
</html>複製程式碼
實現效果:
解釋說明:
hue-rotate 是給影像應用色相旋轉。
數值設定影像會被調整的色環角度值。
注意:
- 值為0deg,則影像無變化。
- 若值未設定,預設值是0deg。
- 該值雖然沒有最大值,超過360deg的值相當於又繞一圈。
2.5 invert :反色
示例程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>李鵬 --> QQ:3206064928</title>
<style type="text/css">
div{
width: 467px;
height: 700px;
border: 1px solid #000;
margin: 0px auto;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-ms-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
img{
width: 100%;
height: 100%;
}
div:hover{
-webkit-filter:invert(1);
}
h3{
margin: 0;
text-align: center;
font-size: 40px;
}
</style>
</head>
<body>
<div>
<img src="IMG_3479.JPG">
</div>
<h3>
invert :反色
</h3>
</body>
</html>複製程式碼
實現效果:
解釋說明:
invert 是反轉輸入影像。
就像我們照相機的底片一樣。
注意:
- 100%的價值是完全反轉。
- 值為0%則影像無變化。
- 值在0%和100%之間,則是效果的線性乘子。
- 若值未設定,值預設是0。
2.6 透明度
示例程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>李鵬 --> QQ:3206064928</title>
<style type="text/css">
div{
width: 467px;
height: 700px;
border: 1px solid #000;
margin: 0px auto;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-ms-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
img{
width: 100%;
height: 100%;
}
div:hover{
-webkit-filter:opacity(.2);
}
h3{
margin: 0;
text-align: center;
font-size: 40px;
}
</style>
</head>
<body>
<div>
<img src="IMG_3479.JPG">
</div>
<h3>
opacity :透明度
</h3>
</body>
</html>複製程式碼
實現效果:
解釋說明:
opacity 是轉化影像的透明程度。
注意:
- 值為0%則是完全透明,值為100%則影像無變化。
- 值在0%和100%之間,則是效果的線性乘子,也相當於影像樣本乘以數量。
- 若值未設定,值預設是1。
- 該函式與已有的opacity屬性很相似,不同之處在於通過filter,一些瀏覽器為了提升效能會提供硬體加速。
2.7 亮度
示例程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>李鵬 --> QQ:3206064928</title>
<style type="text/css">
div{
width: 467px;
height: 700px;
border: 1px solid #000;
margin: 0px auto;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-ms-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
img{
width: 100%;
height: 100%;
}
div:hover{
-webkit-filter:brightness(2);
}
h3{
margin: 0;
text-align: center;
font-size: 40px;
}
</style>
</head>
<body>
<div>
<img src="IMG_3479.JPG">
</div>
<h3>
brightness :亮度
</h3>
</body>
</html>複製程式碼
實現效果:
解釋說明:
brightness 是給圖片應用一種線性乘法,使其看起來更亮或更暗。
注意:
- 如果值是0%,影像會全黑。值是100%,則影像無變化。
- 其他的值對應線性乘數效果。
- 值超過100%也是可以的,影像會比原來更亮。
- 如果沒有設定值,預設是1。
2.8 contrast :對比度
示例程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>李鵬 --> QQ:3206064928</title>
<style type="text/css">
div{
width: 467px;
height: 700px;
border: 1px solid #000;
margin: 0px auto;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-ms-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
img{
width: 100%;
height: 100%;
}
div:hover{
-webkit-filter:contrast(2);
}
h3{
margin: 0;
text-align: center;
font-size: 40px;
}
</style>
</head>
<body>
<div>
<img src="IMG_3479.JPG">
</div>
<h3>
contrast :對比度
</h3>
</body>
</html>複製程式碼
實現效果:
解釋說明:
contrast 是調整影像的對比度。
注意:
- 值是0%的話,影像會全黑。
- 值是100%,影像不變。
- 值可以超過100%,意味著會運用更低的對比。
- 若沒有設定值,預設是1。
2.9 blur :模糊
示例程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>李鵬 --> QQ:3206064928</title>
<style type="text/css">
div{
width: 467px;
height: 700px;
border: 1px solid #000;
margin: 0px auto;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-ms-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
img{
width: 100%;
height: 100%;
}
div:hover{
-webkit-filter:blur(2px);
}
h3{
margin: 0;
text-align: center;
font-size: 40px;
}
</style>
</head>
<body>
<div>
<img src="IMG_3479.JPG">
</div>
<h3>
blur :模糊
</h3>
</body>
</html>複製程式碼
實現效果:
解釋說明:
終於到重頭戲了,模糊。
blur 是給影像設定高斯模糊。
"radius"一值設定高斯函式的標準差,或者是螢幕上以多少畫素融在一起, 所以值越大越模糊;
注意:
- 如果沒有設定值,則預設是0;
- 這個引數可設定css長度值,但不接受百分比值。
2.10 drop-shadow :陰影
示例程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>李鵬 --> QQ:3206064928</title>
<style type="text/css">
div{
width: 467px;
height: 700px;
border: 1px solid #000;
margin: 0px auto;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-ms-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
img{
width: 100%;
height: 100%;
}
div:hover{
-webkit-filter:drop-shadow(5px 5px 5px #ccc);
}
h3{
margin: 0;
text-align: center;
font-size: 40px;
}
</style>
</head>
<body>
<div>
<img src="IMG_3479.JPG">
</div>
<h3>
drop-shadow :陰影
</h3>
</body>
</html>複製程式碼
實現效果:
解釋說明:
drop-shadow 是給影像設定一個陰影效果。
陰影是合成在影像下面,可以有模糊度的,可以以特定顏色畫出的遮罩圖的偏移版本。
函式接受
除了"inset"關鍵字是不允許的。
該函式與已有的box-shadow box-shadow屬性很相似;
不同之處在於,通過濾鏡,一些瀏覽器為了更好的效能會提供硬體加速。
在這裡帶著大家回顧一下之前 box-shadow 的屬性說明:
(必須) - 這是設定陰影偏移量的兩個
值. 設定水平方向距離. 負值會使陰影出現在元素左邊. 設定垂直距離.負值會使陰影出現在元素上方。檢視 可能的單位.
如果兩個值都是0, 則陰影出現在元素正後面 (如果設定了and/or ,會有模糊效果).
- 這是設定陰影偏移量的兩個
(可選) - 這是第三個code>
值. 值越大,越模糊,則陰影會變得更大更淡.不允許負值 若未設定,預設是0 (則陰影的邊界很銳利).
- 這是第三個code>
(可選) - 這是第四個
值. 正值會使陰影擴張和變大,負值會是陰影縮小.若未設定,預設是0 (陰影會與元素一樣大小).
注意: Webkit, 以及一些其他瀏覽器 不支援第四個長度,如果加了也不會渲染。
- 這是第四個
(可選) - 檢視
該值可能的關鍵字和標記。若未設定,顏色值基於瀏覽器。在Gecko (Firefox), Presto (Opera)和Trident (Internet Explorer)中, 會應用colorcolor屬性的值。另外, 如果顏色值省略,WebKit中陰影是透明的。
- 檢視
2.11 URL :自定義 XML 檔案
解釋說明:
URL函式接受一個XML檔案,該檔案設定了 一個SVG濾鏡,且可以包含一個錨點來指定一個具體的濾鏡元素.
引入方法:
.target { filter: url(#c1); }
.mydiv { filter: url(commonfilters.xml#large-blur) }複製程式碼
2.12 複合寫法
示例程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>李鵬 --> QQ:3206064928</title>
<style type="text/css">
div{
width: 467px;
height: 700px;
border: 1px solid #000;
margin: 0px auto;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-ms-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
img{
width: 100%;
height: 100%;
}
div:hover{
-webkit-filter:contrast(175%) brightness(70%);
}
h3{
margin: 0;
text-align: center;
font-size: 20px;
}
</style>
</head>
<body>
<div>
<img src="IMG_3479.JPG">
</div>
<h3>
你可以組合任意數量的函式來控制渲染。下面的例子可以增強影像的對比度和亮度。
</h3>
</body>
</html>複製程式碼
實現效果:
解釋說明:
你可以組合任意數量的函式來控制渲染。
例如同時去增強影像的對比度和亮度等等。
3. Filter () 函式
以下部分內容出自 W3Plus。
很多時候,只是希望元素的背景做效果調整,又不希望他會影響其他元素。
而且又沒有backdrop-filter屬性的情形之下,filter()就顯得格外的重要。
在繼續往下閱讀之前,你要注意一點,filter()並不等於以前介紹過的filter屬性。
簡單的理解,一個是函式,一個是屬性。那麼我們今天要說的是filter()函式。
為了能更好的與filter屬性區分,filter()函式接受兩個引數:
filter(<url>, <filter-function-list>)複製程式碼
其中
這兩者結合在一起將會返回一個處理過的新影像。
例如:
.element {
background: filter(url(path/to/img.jpg), blur(5px));
}複製程式碼
因此,你可以給圖片使用過濾效果,然後填充到元素中,比如background-filter、background-opacity、background-blur等等。
####注意:
- 規範中定義的過濾函式
- 和background-size屬性一起使用會有Bug
- 支援動畫
- 需要新增字首:-webkit-filter()
值得一提的是,backdrop-filter和filter()可以使用CSS3 transition和animation實現一些圓滑的過度效果或動畫,甚至還可以使用JavaScript。
4. 後記
終於寫完了,用時 5 個小時。
其中查詢資料就花費了大量的事件。
但是最後還是能夠完成,傳送給大家,同時也希望大家能夠在未來用到的時候能夠記得看過這篇文章。
好啦,我也要去吃飯啦,拜拜了您嘞!
本文作者 : 李鵬
QQ :3206064928
微信:lipeng_0524
歡迎騷擾。
本文請勿隨意轉載,作者保留法律追究權利。