搜尋
首頁web前端css教學focus-within的使用詳解

focus-within的使用詳解

Mar 21, 2018 am 10:45 AM
使用詳解

這次帶給大家focus-within的使用詳解,使用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>
    <label>
        Your email:
    </label>
    <input>
</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偵測到鍵盤焦點在一個連結上,那麼就為 .navlist_drop 新增一個 .has-focus 類別。當 li 有了 .has-focus 類別時,他的子元素就會顯示出來,也就是下拉式選單會顯示出來。

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

.navlist a:focus + .navlistdrop,
.has-drop:hover .navlistdrop,
.navlistdrop: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。你會喜歡上這個屬性的。

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

css3文字漸層動畫

#css3做出半圓弧線

css中sticker-footer佈局如何使用

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

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
保證金是什麼:40px 100px 120px 80px表示?保證金是什麼:40px 100px 120px 80px表示?Apr 28, 2025 pm 05:31 PM

文章討論了CSS保證金屬性,特別是“保證金:40px 100px 120px 80px”,其應用程序以及對網頁佈局的影響。

什麼是不同的CSS邊框特性?什麼是不同的CSS邊框特性?Apr 28, 2025 pm 05:30 PM

本文討論了CSS邊境屬性,重點是自定義,最佳實踐和響應能力。主要論點:邊境 - 拉迪烏斯(Border-Radius)對響應式設計最有效。

什麼是CSS背景,列出屬性?什麼是CSS背景,列出屬性?Apr 28, 2025 pm 05:29 PM

本文討論了CSS背景屬性,它們在增強網站設計方面的用途以及避免的常見錯誤。重點是使用背景大小的響應式設計。

什麼是CSS HSL顏色?什麼是CSS HSL顏色?Apr 28, 2025 pm 05:28 PM

文章討論了CSS HSL顏色,其在網絡設計中的使用以及比RGB的優勢。主要重點是通過直觀的顏色操縱來增強設計和可訪問性。

我們如何在CSS中添加評論?我們如何在CSS中添加評論?Apr 28, 2025 pm 05:27 PM

本文討論了CSS中評論的使用,詳細介紹了單線和多行評論語法。它認為註釋可以增強代碼的可讀性,可維護性和協作,但如果無法正確管理,可能會影響網站性能。

什麼是CSS選擇器?什麼是CSS選擇器?Apr 28, 2025 pm 05:26 PM

本文討論了CSS選擇器,其類型和用於造型HTML元素的用法。它比較ID和類選擇器,並與復雜的選擇器解決性能問題。

哪種類型的CSS持有最高優先級?哪種類型的CSS持有最高優先級?Apr 28, 2025 pm 05:25 PM

本文討論了CSS優先級,重點是具有最高特異性的內聯風格。它解釋了特異性級別,覆蓋方法和用於管理CSS衝突的工具。

我們可以通過幾種方式將CSS添加到我們的HTML文件中?我們可以通過幾種方式將CSS添加到我們的HTML文件中?Apr 28, 2025 pm 05:24 PM

文章討論了將CSS添加到HTML的三種方法:內聯,內部和外部。分析了每種方法對網站性能和適合初學者的適用性的影響。 (159個字符)

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脫衣器

Video Face Swap

Video Face Swap

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

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

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