浅谈HTML5中dialog元素尝鲜


Posted in HTML / CSS onOctober 15, 2018

对话框(别称模态框,浮层)是web项目中用于用户交互的重要部分,我们最常见的就是js中 alert(),confirm(),但是这个对话框的不美观,也不能自定义样式,所以在开发的过程中,一般根据自己自己的需求造轮子或者使用第三方的。

对话框的组成

常见的弹出框形式:

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

大小:定宽定高,定宽不定高,不定宽不定高等

开发中的对话框形式就是位置和大小随机组合的一种情况。

但是有一种情况(不定宽高的垂直居中)不易实现(可以使用display:table或css3的translate或flex实现),具体可参考水平垂直居中布局

上面的对话框包含内容的容器,还有一个是对话框下面的遮罩层(mask),遮罩层是用户触发弹出框后,形成的一个对话框与页面主体的分割图层,它的存在可以给用户一个更明显的视觉差效果,同时也起到避免用户触发对话框后的其他不必要的页面主体操作,从而产生更有的用户体验。

存在问题

虽然,有很多对话框的轮子供我们选择,但是我们面临着各种各样的问题。

  • 到底选择哪一种对话框(对于有选择综合症的人来说一个头疼的问题)
  • 可用性(api的简单与否,是否依赖了其他第三方的库)
  • 可扩展性
  • 浏览器的兼容性支持

那么,有没有一个简单的方法来做做一个对话框呢?当然有,我们可以使用HTML5的 dialog 元素。

HTML5(dialog)

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

很简单,我们使用上面的代码就可以做一个弹出内容为‘Hello world.’ 的对话框。

控制对话框的显示/隐藏也很容易,添加 open 属性表示显示,去除为隐藏。当然,我们也可以通过DOM接口来控制 dialog 的显隐(show(), close())

对话框下面的遮罩层,我们可以使用 ::backgrop 伪元素,而它的激活,我们需要使用 showModal() 这个DOM的API,::backgrop 的特性是它的位置在dialog之下,在任何 z-index 之上。

使用 showModal() 不仅可以让遮罩层显示,dialog容器也显示,所以用到 ::backdrop 的时候,可以用 showModal() 代替 show() 这个API;如果按键盘 ESC 键将关闭弹出层,当然你一可以使用 close() 这个DOM API。

我们可以设置 ::backdrop 这个图层为半透明图层,代码如下:

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

除了我们常见的提示信息的弹出层外,还有一类比较使用的是带表单的弹出层。

带表单的弹出层

我们可以使用HTML5的dialog元素结合form元素来做这些弹出层吗?

答:可以

我们怎么做才能让form元素和dialog元素紧密的结合起来呢?

答:我们只需要在dialog元素中添加 method="dialog" 这个属性即可,这样就可以将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

浏览器兼容性

虽然,这是一个比较好用的HTML5,但是还存在兼容性问题,chrome和opera支持的比较好,Firefox中是实验特性,但是IE,Edge, safari支持的不好,ios不支持,Android也支持的不够好,只有Android6以后支持。具体可参考caniuse

那么,能不能让旧版本的浏览器支持HTML5的dialog呢?首先,我们想到的是有没有一个支持dialog的polyfill,就像支持es6新特性的babel-polyfill一样,确实有这样一个开源项目a11y-dialog,它分别提供了vue和react的不同版本。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
详解纯CSS3制作的20种loading动效
Jul 05 HTML / CSS
CSS3实现可翻转的hover效果
May 23 HTML / CSS
HTML5 canvas基本绘图之绘制线段
Jun 27 HTML / CSS
详解使用HTML5的classList属性操作CSS类
Oct 13 HTML / CSS
html5使用canvas画空心圆与实心圆
Dec 15 HTML / CSS
使用HTML5的表单验证的简单示例
Sep 09 HTML / CSS
整理HTML5中表单的常用属性及新属性
Feb 19 HTML / CSS
HTML5中判断横屏竖屏的方法(移动端)
Aug 04 HTML / CSS
关于h5中的fetch方法解读(小结)
Nov 15 HTML / CSS
详解h5页面在不同ios设备上的问题总结
Mar 01 HTML / CSS
H5页面适配iPhoneX(就是那么简单)
Dec 02 HTML / CSS
HTML5中在title标题标签里设置小图标的方法
Jun 23 HTML / CSS
canvas进阶之如何画出平滑的曲线
Oct 15 #HTML / CSS
iframe在移动端的缩放的示例代码
Oct 12 #HTML / CSS
详解HTML5将footer置于页面最底部的方法(CSS+JS)
Oct 11 #HTML / CSS
HTML5实现签到 功能
Oct 09 #HTML / CSS
HTML5 视频播放(video),JavaScript控制视频的实例代码
Oct 08 #HTML / CSS
移动端html5模拟长按事件的实现方法
Sep 30 #HTML / CSS
HTML5视频播放插件 video.js介绍
Sep 29 #HTML / CSS
You might like
奇怪的PHP引用效率问题分析
2012/03/23 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
php格式输出文件var_export函数实例
2014/11/15 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
2015/09/29 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
jquery遍历checkbox介绍
2014/02/21 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
AngularJS中的模块详解
2015/01/29 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
2016/04/05 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
Vue实战教程之仿肯德基宅急送App
2019/07/19 Javascript
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
详解Python with/as使用说明
2018/12/13 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
详解python深浅拷贝区别
2019/06/24 Python
python 实现按对象传值
2019/12/26 Python
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
中学生团员自我评价分享
2013/12/07 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
财务总监岗位职责
2015/02/03 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
关于车尾的标语大全
2015/08/11 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书