[點(diǎn)晴永久免費(fèi)OA]現(xiàn)代 CSS 解決方案:文字顏色自動(dòng)適配背景色!
在 23 年的 CSS 新特性中,有一個(gè)非常重要的功能更新 -- 相對(duì)顏色。 簡(jiǎn)單而言,相對(duì)顏色的功能,讓我們?cè)?CSS 中,對(duì)顏色有了更為強(qiáng)大的掌控能力。 其核心功能就是,讓我們能夠基于一個(gè)現(xiàn)有顏色 A,通過(guò)一定的轉(zhuǎn)換規(guī)則,快速生成我們想要的顏色 B。 其功能能夠涵蓋: 完整的教程,你可以看這里 -- Chrome for Developers- CSS 相對(duì)顏色語(yǔ)法 當(dāng)然,今天我們不會(huì)一個(gè)一個(gè)去過(guò)這些功能,更多的時(shí)候,我們只需要知道我們能夠?qū)崿F(xiàn)這些功能。 本文,我們將從實(shí)際實(shí)用角度出發(fā),基于實(shí)際的案例,看看 CSS 相對(duì)顏色,能夠如何解決我們的一些實(shí)際問(wèn)題。 快速語(yǔ)法入門首先,我們通過(guò)一張圖,一個(gè)案例,快速入門 CSS 相對(duì)顏色語(yǔ)法: 相對(duì)顏色語(yǔ)法的目標(biāo)是允許從另一種顏色派生顏色。 上圖顯示了將原始顏色 green 轉(zhuǎn)換為新顏色的顏色空間后,該顏色會(huì)轉(zhuǎn)換為以 r、g、b 和 alpha 變量表示的各個(gè)數(shù)字,這些數(shù)字隨后會(huì)直接用作新的 rgb() 顏色的值。 舉個(gè)例子: <p> CSS Relative Color </p> p { color: rgb(255, 0, 0);} 實(shí)現(xiàn)一個(gè) color 為紅色(rgb 值為 基于上面的相對(duì)顏色語(yǔ)法,我如何通過(guò)一個(gè)紅色生成綠色文字呢?示意如下: p { --color: rgb(255, 0, 0); color: rgb(from var(--color) calc(r - 255) calc(g + 255) b); /* result = rgb(0, 255, 0) */ } 效果如下,我們就得到綠色字體: 解釋一下:
通過(guò)這個(gè) DEMO,我們把幾個(gè)核心基礎(chǔ)語(yǔ)法點(diǎn)學(xué)習(xí)一下:
第二個(gè)關(guān)鍵點(diǎn),from 后面通常會(huì)接一個(gè)顏色值,這個(gè)顏色值可以是任意顏色表示法,或者是一個(gè) CSS 變量,下面的寫法都是合法的: p { color: rgba(from #ff0000) r g b); color: rgb(from rgb(255, 0, 0) r g b); color: rgb(from hsl(0deg, 100%, 50%) r g b); color: rgb(from var(--hotpink) r g b); }
另外一個(gè)非常重要的基礎(chǔ)概念就是,我們可以對(duì) 就是我們上面的例子: p { --color: rgb(255, 0, 0); color: rgb(from var(--color) calc(r - 255) calc(g + 255) b); /* result = rgb(0, 255, 0) */ }
相對(duì)顏色的基礎(chǔ)的使用規(guī)則就是這樣,它不僅支持 使用 CSS 相對(duì)顏色,實(shí)現(xiàn)統(tǒng)一按鈕點(diǎn)擊背景切換通常頁(yè)面上的按鈕,都會(huì)有 hover/active 的顏色變化,以增強(qiáng)與用戶的交互。 像是這樣: 最常見(jiàn)的寫法,就是我們需要在 Normal 狀態(tài)、Hover 狀態(tài)、Active 狀態(tài)下寫 3 種顏色: p { color: #ffcc00; transition: .3s all; } /* Hover 偽類下為 B 顏色 */ p:hover { color: #ffd21f; } /** Active 偽類下為 C 顏色 **/ p:active { color: #ab8a05; } 在之前,我們介紹過(guò)一種利用濾鏡 在今天,我們也可以利用 CSS 相對(duì)顏色來(lái)做這個(gè)事情: p { color: #ffcc00; transition: .3s all; } /* Hover 偽類下為 B 顏色 */ p:hover { color: #ffd21f; } /** Active 偽類下為 C 顏色 **/ p:active { color: #ab8a05; } 我們通過(guò)
在實(shí)際業(yè)務(wù)中,這是一個(gè)非常有用的用法。 完整的 DEMO,你可以戳這里:CodePen Demo -- https://codepen.io/Chokcoco/pen/KKEdOeb 使用 CSS 相對(duì)顏色,實(shí)現(xiàn)文字顏色自適應(yīng)背景相對(duì)顏色,還有一個(gè)非常有意思的場(chǎng)景 -- 讓文字顏色能夠自適應(yīng)背景顏色進(jìn)行展示。 有這么一種場(chǎng)景,有的時(shí)候,無(wú)法確定文案的背景顏色的最終表現(xiàn)值(因?yàn)楸尘邦伾闹悼赡苁呛笈_(tái)配置,通過(guò)接口傳給前端),但是,我們又需要能夠讓文字在任何背景顏色下都正常展現(xiàn)(譬如當(dāng)?shù)咨珵楹谏珪r(shí)文字應(yīng)該是白色,當(dāng)背景為白色時(shí),文字應(yīng)該為黑色)。 像是這樣: 在不確定背景顏色的情況下,無(wú)論什么情況,文字顏色都能夠適配背景的顏色。 在之前,純 CSS 沒(méi)有特別好的方案,可以利用 div { // 不確定的背景色 } p { color: #fff; mix-blend-mode: difference; } 實(shí)操過(guò)這個(gè)方案的同學(xué)都會(huì)知道,在一定情況下,前景文字顏色還是會(huì)有一點(diǎn)瑕疵。并且,混合模式這個(gè)方案最大的問(wèn)題是會(huì)影響清晰度。 有了 CSS 相對(duì)顏色后,我們有了更多的純 CSS 方案。 利用 CSS 相對(duì)顏色,反轉(zhuǎn)顏色我們可以利用相對(duì)顏色的能力,基于背景色顏色進(jìn)行反轉(zhuǎn),賦值給 color。 一種方法是將顏色轉(zhuǎn)換為 RGB,然后從 1 中減去每個(gè)通道的值。 代碼非常簡(jiǎn)單: p { /** 任意背景色 **/ --bg: #ffcc00; background: var(--bg); color: rgb(from var(--bg) calc(1 - r) calc(1 - g) calc(1 - b)); /** 基于背景反轉(zhuǎn)顏色 **/ }
效果如下: 配個(gè)動(dòng)圖,我們利用背景色的反色當(dāng) Color 顏色,適配所有背景情況: 完整的 DEMO 和代碼,你可以戳這里:CodePen Demo -- CSS Relatvie Color Adapt BG 當(dāng)然,這個(gè)方案還有兩個(gè)問(wèn)題:
為了解決這兩個(gè)問(wèn)題,CSS 顏色規(guī)范在 CSS Color Module Level 6 又推出了一個(gè)新的規(guī)范 -- color-contrast()。 利用 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |