CSS 的currentColor
屬性非常實用,但遺憾的是,我們沒有類似的currentBackgroundColor
屬性,而且color-mod()
函數也尚未廣泛支持。
因此,許多開發者希望根據上下文樣式化鏈接,並在懸停或聚焦時反轉顏色。借助CSS 自定義屬性和一些簡單的實用程序類,我們可以利用樣式的層疊特性實現強大的效果。
為此,我們需要使用實用程序類(包含自定義屬性)來指定文本和背景顏色,然後用這些類定義下劃線的顏色,並在懸停時擴展為完整的背景。
首先,來看HTML 結構:
<p> Lorem ipsum dolor sit amet, consectetur adipiscing elit, <a href="https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b">sed do eiusmod tempor incididunt</a> ut labore et dolore magna aliqua. Aliquam sem fringilla ut morbi tincidunt. Maecenas accumsan lacus vel facilisis. Posuere sollicitudin aliquam ultrices sagittis orci a scelerisque purus semper. </p>
這段代碼包含一個段落和一個鏈接。接下來,我們設置實用程序類。我將在Color Hunt 上定義四種顏色,分別創建顏色屬性類和背景顏色屬性類,每個類都包含一個變量來賦值(分別為--c
和--bg
)。例如,綠色顏色對應的類如下:
.u-color--green { --c: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b08ffc8; color: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b08ffc8; } .u-bg--green { --bg: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b08ffc8; background-color: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b08ffc8; }
Sass 用戶可以使用映射和循環來自動創建顏色和背景類。這並非必需,只是自動創建許多顏色相關實用程序類的一種方法。這非常有用,但要跟踪使用情況,避免創建未使用的類。以下是生成這些類的Sass 代碼:
$colors: ( // 定義顏色列表'green': https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b08ffc8, 'light': https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bfff7f7, 'grey': https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bdadada, 'dark': https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b204969 ); @each $n, $c in $colors { // $n 為鍵,$c 為值.u-color--https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b{$n} { --c: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b{$c}; color: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b{$c}; } .u-bg--https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b{$n} { --bg: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b{$c}; background-color: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b{$c}; } }
如果忘記在HTML 中應用實用程序類, --c
變量將使用currentColor
, --bg
也是如此!為了避免這種情況,我們定義一個頂級默認值:
html { --c: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b000000; --bg: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bffffff; }
現在,只需要樣式化鏈接即可。本文中我們將樣式化所有<a></a>
元素,但也可以輕鬆添加例如.fancy-link
這樣的類。
鏈接的樣式應遵循“LoVe-HAte” 順序: :link
、 :visited
、 :hover
(和:focus
!)以及:active
。我們可以使用:any-link
,但瀏覽器支持度不如CSS 自定義屬性好。
我們可以先聲明鏈接樣式,為舊版瀏覽器提供可接受的體驗,然後檢查自定義屬性支持:
/* 舊版瀏覽器的樣式*/ a { color: inherit; text-decoration: underline; } a:hover, a:focus, a:active { text-decoration: none; outline: .0625em solid currentColor; outline-offset: .0625em; } a:active { outline-width: .125em; } @supports (--a: b) { /* 檢查CSS 變量支持*/ /* 默認變量值*/ html { --c: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b000000; --bg: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bffffff; } a { /* 基本鏈接樣式*/ } }
接下來創建基本鏈接樣式。我們將使用自定義屬性使樣式盡可能DRY。
首先,我們需要設置變量。我們想要定義一個--space
變量,用於各種屬性,在文本周圍添加一些空間。鏈接顏色也將在--link-color
變量中定義,默認為currentColor
。虛假下劃線將使用背景圖像生成,其大小將根據狀態使用--bg-size
變量調整,默認為--space
值。最後,為了增加趣味性,我們還將在鏈接處於:active
狀態時模擬一個邊框,因此我們將在--shadow-size
中定義其大小,在非活動狀態下設置為0。這給了我們:
--space: .125em; --link-color: currentColor; --bg-size: var(--space); --shadow-size: 0;
首先,我們需要調整回退樣式。我們將設置顏色以使用自定義屬性,並刪除默認的下劃線:
color: var(--link-color); text-decoration: none;
接下來創建虛假下劃線。該圖像將是一個線性漸變,具有兩個相同的起點和終點:文本顏色--c
。我們確保它只水平重複background-repeat: repeat-x;
,並將其放置在元素底部background-position: 0 100%;
。最後,我們給出它的尺寸,水平為100%,垂直為--bg-size
值。最終得到:
background-image: linear-gradient(var(--c, currentColor), var(--c, currentColor)); background-repeat: repeat-x; background-position: 0 100%; background-size: 100% var(--bg-size);
為了:active
狀態,我們還定義了box-shadow
,它將不存在,但使用我們的變量,它將能夠生效: box-shadow: 0 0 0 var(--shadow-size, 0) var(--c);
這是基本樣式的大部分內容。現在,我們需要根據鏈接狀態為變量分配新值。
:link
和:visited
是用戶在鏈接處於“空閒”狀態時看到的。由於我們已經設置好了一切,這是一個簡短的規則集。雖然我們可以在--link-color
的初始賦值中聲明--c
變量,但我在這裡賦值是為了使我們樣式的每個步驟都清晰明了:
a:link, a:visited { --link-color: var(--c); }
鏈接現在看起來很酷,但如果我們與它交互,什麼也不會發生……接下來創建這些樣式。需要發生兩件事:背景必須佔據所有可用高度(即100%),並且文本顏色必須更改為背景的顏色,因為背景是文本顏色(令人困惑,對吧?)。第一個很簡單: --bg-size: 100%;
。對於文本顏色,我們分配--bg
變量,如下所示: --link-color: var(--bg);
。連同我們的偽類選擇器,我們最終得到:
a:hover, a:focus, a:active { --bg-size: 100%; --link-color: var(--bg); }
看,懸停或聚焦時下劃線變成了完整的背景!作為獎勵,我們可以通過增加--shadow-size
來添加點擊鏈接時的模擬邊框,我們的--space
變量將再次派上用場:
a:active { --shadow-size: var(--space); }
我們現在差不多完成了!但是,它看起來有點過於通用,所以讓我們添加一個過渡、一些填充和圓角,並確保如果鏈接跨越多行,它看起來也很不錯!
對於過渡,我們只需要動畫顏色、背景大小和box-shadow
。持續時間由您決定,但鑑於鏈接通常約為20 像素高,我們可以設置一個較短的持續時間。最後,為了使它看起來更流暢,讓我們使用ease-in-out
緩動。這總結為:
transition-property: color, background-size, box-shadow; transition-duration: 150ms; transition-timing-function: ease-in-out; will-change: color, background-size, box-shadow; /* 讓瀏覽器知道哪些屬性即將被操作。 */
接下來,我們將--space
變量分配給padding
和border-radius
,但不要擔心前者——因為我們沒有將其定義為內聯塊,所以padding
不會弄亂文本塊的垂直節奏。 (只需確保測試您的值)
padding: var(--space); border-radius: var(--space);
最後,為了確保樣式在多行上正確應用,我們只需要添加box-decoration-break: clone;
(以及前綴,如果您願意),就是這樣。
完成後,我們應該有這些樣式:
/* 舊版瀏覽器的樣式*/ a { color: inherit; text-decoration: underline; } a:hover, a:focus, a:active { text-decoration: none; outline: .0625em solid currentColor; outline-offset: .0625em; } a:active { outline-width: .125em; } /* 現代瀏覽器的基本鏈接樣式*/ @supports (--a: b) { /* 默認變量值*/ html { --c: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b000000; --bg: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bffffff; } a { /* 變量*/ --space: .125em; --link-color: currentColor; --bg-size: var(--space); --shadow-size: 0; /* 佈局*/ padding: var(--space); /* 內聯元素不會影響垂直節奏,因此我們不需要指定每個方向*/ /* 文本樣式*/ color: var(--link-color); /* 使用變量設置顏色*/ text-decoration: none; /* 刪除默認下劃線*/ /* 盒子樣式*/ border-radius: var(--space); /* 使其更漂亮✨ */ background-image: linear-gradient(var(--c, currentColor), var(--c, currentColor)); background-repeat: repeat-x; background-position: 0 100%; background-size: 100% var(--bg-size); box-shadow: 0 0 0 var(--shadow-size, 0) var(--c, currentColor); /* 在:active 狀態下使用*/ box-decoration-break: clone; /* 確保樣式在跨越多行的鏈接上重複*/ /* 過渡聲明*/ transition-property: color, background-size, box-shadow; transition-duration: 150ms; transition-timing-function: ease-in-out; will-change: color, background-size, box-shadow; } /* 空閒狀態*/ a:link, a:visited { --link-color: var(--c, currentColor); /* 使用--c,或回退到currentColor */ } /* 交互狀態*/ a:hover, a:focus, a:active { --bg-size: 100%; --link-color: var(--bg); } /* 活動狀態*/ a:active { --shadow-size: var(--space); /* 定義box-shadow 大小*/ } }
當然,它比只使用下劃線要復雜一些,但與允許您始終訪問文本和背景顏色的實用程序類結合使用,它是一個相當不錯的漸進式增強。
您可以使用三個變量來增強此功能,每個顏色使用rgb 或hsl 格式來調整不透明度等。您還可以添加文本陰影來模擬text-decoration-skip-ink
!
以上是具有自定義屬性的顏色的上下文實用課程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

在這篇文章中,布萊克·莫里(Blackle Mori)向您展示了一些駭客,同時試圖推動同位HTML支持的極限。如果您敢於使用這些,以免您也被標記為CSS罪犯。

具有CSS的自定義光標很棒,但是我們可以將JavaScript提升到一個新的水平。使用JavaScript,我們可以在光標狀態之間過渡,將動態文本放置在光標中,應用複雜的動畫並應用過濾器。

互動CSS動畫和元素相互啟動的元素在2025年似乎更合理。雖然不需要在CSS中實施乒乓球,但CSS的靈活性和力量的增加,可以懷疑Lee&Aver Lee有一天會成為一種

有關利用CSS背景濾波器屬性來樣式用戶界面的提示和技巧。您將學習如何在多個元素之間進行背景過濾器,並將它們與其他CSS圖形效果集成在一起以創建精心設計的設計。

好吧,事實證明,SVG的內置動畫功能從未按計劃進行棄用。當然,CSS和JavaScript具有承載負載的能力,但是很高興知道Smil並沒有像以前那樣死在水中

是的,讓#039;跳上文字包裝:Safari Technology Preview In Pretty Landing!但是請注意,它與在鉻瀏覽器中的工作方式不同。

此CSS-tricks更新了,重點介紹了年鑑,最近的播客出現,新的CSS計數器指南以及增加了幾位新作者,這些新作者貢獻了有價值的內容。

在大多數情況下,人們展示了@Apply的@Apply功能,其中包括Tailwind的單個property實用程序之一(會改變單個CSS聲明)。當以這種方式展示時,@Apply聽起來似乎很有希望。如此明顯


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

禪工作室 13.0.1
強大的PHP整合開發環境

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3漢化版
中文版,非常好用

Atom編輯器mac版下載
最受歡迎的的開源編輯器