filter
åºçº¿
广æ³å¯ç¨
*
èª 2016å¹´9æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
* æ¤ç¹æ§çæäºé¨åçæ¯æç¨åº¦å¯è½ææä¸åã
CSS filter 屿§å°æ¨¡ç³æé¢è²åç§»çå¾å½¢ææåºç¨äºå
ç´ ãæ»¤éé常ç¨äºè°æ´å¾åãèæ¯åè¾¹æ¡ç渲æã
æå ä¸ªå½æ°ï¼ä¾å¦ 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: #fff;
width: 260px;
height: 260px;
display: flex;
align-items: center;
justify-content: center;
}
#example-element {
flex: 1;
padding: 30px;
}
è¯æ³
/* <filter-function> å¼ */
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");
/* å¤ä¸ªæ»¤é */
filter: contrast(175%) brightness(3%);
filter: drop-shadow(3px 3px red) sepia(100%) drop-shadow(-3px -3px blue);
/* ä¸ä½¿ç¨æ»¤é */
filter: none;
/* å
¨å±å¼ */
filter: inherit;
filter: initial;
filter: revert;
filter: revert-layer;
filter: unset;
å¯ä»¥ä½¿ç¨å¦ä¸æ¹æ³è®¾ç½®å½æ°ï¼
filter: <filter-function> [<filter-function>]* | none;
ä½ å¯ä»¥ä½¿ç¨ 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() çç¸åé¿åº¦ç彿°å表ï¼å伿 ¹æ®å
¶æå®çè§å对å
¶æ¯ä¸ªæ»¤é彿°è¿è¡æå¼ã
妿å®ä»¬çé¿åº¦ä¸åï¼è¾é¿å表ä¸ç¼ºå°ççææ»¤é彿°å°ä»¥å ¶åå§çãæªè¢«æ»¤éä¿®æ¹çå¼ä¸ºåæ°è¢«æ·»å å°è¾çå表çå°¾é¨ï¼ç¶åææç滤é彿°æ ¹æ®å ¶æå®çè§åæå¼ãå¦åï¼å°ä½¿ç¨ç¦»æ£æå¼ã
å½¢å¼å®ä¹
| åå§å¼ | none |
|---|---|
| éç¨å ç´ | all elements; In SVG, it applies to container elements excluding the <defs> element and all graphics elements |
| æ¯å¦æ¯ç»§æ¿å±æ§ | å¦ |
| 计ç®å¼ | as specified |
| å¨ç»ç±»å | a filter function list |
å½¢å¼è¯æ³
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 彿°
filter 屿§è¢«åºç¨äºç¬¬äºå¼ å¾çï¼ä¸ºå
¶æ¬èº«ä»¥åè¾¹æ¡æ·»å ç°åº¦åæ¨¡ç³ææã
img {
border: 5px solid yellow;
}
/* 为第äºå¼ å¾ååºç¨ 40% ç°åº¦å¹¶ä»¥ 5px è¿è¡æ¨¡ç³ */
img:nth-of-type(2) {
filter: grayscale(0.4) blur(5px);
}
<img src="pencil.jpg" alt="å徿¸
æ°" />
<img src="pencil.jpg" alt="该å¾ååå
¶è¾¹æ¡è¢«åºç¨äºæ¨¡ç³åç°åº¦ææ" />
é夿»¤é彿°
滤é彿°æåºç°é¡ºåºåºç¨ãå¯ä»¥éå¤ç¸åçæ»¤é彿°ã
#MDN-logo {
border: 1px solid blue;
filter: drop-shadow(5px 5px 0 red) hue-rotate(180deg)
drop-shadow(5px 5px 0 red);
}
滤é彿°æé¡ºåºåºç¨ãè¿å°±æ¯é´å½±é¢è²ä¸åçåå ï¼ç¬¬ä¸ä¸ªé´å½±çè²è°è¢« hue-rotate() 彿°æ¹åï¼è第äºä¸ªé´å½±çè²è°æ²¡æè¢«æ¹åã
è§è
| è§è |
|---|
| Filter Effects Module Level 1 > # FilterProperty > |
æµè§å¨å ¼å®¹æ§
åè§
- CSS
backdrop-filter屿§ - CSS åæåæ··åæ¨¡åï¼å
æ¬ CSS
background-blend-modeåmix-blend-mode屿§ã - CSS
mask屿§ - SVGï¼å
æ¬ SVG
<filter>å ç´ ä»¥å SVGfilter屿§ã - å° SVG ææåºç¨äº HTML å 容