css–filter(濾鏡) 屬性

前言

  前段時間找工作面試官問到一個問題,你如何將一個網頁整體置灰?面試遇到這樣的問題,一下束手無策,之前沒有接觸過這樣的需求,因此沒有回答上來,面試結束我才知道了這是考查對 CSS3 的新屬性的了解。這裡需要掌握 filter(濾鏡) 這個新屬性。細想一下,這個需求成立啊,比如遇到清明節、全國哀悼日、大地震等災害的日子,我們的網頁可以全局置灰,相當於加一層濾鏡,以表示我們對逝者的悼念。

正文

  1.定義和使用

  filter 屬性定義了元素(通常是<img>)的可視效果(例如:模糊與飽和度)。本文用Google瀏覽器測試,暫不烤爐兼容問題。

  語法:

    filter: none | blur() | brightness() | contrast() | dropshadow() | grayscale() | huerotate() | invert() | opacity() | saturate() | sepia() | url();

  注意:可以使用空格分割加多個濾鏡。

  默認值:none;不加任何效果。

  2.filter函數使用

  基礎程式碼如下:

    <div>
          <img src="./圖片/2222.jpeg" alt="">
          <img src="./圖片/2222.jpeg" alt="">
          <img src="./圖片/2222.jpeg" alt="">
          <img src="./圖片/2222.jpeg" alt="">
     </div>
     <style>
     div{
            display: flex;
            justify-content: space-around;
            width: 500px;
            margin: 100px auto;
        }
        img{
            width: 100px;
        }
     </style>

  基礎效果如下:

  (1)blur(),該函數給影像設置模糊度,默認值為0,可以設置長度值,但是不能設置百分比。

        img:nth-child(1) {}
        img:nth-child(2) {
            filter: blur(2px);
        }
        img:nth-child(3) {
            filter: blur(4px);
        }
        img:nth-child(4) {
            filter: blur(6px);
        }

  (2)brightness(),圖片高亮顯示,使得圖片看起來更亮或者更暗,參數為0%,圖片會全黑;參數為100%,圖片無變化;參數越大,圖片越亮;默認值為100%。通常為75%達到濾鏡效果,同時也可以用小數作為參數(如0.75)。

        img:nth-child(1) {}
        img:nth-child(2) {
          filter: brightness(0%)
        }
        img:nth-child(3) {
          filter: brightness(75%)
        }
        img:nth-child(4) {
          filter: brightness(125%)
        }    

 

  

 

  (3)contrast(),調整影像對比圖,參數為0%,影像全黑;參數為100%,影像不變;參數越大,表示對比越低;默認值為100%。

 

        img:nth-child(1) {}
        img:nth-child(2) {
          filter: contrast(0%)
        }
        img:nth-child(3) {
          filter: contrast(75%)
        }
        img:nth-child(4) {
          filter: contrast(125%)
        }

 

 

  (4)drop-shadow(h-shadow  v-shadow  blur spread  color) ,給影像設置一個陰影效果,陰影是合成在影像下面,可以又模糊度的,可以以特定的顏色色畫出遮罩圖的偏移版本,該函數與box-shadow屬性相似,不同之處在於,通過濾鏡,一些瀏覽器為了更好的性能會提供硬體加速。具體參數設置如下:

  h-shadow和v-shadow,兩個參數是必選的,表示陰影偏移量,分別在水平方向和垂直方向的便宜距離,同樣設置負值的時候會出現相反的方向。

  blur,該參數可選,表示模糊程度,值越大越模糊,則陰影會變大更大更淡,不允許負值,默認是為0表示陰影的邊界很銳利。

  spread,該參數可選,正值會使陰影擴張和變大,負值會使陰影縮小,默認值為0表示陰影與元素一樣大小。

  color,該參數可選,表示陰影的顏色,若未設定,顏色基於瀏覽器。

        img:nth-child(1) {}
        img:nth-child(2) {
          filter: drop-shadow(20px 10px 4px #4444dd);
        }
        img:nth-child(3) {
          filter: drop-shadow(0 -6mm 4mm rgb(160, 0, 210));
        }
        img:nth-child(4) {
          filter: drop-shadow(0 0 0.75rem crimson);
        }

 

 

  (5)grayscale(),將影像轉為灰度影像,值定義轉換的比例,值為1–%表示全部轉換為灰度,值為0表示影像無變化。

 

        img:nth-child(1) {}
        img:nth-child(2) {
          filter: grayscale(30%);
        }
        img:nth-child(3) {
          filter: grayscale(60%);
        }
        img:nth-child(4) {
          filter: grayscale(100%);
        }

 

 

  (6)hue-rotate(),該函數給影像添加色相旋轉,參數為角度值deg,值為0deg,表示影像無變化;360deg表示影像色相旋轉一圈;超過360deg相當於又繞一圈;默認值為0deg。

 

        img:nth-child(1) {}
        img:nth-child(2) {
          filter: hue-rotate(90deg);
        }
        img:nth-child(3) {
          filter: hue-rotate(180deg);
        }
        img:nth-child(4) {
          filter: hue-rotate(450deg);
        }

 

 

  (7)invert(),該函數反轉輸入影像,參數值定義轉換比例,參數為100%表示完全反轉;參數為0%表示無變化,值在0%-100%之間。默認值為0%。

 

          img:nth-child(1) {}
          img:nth-child(2) {
            filter: invert(30%);
          }
          img:nth-child(3) {
            filter: invert(60%);
          }
          img:nth-child(4) {
            filter: invert(100%);
          }

 

 

  (8)opacity(),該函數轉化影像的透明度,值定義轉化比例。值為0%表示影像完全透明;值為100%表示影像無變化;值在0%-100%之間。默認值為100%。

 

          img:nth-child(1) {}
          img:nth-child(2) {
            filter: opacity(30%);
          }
          img:nth-child(3) {
            filter: opacity(60%);
          }
          img:nth-child(4) {
            filter: opacity(100%);
          }

 

 

  (9)saturate(),該函數設置影像飽和度,值定義轉化比例,值為0%則是完全不飽和,值為100%表示影像無變化;值在0%-100%之間。默認值為100%。

 

          img:nth-child(1) {}
          img:nth-child(2) {
            filter: saturate(0%);
          }
          img:nth-child(3) {
            filter: saturate(30%);
          }
          img:nth-child(4) {
            filter: saturate(60%);
          }

 

 

  (10)sepia(),該函數將影像轉化為深褐色,之定義轉化比例,值為100%表示完全深褐色,值為0%表示影像無變化;值在0%-100%之間。默認值為0%。

 

          img:nth-child(1) {}
          img:nth-child(2) {
            filter: sepia(30%);
          }
          img:nth-child(3) {
            filter: sepia(60%);
          }
          img:nth-child(4) {
            filter: sepia(100%);
          }

 

寫在最後

    有了上面的知識儲備,實現面試官這個需求就不難了,一行程式碼解決 filter: grayscale(1);比如在某寶首頁中就可以有如下的效果對比了

   以上就是本文的全部內容,希望給讀者帶來些許的幫助和進步,方便的話點個關注,小白的成長踩坑之路會持續更新一些工作中常見的問題和技術點。