佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 詳解Html5項目適配系統(tǒng)深色模式方案總結(jié)

詳解Html5項目適配系統(tǒng)深色模式方案總結(jié)

熱門標(biāo)簽:美圖手機(jī) 檢查注冊表項 使用U盤裝系統(tǒng) 硅谷的囚徒呼叫中心 網(wǎng)站建設(shè) 智能手機(jī) 百度競價點擊價格的計算公式 阿里云

一、背景

隨著 iOS 13 的發(fā)布,深色模式(Dark Mode)越來越多地出現(xiàn)在大眾的視野中,支持深色模式已經(jīng)成為現(xiàn)代移動應(yīng)用和網(wǎng)站的一個潮流,前段時間更是因為微信的適配再度引起熱議。深色模式不僅可以大幅減少電量的消耗,減弱強(qiáng)光對比,還能 提供更好的可視性和沉浸感。

如何切換深色模式

  • iOS:“設(shè)置”–“顯示與亮度”–“外觀”,選擇“深色”
  • Android:“系統(tǒng)設(shè)置”–“顯示”–“深色模式”。

二、問題

如果系統(tǒng)設(shè)置了深色模式,H5頁面不做相應(yīng)的處理,會出現(xiàn)背景色沖突、深色文字顯示異常,深色圖標(biāo)顯示異常等一些顯示上的問題。

所以,需要對深色模式進(jìn)行一些適配。

我嘗試了一些方案:

三、H5項目適配深色模式方案

1.聲明 color-scheme

color-scheme

有兩種方式。

1.1meta

在head中聲明<meta name="color-scheme" content="light dark"> ,聲明當(dāng)前頁面支持 light 和 dark 兩種模式,系統(tǒng)切換到深色模式時,瀏覽器默認(rèn)樣式也會切換到深色;

1.2CSS

下面的 css 同樣可以實現(xiàn)上面 meta 聲明的效果

:root {
    color-scheme: light dark;
}

注意:此聲明并非為頁面做自動適配,只影響瀏覽器默認(rèn)樣式

更多信息可查閱 W3C 文檔 《CSS Color Adjustment Module Level 1》

2.通過 CSS 媒體查詢

prefers-color-scheme

CSS 媒體特性用于檢測用戶是否有將系統(tǒng)的主題色設(shè)置為亮色或者暗色。

no-preference
表示系統(tǒng)未得知用戶在這方面的選項。在布爾值上下文中,其執(zhí)行結(jié)果為 false。

light
表示用戶已告知系統(tǒng)他們選擇使用淺色主題的界面。

dark
表示用戶已告知系統(tǒng)他們選擇使用暗色主題的界面。

:root {
    color-scheme: light dark;
    background: white;
    color: black;
}

@media (prefers-color-scheme: dark) {
    :root {
        background: black;
        color: white;
    }
}
//顏色較多的情況,建議使用CSS變量對顏色值進(jìn)行管理

3.圖片適配

利用picture+source標(biāo)簽,設(shè)置不同模式下的圖片 url。

HTML <picture>元素通過包含零或多個 <source> 元素和一個 <img> 元素來為不同的顯示/設(shè)備場景提供圖像版本。
瀏覽器會選擇最匹配的子 <source> 元素,如果沒有匹配的,就選擇 <img> 元素的 src 屬性中的URL。然后,所選圖像呈現(xiàn)在<img>元素占據(jù)的空間中。

<picture>
    <!-- 深色模式下的圖片 -->
    <source srcset="dark.jpg" media="(prefers-color-scheme: dark)" />
    <!-- 默認(rèn)模式下的圖片 -->
    <img src="light.jpg"/>
</picture>

4. JavaScript中判斷當(dāng)前模式&監(jiān)聽模式變化

4.1matchMedia

Window 的matchMedia() 方法返回一個新的MediaQueryList 對象,表示指定的媒體查詢 (en-US)字符串解析后的結(jié)果。返回的MediaQueryList 可被用于判定Document是否匹配媒體查詢,或者監(jiān)控一個document 來判定它匹配了或者停止匹配了此媒體查詢。

4.2addListener()
MediaQueryList接口的addListener()方法向MediaQueryListener添加一個偵聽器,該偵聽器將運(yùn)行自定義回調(diào)函數(shù)以響應(yīng)媒體查詢狀態(tài)的更改。

JavaScript監(jiān)聽判斷

const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')

function darkModeHandler() {
    if (mediaQuery.matches) {
        console.log('現(xiàn)在是深色模式')
    } else {
        console.log('現(xiàn)在是淺色模式')
    }
}

// 判斷當(dāng)前模式
darkModeHandler()
// 監(jiān)聽模式變化
mediaQuery.addListener(darkModeHandler)

到此這篇關(guān)于詳解Html5項目適配系統(tǒng)深色模式方案總結(jié)的文章就介紹到這了,更多相關(guān)Html5深色模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

標(biāo)簽:湘潭 懷化 山南 賀州 湖北 煙臺 黃山 通遼

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Html5項目適配系統(tǒng)深色模式方案總結(jié)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    台南县| 弥渡县| 寿宁县| 凤阳县| 商水县| 天全县| 石嘴山市| 漾濞| 陆丰市| 班玛县| 蒙城县| 永年县| 永兴县| 崇信县| 台湾省| 陆川县| 金沙县| 岢岚县| 类乌齐县| 清涧县| 夹江县| 乌鲁木齐县| 修武县| 手游| 汝南县| 平乐县| 武强县| 雷州市| 商都县| 万年县| 元氏县| 巴楚县| 灌云县| 北碚区| 长沙市| 金溪县| 沁水县| 平乡县| 林芝县| 南召县| 吉水县|