filter
Baseline 廣泛可用 *
filter CSS 屬性可為元素應用模糊或顏色偏移等圖形效果。濾鏡通常用於調整影像、背景和邊框的渲染效果。
有幾個可用的函式,例如 blur() 和 contrast(),可以幫助你實現預定義的效果。
試一試
filter: url("/shared-assets/images/examples/shadow.svg#element-id");
filter: blur(5px);
filter: contrast(200%);
filter: grayscale(80%);
filter: hue-rotate(90deg);
filter: drop-shadow(16px 16px 20px red) invert(75%);
<section id="default-example">
<div class="example-container">
<img
id="example-element"
src="/shared-assets/images/examples/firefox-logo.svg"
width="200" />
</div>
</section>
.example-container {
background-color: white;
width: 260px;
height: 260px;
display: flex;
align-items: center;
justify-content: center;
}
#example-element {
flex: 1;
padding: 30px;
}
語法
/* <filter-function> values */
filter: blur(5px);
filter: brightness(0.4);
filter: contrast(200%);
filter: drop-shadow(16px 16px 20px blue);
filter: grayscale(50%);
filter: hue-rotate(90deg);
filter: invert(75%);
filter: opacity(25%);
filter: saturate(30%);
filter: sepia(60%);
/* URL */
filter: url("filters.svg#filter-id");
/* Multiple filters */
filter: contrast(175%) brightness(3%);
filter: drop-shadow(3px 3px red) sepia(100%) drop-shadow(-3px -3px blue);
/* Use no filter */
filter: none;
/* Global values */
filter: inherit;
filter: initial;
filter: revert;
filter: revert-layer;
filter: unset;
引用 SVG 濾鏡
你可以使用 url() 來引用 SVG 濾鏡元素。要引用 SVG <filter> 元素,請使用以下語法:
filter: url("file.svg#filter-element-id");
函式
filter 屬性可以指定為 none 或下面列出的一個或多個函式。如果任何函式的引數無效,該函式將返回 none。除非另有說明,接受百分比值(如 34%)的函式也接受小數表示的值(如 0.34)。
當 filter 屬性值包含多個函式時,濾鏡將按順序應用。
blur()-
對輸入影像應用高斯模糊。
cssfilter: blur(5px); brightness()-
對輸入影像應用線性乘數,使其看起來更亮或更暗。值是效果的線性乘數,
0%會建立完全黑色的影像,100%沒有效果,超過100%的值會使影像變亮。cssfilter: brightness(2); contrast()-
調整輸入影像的對比度。值為
0%會使影像變為灰色,100%沒有效果,超過100%的值會增加對比度。cssfilter: contrast(200%); drop-shadow()-
將引數
<shadow>作為投影應用,投影會跟隨影像的輪廓。投影的語法類似於<box-shadow>(在 CSS 背景和邊框模組中定義),但inset關鍵字和spread引數是不允許的。與所有filter屬性值一樣,drop-shadow()之後的任何濾鏡都會應用於該投影。cssfilter: drop-shadow(16px 16px 10px black); grayscale()-
將影像轉換為灰度圖。值為
100%是完全灰度。初始值0%使輸入保持不變。0%和100%之間的值會對效果產生線性乘數影響。cssfilter: grayscale(100%); hue-rotate()-
應用色相旋轉。
<angle>值定義了輸入樣本將在色相環上調整的度數。值為0deg使輸入保持不變。cssfilter: hue-rotate(90deg); invert()-
反轉輸入影像中的樣本。值為
100%會完全反轉影像。值為0%使輸入保持不變。0%和100%之間的值會對效果產生線性乘數影響。cssfilter: invert(100%); opacity()-
應用透明度。
0%使影像完全透明,100%使影像保持不變。cssfilter: opacity(50%); saturate()-
使影像飽和,
0%為完全不飽和,100%使影像保持不變,超過100%的值會增加飽和度。cssfilter: saturate(200%); sepia()-
將影像轉換為深褐色,值為
100%使影像完全變為深褐色,0%不做任何改變。cssfilter: sepia(100%);
組合函式
你可以組合任意數量的函式來操控渲染。濾鏡會按照宣告的順序應用。以下示例增強了影像的對比度和亮度:
filter: contrast(175%) brightness(103%);
插值
在動畫中,如果開始和結束的濾鏡都具有相同長度且不含 <url> 的函式列表,並且順序相同,那麼它們的每個濾鏡函式都將根據該濾鏡函式的特定規則進行插值。
如果濾鏡列表的長度不同,則會將較長列表中缺失的等效濾鏡函式新增到較短列表的末尾。新增的函式使用其初始的、無濾鏡修改的值。然後,所有列出的濾鏡都將根據其濾鏡函式的特定規則進行插值。否則,將使用離散插值。
正式定義
正式語法
filter =
none |
<filter-value-list>
<filter-value-list> =
[ <filter-function> | <url> ]+
<filter-function> =
<blur()> |
<brightness()> |
<contrast()> |
<drop-shadow()> |
<grayscale()> |
<hue-rotate()> |
<invert()> |
<opacity()> |
<sepia()> |
<saturate()>
<blur()> =
blur( <length>? )
<brightness()> =
brightness( [ <number> | <percentage> ]? )
<contrast()> =
contrast( [ <number> | <percentage> ]? )
<drop-shadow()> =
drop-shadow( [ <color>? && <length>{2,3} ] )
<grayscale()> =
grayscale( [ <number> | <percentage> ]? )
<hue-rotate()> =
hue-rotate( [ <angle> | <zero> ]? )
<invert()> =
invert( [ <number> | <percentage> ]? )
<opacity()> =
opacity( [ <number> | <percentage> ]? )
<sepia()> =
sepia( [ <number> | <percentage> ]? )
<saturate()> =
saturate( [ <number> | <percentage> ]? )
示例
應用濾鏡函式
filter 屬性應用於第二張圖片,使其影像和邊框都變灰並模糊。
img {
border: 5px solid yellow;
}
/* Gray the second image by 40% and blur by 5px */
img:nth-of-type(2) {
filter: grayscale(0.4) blur(5px);
}
<img src="pencil.jpg" alt="Original image is sharp" />
<img src="pencil.jpg" alt="The image and border are blurred and muted" />
重複使用濾鏡函式
濾鏡函式按其出現的順序應用。同一個濾鏡函式可以重複使用。
#MDN-logo {
border: 1px solid blue;
filter: drop-shadow(5px 5px 0 red) hue-rotate(180deg)
drop-shadow(5px 5px 0 red);
}
濾鏡是按順序應用的。這就是為什麼投影的顏色不相同:第一個投影的色相被 hue-rotate() 函式改變了,而第二個則沒有。
規範
| 規範 |
|---|
| 濾鏡效果模組第 1 級 # FilterProperty |
瀏覽器相容性
載入中…
另見
backdrop-filtermask- SVG
filter屬性 - CSS 混合與合成模組,包括 CSS
background-blend-mode和mix-blend-mode屬性。 - SVG,包括 SVG
<filter>元素和 SVGfilter屬性。 - 將 SVG 效果應用於 HTML 內容