国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 js教程 如何使用 HTMLlt;dialog> 元素

如何使用 HTMLlt;dialog> 元素

Dec 27, 2024 pm 07:03 PM

在前端開發(fā)中,建置或使用預(yù)先建置的 UI 元件是一項常見任務(wù)。然而,這些組件通常存在限制。它們通常依賴特定的框架,並且需要複雜的、非標(biāo)準(zhǔn)化的邏輯。長期以來,對話方塊視窗等基本 UI 元件依賴自訂實現(xiàn),或者在更簡單的情況下,依賴內(nèi)建 JavaScript 方法,例如alert()、prompt() 和confirm()。

好消息是,您現(xiàn)在可以使用本機

來實作此元件。 HTML 元素,它是 HTML5 標(biāo)準(zhǔn)的一部分,並受到所有現(xiàn)代瀏覽器的完全支援。

HTML 標(biāo)籤於 2013 年 5 月作為 W3C 工作草案的一部分引入,與

等交互元素一起推出。和解決常見的 UI 挑戰(zhàn)。 2014年發(fā)布的最初僅在 Google Chrome 和 Opera 中支援。完全支援 Firefox 和 Safari 直到 2022 年 3 月才出現(xiàn),推遲了其在生產(chǎn)項目中的採用。然而,隨著主要瀏覽器兩年多的支持, 已經(jīng)不再可用。元素現(xiàn)在足夠穩(wěn)定,可以替換自訂

讓我們來探索一下

的功能更詳細。

使用的核心方面

HTML 標(biāo)籤建立一個預(yù)設(shè)的隱藏對話框,可以用作彈出視窗模態(tài)視窗

彈出視窗經(jīng)常用於顯示簡單的通知,例如 Cookie 訊息、消失的 Toast 警報、工具提示或右鍵單擊上下文功能表元素。

模態(tài)視窗可幫助使用者專注於特定任務(wù),例如需要使用者確認的通知和警告、複雜的互動表單以及圖像或影片的燈箱。

彈出視窗不會阻止與頁面的交互,而模式視窗會覆蓋文件、使背景變暗並阻止其他操作。此行為無需額外的樣式或腳本即可實現(xiàn);唯一的區(qū)別是打開對話框的方法。

對話方塊視窗開啟方法

— 彈出視窗:

—模態(tài)視窗:

在這兩種情況下,開啟標(biāo)籤將其 open 屬性設(shè)為 true。直接設(shè)定它會將對話方塊作為彈出視窗而不是模式開啟。要渲染模態(tài)窗口,您必須使用適當(dāng)?shù)姆椒ā2恍枰?JavaScript 來建立最初開啟的彈出視窗。

試試看:

  • 使用 .show() 方法開啟彈出視窗:https://codepen.io/alexgriss/pen/zYeMKJE
  • 使用 .showModal() 方法開啟模態(tài)視窗:https://codepen.io/alexgriss/pen/jOdQMeq
  • 直接更改open屬性:https://codepen.io/alexgriss/pen/wvNQzRB

對話方塊視窗關(guān)閉方法

對話方塊視窗以相同的方式關(guān)閉,無論它們?nèi)绾伍_啟。以下是關(guān)閉彈出視窗或模式視窗的幾種方法:

——使用 .close() 方法:

——透過使用 method="dialog" 屬性觸發(fā)表單中的提交事件:

— 按 Esc 鍵:

使用 Esc 關(guān)閉僅適用於模式視窗。它首先觸發(fā)取消事件,然後關(guān)閉,從而可以輕鬆警告用戶表單中未儲存的變更。

試試看:

  • 使用 close 方法關(guān)閉對話框:https://codepen.io/alexgriss/pen/GRzwjaV
  • 透過提交表單關(guān)閉對話框:https://codepen.io/alexgriss/pen/jOdQVNV
  • 使用 Esc 鍵關(guān)閉模態(tài)視窗:https://codepen.io/alexgriss/pen/KKJrNKW
  • 防止模式視窗透過 Esc 關(guān)閉:https://codepen.io/alexgriss/pen/mdvQObN

關(guān)閉時回傳值

當(dāng)使用method="dialog"屬性關(guān)閉帶有表單的對話框時,您可以捕獲提交按鈕的值。如果您想根據(jù)單擊的按鈕觸發(fā)不同的操作,這非常有用。該值儲存在 returnValue 屬性中。

試試看:https://codepen.io/alexgriss/pen/ZEwmBKx

仔細看看它是如何運作的

讓我們更深入了解對話方塊視窗的機制及其瀏覽器實現(xiàn)的細節(jié)。

彈出視窗的機制

開啟一個作為帶有 .show() 的彈出視窗或 open 屬性會自動將其定位為 DOM 中的position:absolute?;?CSS 樣式(例如邊距和邊框)套用於元素,視窗內(nèi)的第一個可聚焦項目將透過 autofocus 屬性自動獲得焦點。頁面的其餘部分保持互動。

模態(tài)視窗的機制

模態(tài)視窗的設(shè)計和工作方式比彈出視窗更複雜。

文件疊加

使用 .showModal() 開啟模態(tài)視窗時,

元素在覆蓋頁面整個可見區(qū)域的特殊 HTML 層中呈現(xiàn)。此層稱為頂層,由瀏覽器控制。在某些瀏覽器(例如?? Google Chrome)中,每個模式都在該層內(nèi)的單獨 DOM 節(jié)點中呈現(xiàn),在元素檢查器中可見。

How to Use the HTMLlt;dialog> 元素

層的概念指的是堆疊上下文,它定義了元素如何沿著相對於使用者的Z軸定位。在 CSS 中設(shè)定 z-index 值會為元素建立一個堆疊上下文,其中子元素的位置是在該上下文中計算的。模態(tài)視窗始終位於該層次結(jié)構(gòu)的頂部,因此不需要 z-index。

在 MDN 上了解有關(guān) 堆疊上下文 的更多資訊。

要了解有關(guān)頂層中呈現(xiàn)的元素的更多信息,請訪問 MDN。

文件攔截

當(dāng)模態(tài)元素在頂層渲染時,會建立一個與可見文件區(qū)域大小相同的 ::backdrop 偽元素。即使設(shè)定了pointer-events: none CSS 規(guī)則,此背景也會阻止與頁面其餘部分的互動。

除了模態(tài)視窗之外的所有元素都會自動設(shè)定inert屬性,阻止使用者操作。它會停用點擊和焦點事件,並使螢?zāi)婚喿x器和其他輔助技術(shù)無法存取元素。

在 MDN 上了解有關(guān) inert 屬性的更多資訊。

專注行為

當(dāng)模式開啟時,其中的第一個可聚焦元素會自動獲得焦點。若要變更最初聚焦的元素,可以使用 autofocus 或 tabindex 屬性。無法為對話方塊元素本身設(shè)定 tabindex,因為它是頁面上唯一不套用惰性邏輯的元素。

對話方塊關(guān)閉後,焦點回到開啟它的元素。

解決模態(tài)視窗的使用者體驗問題

不幸的是,

的本機實作無法實現(xiàn)。 element 並沒有涵蓋與模式視窗互動的所有面向。接下來,我想回顧一下使用模態(tài)視窗時可能出現(xiàn)的主要使用者體驗問題以及如何解決它們。

滾動阻塞

儘管原生 HTML5 模式視窗創(chuàng)建了一個 ::backdrop 偽元素來阻止與其下方內(nèi)容的交互,但頁面滾動仍然處於活動狀態(tài)。這可能會分散使用者的注意力,因此建議在模式開啟時截斷正文的內(nèi)容:

每次開啟和關(guān)閉模態(tài)視窗時,都必須動態(tài)新增和刪除這樣的 CSS 規(guī)則。這可以透過操作包含以下 CSS 規(guī)則的類別來實現(xiàn):

如果 :has 選擇器的支援狀態(tài)滿足專案的要求,您也可以使用。

試試看:https://codepen.io/alexgriss/pen/XWOyVKj

透過點選視窗外部關(guān)閉對話框

這是模態(tài)視窗的標(biāo)準(zhǔn) UX 場景,可以透過多種方式實現(xiàn)。這裡有兩種方法可以解決這個問題:

基於 ::backdrop 偽元素行為的方法

點選 ::backdrop 偽元素被視為點選對話方塊元素本身。因此,如果將模式視窗的整個內(nèi)容包裝在附加的

中,然後覆蓋對話方塊元素本身,您可以確定單擊的方向 - 在背景上還是在模式視窗內(nèi)容上。

不要忘記重置瀏覽器的的預(yù)設(shè)填滿和邊框樣式。防止模態(tài)視窗因意外點擊而關(guān)閉的元素:

現(xiàn)在,我們將模態(tài)視窗邊框和邊距的常見樣式僅套用於內(nèi)部包裝器。

我們需要編寫一個函數(shù),僅在點擊背景而不是內(nèi)部包裝元素時關(guān)閉模態(tài)視窗:

試試看:https://codepen.io/alexgriss/pen/mdvQXpJ

一種基於確定對話方塊視窗大小的方法

此方法與第一個方法不同,第一個方法需要一個額外的包裝器來容納模態(tài)內(nèi)容。在這裡,您不需要任何額外的包裝。所需要做的只是檢查點擊時間標(biāo)的位置是否超出元素區(qū)域:

試試看:https://codepen.io/alexgriss/pen/NWoePVP

設(shè)定對話框視窗的樣式

element 在樣式方面比許多原生 HTML 元素更靈活。以下是一些對話方塊視窗樣式的範(fàn)例:

使用 ::backdrop 選擇器設(shè)定背景樣式:https://codepen.io/alexgriss/pen/ExrOQEO

動畫對話方塊視窗開啟與關(guān)閉:https://codepen.io/alexgriss/pen/QWYJQJO

作為側(cè)邊欄的模態(tài)視窗:https://codepen.io/alexgriss/pen/GRzwxgr

無障礙

很長一段時間,元素存在一些輔助功能問題,但現(xiàn)在它可以很好地與屏幕閱讀器等主要輔助技術(shù)配合使用(VoiceOverTalkBack、NVDA)。

當(dāng)出現(xiàn)時開啟後,螢?zāi)婚喿x器會將焦點移至對話方塊。對於模態(tài)視窗,焦點保留在對話框內(nèi),直到它關(guān)閉。

預(yù)設(shè)情況下,元素被輔助技術(shù)識別為具有 ARIA 屬性 role="dialog"。模態(tài)對話框?qū)⒈蛔R別為具有 ARIA 屬性 aria-modal="true"。

以下是一些提高

的可訪問性的方法。元素:

詠嘆調(diào)標(biāo)記者

始終在對話方塊視窗中包含標(biāo)題,並為

指定 aria-labelledby 屬性。元素,其值設(shè)定為標(biāo)題的 id。

如果您需要設(shè)定 ::backdrop 偽元素的樣式,請確保將這些樣式也套用到對應(yīng)的 .backdrop 元素,以確保與舊版瀏覽器的相容性:

建議透過動態(tài)匯入連接polyfill,並且僅適用於不支援

的瀏覽器。元素:

結(jié)論

原生 HTML5

element 是一個相對簡單但功能強大的工具,用於實作模式視窗和彈出視窗。它受到現(xiàn)代瀏覽器的良好支持,可以成功地用於基於 vanilla JS 和任何前端框架的專案。

在本文中,我們討論了以下主題:

  • 出現(xiàn)問題元素求解;
  • 與的互動元素的 API;
  • 對話方塊視窗如何在瀏覽器層級運作;
  • 模態(tài)框的常見問題及其解決方案;
  • 改進了的可訪問性螢?zāi)婚喿x器等輔助技術(shù)的元素;
  • 擴充瀏覽器對 的支援元素。

最後,我邀請您查看純 JS 中的模態(tài)視窗組件實現(xiàn),其中考慮了文章中討論的主要方面:https://codepen.io/alexgriss/pen/abXPOPP

這就是我想分享的關(guān)於使用

的全部內(nèi)容。 HTML 元素。我希望這篇文章能夠激勵您進行實驗!

以上是如何使用 HTMLlt;dialog> 元素的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語言,各自適用於不同的應(yīng)用場景。 Java用於大型企業(yè)和移動應(yīng)用開發(fā),而JavaScript主要用於網(wǎng)頁開發(fā)。

JavaScript評論:簡短說明 JavaScript評論:簡短說明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在JS中與日期和時間合作? 如何在JS中與日期和時間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時間處理需注意以下幾點:1.創(chuàng)建Date對像有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時間信息可用get和set方法,注意月份從0開始;3.手動格式化日期需拼接字符串,也可使用第三方庫;4.處理時區(qū)問題建議使用支持時區(qū)的庫,如Luxon。掌握這些要點能有效避免常見錯誤。

為什麼要將標(biāo)籤放在的底部? 為什麼要將標(biāo)籤放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

JavaScript:探索用於高效編碼的數(shù)據(jù)類型 JavaScript:探索用於高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

什麼是在DOM中冒泡和捕獲的事件? 什麼是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。 1.事件捕獲通過addEventListener的useCapture參數(shù)設(shè)為true實現(xiàn);2.事件冒泡是默認行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委託,提高動態(tài)內(nèi)容處理效率;5.捕獲可用於提前攔截事件,如日誌記錄或錯誤處理。了解這兩個階段有助於精確控制JavaScript響應(yīng)用戶操作的時機和方式。

Java和JavaScript有什麼區(qū)別? Java和JavaScript有什麼區(qū)別? Jun 17, 2025 am 09:17 AM

Java和JavaScript是不同的編程語言。 1.Java是靜態(tài)類型、編譯型語言,適用於企業(yè)應(yīng)用和大型系統(tǒng)。 2.JavaScript是動態(tài)類型、解釋型語言,主要用於網(wǎng)頁交互和前端開發(fā)。

See all articles