HTML5中dialog元素嘗鮮

對(duì)話框(別稱(chēng)模態(tài)框,浮層)是web項(xiàng)目中用于用戶交互的重要部分掰读,我們最常見(jiàn)的就是js中 alert(),confirm()叭莫,但是這個(gè)對(duì)話框的不美觀蹈集,也不能自定義樣式,所以在開(kāi)發(fā)的過(guò)程中雇初,一般根據(jù)自己自己的需求造輪子或者使用第三方的拢肆。

對(duì)話框的組成

常見(jiàn)的彈出框形式:

位置:屏幕的左上角,右上角靖诗,左下角郭怪,右下角,垂直居中等

大锌佟:定寬定高鄙才,定寬不定高,不定寬不定高等

開(kāi)發(fā)中的對(duì)話框形式就是位置和大小隨機(jī)組合的一種情況促绵。

但是有一種情況(不定寬高的垂直居中)不易實(shí)現(xiàn)(可以使用display:table或css3的translate或flex實(shí)現(xiàn))咒循,具體可參考水平垂直居中布局

上面的對(duì)話框包含內(nèi)容的容器,還有一個(gè)是對(duì)話框下面的遮罩層(mask)绞愚,遮罩層是用戶觸發(fā)彈出框后,形成的一個(gè)對(duì)話框與頁(yè)面主體的分割圖層颖医,它的存在可以給用戶一個(gè)更明顯的視覺(jué)差效果位衩,同時(shí)也起到避免用戶觸發(fā)對(duì)話框后的其他不必要的頁(yè)面主體操作,從而產(chǎn)生更有的用戶體驗(yàn)熔萧。

存在問(wèn)題

雖然糖驴,有很多對(duì)話框的輪子供我們選擇僚祷,但是我們面臨著各種各樣的問(wèn)題。

  • 到底選擇哪一種對(duì)話框(對(duì)于有選擇綜合癥的人來(lái)說(shuō)一個(gè)頭疼的問(wèn)題)
  • 可用性(api的簡(jiǎn)單與否贮缕,是否依賴(lài)了其他第三方的庫(kù))
  • 可擴(kuò)展性
  • 瀏覽器的兼容性支持

那么辙谜,有沒(méi)有一個(gè)簡(jiǎn)單的方法來(lái)做做一個(gè)對(duì)話框呢?當(dāng)然有感昼,我們可以使用HTML5的 dialog 元素装哆。

HTML5(dialog)

<dialog open>
    <h2> Hello world.</h2>
</dialog>

很簡(jiǎn)單,我們使用上面的代碼就可以做一個(gè)彈出內(nèi)容為‘Hello world.’ 的對(duì)話框定嗓。

控制對(duì)話框的顯示/隱藏也很容易蜕琴,添加 open 屬性表示顯示,去除為隱藏宵溅。當(dāng)然凌简,我們也可以通過(guò)DOM接口來(lái)控制 dialog 的顯隱(show(), close())

對(duì)話框下面的遮罩層,我們可以使用 ::backgrop 偽元素恃逻,而它的激活雏搂,我們需要使用 showModal() 這個(gè)DOM的API,::backgrop 的特性是它的位置在dialog之下寇损,在任何 z-index 之上凸郑。

使用 showModal() 不僅可以讓遮罩層顯示,dialog容器也顯示润绵,所以用到 ::backdrop 的時(shí)候线椰,可以用 showModal() 代替 show() 這個(gè)API;如果按鍵盤(pán) ESC 鍵將關(guān)閉彈出層尘盼,當(dāng)然你一可以使用 close() 這個(gè)DOM API憨愉。

我們可以設(shè)置 ::backdrop 這個(gè)圖層為半透明圖層,代碼如下:

dialog::backdrop {
  background-color: rgba(0, 0, 0, 0.75);
}

除了我們常見(jiàn)的提示信息的彈出層外卿捎,還有一類(lèi)比較使用的是帶表單的彈出層配紫。

帶表單的彈出層

我們可以使用HTML5的dialog元素結(jié)合form元素來(lái)做這些彈出層嗎?

答:可以

我們?cè)趺醋霾拍茏宖orm元素和dialog元素緊密的結(jié)合起來(lái)呢午阵?

答:我們只需要在dialog元素中添加 method="dialog" 這個(gè)屬性即可躺孝,這樣就可以將button元素的屬性 value 的值傳遞給dialog元素。

<dialog>
  <form method="dialog">
    <p>確定 or 取消</p>
    <button type="submit" value="yes">確定</button>
    <button type="submit" value="no">取消</button>
  </form>
</dialog>

<script>
    var dialog = document.querySelector('dialog')
    dialog.showModal()
    dialog.addEventListener('close', function(event) {
        console.log(dialog.returnValue)
    })
</script>

demo

瀏覽器兼容性

雖然底桂,這是一個(gè)比較好用的HTML5植袍,但是還存在兼容性問(wèn)題,chrome和opera支持的比較好籽懦,F(xiàn)irefox中是實(shí)驗(yàn)特性于个,但是IE,Edge, safari支持的不好暮顺,ios不支持厅篓,Android也支持的不夠好秀存,只有Android6以后支持。具體可參考caniuse

那么羽氮,能不能讓舊版本的瀏覽器支持HTML5的dialog呢或链?首先,我們想到的是有沒(méi)有一個(gè)支持dialog的polyfill档押,就像支持es6新特性的babel-polyfill一樣澳盐,確實(shí)有這樣一個(gè)開(kāi)源項(xiàng)目a11y-dialog,它分別提供了vue和react的不同版本汇荐。

更多系列文章請(qǐng)關(guān)注我的github

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末洞就,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掀淘,更是在濱河造成了極大的恐慌旬蟋,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件革娄,死亡現(xiàn)場(chǎng)離奇詭異倾贰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)拦惋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)匆浙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人厕妖,你說(shuō)我怎么就攤上這事首尼。” “怎么了言秸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵软能,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我举畸,道長(zhǎng)查排,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任抄沮,我火速辦了婚禮跋核,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叛买。我一直安慰自己砂代,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布率挣。 她就那樣靜靜地躺著泊藕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上娃圆,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音蛾茉,去河邊找鬼讼呢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谦炬,可吹牛的內(nèi)容都是我干的悦屏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼键思,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼础爬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起吼鳞,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤看蚜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后赔桌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體供炎,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年疾党,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了音诫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雪位,死狀恐怖竭钝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雹洗,我是刑警寧澤香罐,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站队伟,受9級(jí)特大地震影響穴吹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗜侮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一港令、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锈颗,春花似錦顷霹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至覆醇,卻和暖如春朵纷,著一層夾襖步出監(jiān)牢的瞬間炭臭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工袍辞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鞋仍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓搅吁,卻偏偏與公主長(zhǎng)得像威创,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谎懦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,262評(píng)論 25 707
  • 1肚豺、通過(guò)CocoaPods安裝項(xiàng)目名稱(chēng)項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,985評(píng)論 3 119
  • 摘要 不知從何時(shí)起,許多人已經(jīng)習(xí)慣了冷漠界拦,雖然我們每個(gè)人都渴望獲得別人的關(guān)心吸申、幫助,但是當(dāng)我們?cè)诿鎸?duì)他人遇見(jiàn)困難時(shí)...
    沫沫林子閱讀 5,235評(píng)論 0 1
  • A財(cái)富目標(biāo) 1,公司四個(gè)月以?xún)?nèi)收入50萬(wàn) 2,自己可以獨(dú)立承擔(dān)自己的責(zé)任寞奸。 B,伴侶的目標(biāo) 身高一米六到一米七呛谜,長(zhǎng)...
    雪痕情閱讀 221評(píng)論 0 0
  • 自高中時(shí)期,便養(yǎng)成每天跑步鍛煉的習(xí)慣枪萄,一開(kāi)始的那段時(shí)間只是為了有足夠多的精力保持不斷的學(xué)習(xí)隐岛,大學(xué)開(kāi)始的堅(jiān)持,保持...
    Cherryzhi閱讀 388評(píng)論 0 3