除了 filter 還有什麼置灰網站的方式?

来源:https://www.cnblogs.com/coco1s/archive/2022/12/02/16943642.html
-Advertisement-
Play Games

大家都知道,當一些重大事件發生的時候,我們的網站,可能需要置灰,像是這樣: 當然,通常而言,全站置灰是非常簡單的事情,大部分前端同學都知道,僅僅需要使用一行 CSS,就能實現全站置灰的方式。 像是這樣,我們僅僅需要給 HTML 添加一個統一的濾鏡即可: html { filter: grayscal ...


大家都知道,當一些重大事件發生的時候,我們的網站,可能需要置灰,像是這樣:

當然,通常而言,全站置灰是非常簡單的事情,大部分前端同學都知道,僅僅需要使用一行 CSS,就能實現全站置灰的方式。

像是這樣,我們僅僅需要給 HTML 添加一個統一的濾鏡即可:

html {
    filter: grayscale(.95);
    -webkit-filter: grayscale(.95);
}

又或者,使用 SVG 濾鏡,也可以快速實現網站的置灰:

<div>
// ...
</div>

<svg xmlns="https://www.w3.org/2000/svg">
  <filter id="grayscale">
    <feColorMatrix type="matrix" values="0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0"/>
    </filter>
</svg>
html {
    filter: url(#grayscale);
}

大部分時候,這樣都可以解決大部分問題。不過,也有一些例外。譬如,如果我們僅僅需要置灰網站的首屏,而當用戶開始滾動頁面的時候,非首屏部分不需要置灰,像是如下動圖所示,該怎麼辦呢?

看看示意:

這種只置灰首屏的訴求該如何實現呢?

使用 backdrop-filter 實現濾鏡遮罩

這裡,我們可以藉助 backdrop-filter 實現一種遮罩濾鏡效果。

filter VS backdrop-filter

在 CSS 中,有兩個和濾鏡相關的屬性 -- filterbackdrop-filter

backdrop-filter 是更為新的規範推出的新屬性,可以點擊查看 Filter Effects Module Level 2。

  • filter:該屬性將模糊或顏色偏移等圖形效果應用於元素。
  • backdrop-filter: 該屬性可以讓你為一個元素後面區域添加圖形效果(如模糊或顏色偏移)。 它適用於元素背後的所有元素,為了看到效果,必須使元素或其背景至少部分透明。

註意兩者之間的差異,filter 是作用於元素本身,而 backdrop-filter 是作用於元素背後的區域所覆蓋的所有元素。而它們所支持的濾鏡種類是一模一樣的。

backdrop-filter 最為常見的使用方式是用其實現毛玻璃效果。

看這樣一段代碼:

<div class="bg">
    <div>Normal</div>
    <div class="g-filter">filter</div>
    <div class="g-backdrop-filter">backdrop-filter</div>
</div>
.bg {
    background: url(image.png);
    
    & > div {
        width: 300px;
        height: 200px;
        background: rgba(255, 255, 255, .7);
    }
    .g-filter {
        filter: blur(6px);
    }
    .g-backdrop-filter {
        backdrop-filter: blur(6px);
    }
}

CodePen Demo -- filter 與 backdrop-filter 對比

filterbackdrop-filter 使用上最明顯的差異在於:

  • filter 作用於當前元素,並且它的後代元素也會繼承這個屬性
  • backdrop-filter 作用於元素背後的所有元素

仔細區分理解,一個是當前元素和它的後代元素,一個是元素背後的所有元素

理解了這個,就能夠明白為什麼有了 filter,還會有 backdrop-filter

使用 backdrop-filter 實現首屏置灰遮罩

這樣,我們可以快速的藉助 backdrop-filter 實現首屏的置灰遮罩效果:

html {
    position: relative;
    width: 100%;
    height: 100%;
    overflow: scroll;
}
html::before {
    content: "";
    position: absolute;
    inset: 0;
    backdrop-filter: grayscale(95%);
    z-index: 10;
}

僅僅只是這樣而已,我們就在整個頁面上方疊加了一層濾鏡蒙版,實現了只對首屏頁面的置灰:

藉助 pointer-events: none 保證頁面交互

當然,這裡有個很嚴重的問題,我們的頁面是存在大量交互效果的,如果疊加了一層遮罩效果在其上,那這層遮罩下方的所有交互事件都將失效,譬如 hover、click 等。

那該如何解決呢?這個也好辦,我們可以通過給這層遮罩添加上 pointer-events: none,讓這層遮罩不阻擋事件的點擊交互。

代碼如下:

html::before {
    content: "";
    position: absolute;
    inset: 0;
    backdrop-filter: grayscale(95%);
    z-index: 10;
  + pointer-events: none;
}

CodePen Demo -- Gray Website by backdrop-filter

當然,有同學又會開始質疑了,backdrop-filter 雖好,但是你自己瞅瞅它的相容性,很多舊版 firefox 不支持啊大哥。我們那麼多火狐的用戶咋辦?

截至至 2022/12/01,Firefox 的最新版本為 109,但是在 Firefox 103 之前,都是不支持 backdrop-filter 的。

別急,除了 filterbackdrop-filter,我們還有方式能夠實現網站的置灰。

藉助混合模式實現網站置灰

除了 filterbackdrop-filter 外,CSS 中另外一個能對顏色進行一些干預及操作的屬性就是 mix-blend-modebackground-blend-mode 了,翻譯過來就是混合模式。

如果你對混合模式還比較陌生,可以看看我的這幾篇文章

這裡,backdrop-filter 的替代方案是使用 mix-blend-mode

看看代碼:

html {
    position: relative;
    width: 100%;
    height: 100%;
    overflow: scroll;
    background: #fff;
}
html::before {
    content: "";
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 1);
    mix-blend-mode: color;
    pointer-events: none;
    z-index: 10;
}

我們還是疊加了一層額外的元素在整個頁面的首屏,並且把它的背景色設置成了黑色 background: rgba(0, 0, 0, 1),正常而言,我們的網站應該是一片黑色的。

但是,神奇的地方在於,通過混合模式的疊加,也能夠實現網站元素的置灰。我們來看看效果:

經過實測:

{
  mix-blend-mode: hue;            // 色相
  mix-blend-mode: saturation;     // 飽和度
  mix-blend-mode: color;          // 顏色
}

上述 3 個混合模式,疊加黑色背景,都是可以實現內容的置灰的。

值得註意的是,上述方法,我們需要給 HTML 設置一個白色的背景色,同時,不要忘記了給遮罩層添加一個 pointer-events: none

CodePen Demo -- Gray Website By MixBlendMode

總結一下

這裡,再簡單總結一下。

  1. 如果你需要全站置灰,使用 CSS 的 filter: grayscale()
  2. 對於一些低版本的瀏覽器,使用 SVG 濾鏡通過 filter 引入
  3. 對於僅僅需要首屏置灰的,可以使用 backdrop-filter: grayscale() 配合 pointer-events: none
  4. 對於需要更好相容性的,使用混合模式的 mix-blend-mode: huemix-blend-mode: saturationmix-blend-mode: color 也都是非常好的方式

有個小技巧,在 CSS 的世界中,但凡和顏色打交道的事情,你都應該想起 filterbackdrop-filtermix-blend-mode

最後

好了,本文到此結束,希望本文對你有所幫助

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.JDBC概述 1.1 基本概念 JDBC(Java Database Connectivity)就是Java資料庫連接,是一種用於執行SQL語句的Java技術,提供了訪問多種關係資料庫的統一方式,主要藉助Java語言編寫的類和介面。 1.2 JDBC 原理 JDBC是由SUN公司定義的一套訪問數 ...
  • 同一個數據分析的需求,不同人的SQL代碼效率上會差別很大!本文給大家梳理集中效率優化方法,這也是數據崗面試的高頻問題哦!快學起來~ ...
  • 概要 在前端下載文件是個很通用的需求,一般後端會提供下載的方式有兩種: 直接返迴文件的網路地址(一般用在靜態文件上,比如圖片以及各種音視頻資源等) 返迴文件流(一般用在動態文件上,比如根據前端選擇,導出不同的統計結果 excel 等) 第一種方式比較簡單,但是使用場景有限。第二種方式通用性更好,最近 ...
  • 一、position 定位屬性和屬性值position 定位屬性,檢索對象的定位方式;語法:position:static /absolute/relative/fixed/sticky/unset/inherit(未設置是inherit和initial的結合)/initial(最初的,初始的)取值 ...
  • JQuery02 4.jQuery選擇器02 4.3過濾選擇器 4.3.1基礎過濾選擇器 $("li:first") //第一個li $("li:last") //最後一個li $("li:even") //挑選下標為偶數的li $("li:odd") //挑選下標為奇數的li $("li:eq(4 ...
  • 前言 之前在part2中說的添加自定義主題配色已經開發完成了,除此之外我還添加了一些的3d特效。 前期文章 這是part1的文章:https://www.cnblogs.com/xi12/p/16690119.html 這是part2的文章:https://www.cnblogs.com/xi12/ ...
  • 大家應該有發現最近幾天不少網站變成了黑白色,在哀悼日時,很多網站都需要全站變成黑白配色,今天對這個實現的技術做了一些探索性瞭解,在此進行一個記錄分享。 使用的樣式部分:下麵的css部分想必大家應該都可以看懂,主要是對主流的谷歌內核瀏覽器和小眾些的品牌瀏覽器做整體的網頁圖片處理,IE瀏覽器除了IE10 ...
  • 父組件向子組件 父組件向子組件傳參:父組件中的子組件標簽中增加 :param="param" 子組件中增加 props 接受參數(註意props需要與data同級) props: { param: { type: Object } }, data() { return { ... } }, 父組件調 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...