搜尋
首頁web前端css教學CSS :focus-within的具體使用方法講解

CSS :focus-within的具體使用方法講解

Sep 20, 2017 am 09:48 AM
使用方法

這篇文章主要介紹了CSS :focus-within的具體使用的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

CSS的世界真是一個神奇的世界。或許有許多前端開發者聽過 :focus 並未聽過 :focus-within 。那麼 :focus-within 是什麼鬼。這篇文章,我們就說說 :focus-within 這個東東。

:focus-within是什麼

在CSS中:focus-within 是偽類,現在已經被列入CSS選擇器中(CSS Level 4 selector)。他就像你知道的 :focus 或 :hover 。 :focus-within 能非常方便處理取得焦點狀態。當元素本身或其後代元素獲得焦點時, :focus-within 偽類的元素就會有效。

如果文字不好理解,咱們先來看一個簡單的範例:


#
<p class="form-group">
    <label for="email">
        Your email:
    </label>
    <input type="email" name="email" id="email" placeholder="Enter your email address"/>
</p>

上面是一個簡單的表單,有一個 input 表單控制項。


.form-group *:focus {
    background: yellow;
    color: #000;
}
.form-group {
    padding: 10px;
    border: 3px solid transparent
}

.form-group:focus-within {
    border-color: #000;
}

上面的範例中, .form-group 得到焦點的時候, border-color 顏色換成了 #000 。但這不代表接收鍵盤的焦點,那是因為

不一定能得到鍵盤的焦點,沒有設定 tabindex 。或者說 p 中的連結或 input 元素接收焦點,那麼 .form-group 元素將會改變邊框顏色。

看到上面的範例,是不是覺得好神奇。在以前要實現類似的效果,我們需要藉助JavaScript的腳本。透過 .form-group 的後代元素的滑鼠或鍵盤事件,然後給其父元素(或祖先元素,添加對應的樣式)。

:focus-within的使用場景

:focus-within 非常強大,主要是由於偽類在它的任何元素獲取到焦點時都將被激活。當元素包含許多子組件的元素上謹慎使用該偽類。

有了 :focus-within 之後,有一些常見的互動行為就變得非常的簡單,特別是以前需要JavaScript的鍵盤事件的互動行為,我們都可以使用 :focus-within 來取代。

接下來,咱們來看一些 :focus-within 的常見範例。

表格行的高亮

一個常見的例子,就是表格行高亮的行為,即滑鼠懸浮在表格的行時,顏色變得高亮。這樣的互動樣式可以幫助有視力阻礙的使用者能更好的閱讀一個複雜的表格或長表格。因為突出的顯示,可以使用這些用戶更容易追蹤他們目前正在閱讀的表格行。以前常常實現的方式是透過:hover 來改變表格行的樣式,這種方案對於正常的用戶而言是一件易事,但如果你的用戶對於一些操作滑鼠有阻礙的用戶而言,那:hover就有點蛋痛了。如果你是追求完美的話,你可能會透過JavaScript的鍵盤事件為表格行添加樣式。

那麼有了 :focus-within 之後,我們就可以跟JavaScript說拜拜。我們可以這樣來設定樣式:

上面的範例展示如何使用 :focus-within 來突出表格的整個行。如果在特定的表格行中有一個可取得焦點的可用元素,這裡所指的是透過鍵盤取得焦點。例如上面這個範例,表格中有 元素,你懂的, a 元素是可以透過鍵盤取得焦點的。

這個時候你只需要在樣式中加入:


tbody tr:focus-within,
tbody tr:hover {
    background: rgba(lightBlue, .4);
}

下拉選單

下拉選單就是我們最常的Web元件之一。當我第一次看到 :focus-within 這個偽類時,我想到的第一個使用場景就是下拉式選單。

在上面的範例中,JavaScript是用來追蹤使用者鍵盤焦點在一個導航下拉式選單中的。如果JavaScript偵測到鍵盤焦點在一個連結上,那麼就為 .nav__list_drop 新增一個 .has-focus 類別。當 li 有了 .has-focus 類別時,他的子元素就會顯示出來,也就是下拉式選單會顯示出來。

這樣的效果,我們可以直接透過 :focus-within 取代JavaScript腳本的功能。使用 .nav__list__drop:focus-within 替代 .nav__list__drop.has-focus 。當你操作鍵盤,讓下拉式選單項目獲得焦點時,就會顯示下拉式選單。


.nav__list a:focus + .nav__list__drop,
.has-drop:hover .nav__list__drop,
.nav__list__drop:focus-within {
    opacity: 1;
    transform: translateY(0px);
    height: auto;
    z-index: 1;
}

Off-screen Nav

#Off-screen Nav是在行動端上常見的效果。那麼這個效果我們也可以透過 :focus-within 來實現。詳細程式碼可以看下面這個範例:

瀏覽器相容性

:focus-within 雖然很有意思,但許多同學擔心它的相容性。透過Caniuse,我們可以看到瀏覽器對其支持度情況:

總結

如果你熟悉:focus 並不奇怪,但是你知道:focus-within的話,說明你在不斷的關注CSS相關的新特性。當然這個屬性又刷新了CSS的世界真是奇怪。如果你有興趣的話,不彷自己寫書Demo。你會喜歡上這個屬性的。

以上是CSS :focus-within的具體使用方法講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
這麼多顏色鏈接這麼多顏色鏈接Apr 13, 2025 am 11:36 AM

最近有一系列有關顏色的工具,文章和資源。請允許我通過將它們四捨五之後關閉幾個標籤,以供您享受。

自動利潤在Flexbox中的工作方式自動利潤在Flexbox中的工作方式Apr 13, 2025 am 11:35 AM

羅賓以前已經介紹過這一點,但是我在過去的幾周里聽到了一些關於它的困惑,看到另一個人在解釋它,我想

移動彩虹移動彩虹Apr 13, 2025 am 11:27 AM

我絕對喜歡三明治網站的設計。在許多美麗的功能中,這些標題是滾動時帶有彩虹的下線。它不是

新年,新工作?讓我們做一個網格驅動的簡歷!新年,新工作?讓我們做一個網格驅動的簡歷!Apr 13, 2025 am 11:26 AM

許多流行的簡歷設計通過以網格形狀鋪設部分來充分利用可用的頁面空間。讓我們使用CSS網格創建一個佈局

將用戶擺脫過多習慣的一種方法將用戶擺脫過多習慣的一種方法Apr 13, 2025 am 11:25 AM

頁面重新加載是一回事。有時,當我們認為它沒有響應或認為新內容可用時,我們會刷新頁面。有時我們只是生氣

域驅動的設計與React域驅動的設計與ReactApr 13, 2025 am 11:22 AM

關於如何在React世界中組織前端應用的指導很少。 (只需移動文件,直到“感覺正確”,大聲笑)。真相

檢測非活動用戶檢測非活動用戶Apr 13, 2025 am 11:08 AM

大多數情況下,您並不真正在乎用戶是否積極參與或暫時非活動。不活躍,意思,也許他們

Wufoo ZapierWufoo ZapierApr 13, 2025 am 11:02 AM

Wufoo一直在集成方面非常出色。他們與特定應用程序(例如廣告系列顯示器,MailChimp和Typekit)進行集成,但他們也

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能