>  기사  >  웹 프론트엔드  >  HTML5의 대화 상자 요소에 대한 자세한 설명(코드 예)

HTML5의 대화 상자 요소에 대한 자세한 설명(코드 예)

不言
不言앞으로
2018-10-13 14:51:083538검색

이 문서는 HTML5의 대화 상자 요소에 대한 자세한 설명(코드 예제)을 제공합니다. 이는 특정 참조 값을 가지고 있으므로 도움이 될 수 있습니다.

대화 상자(모달 상자, 플로팅 레이어라고도 함)는 웹 프로젝트에서 사용자 상호 작용의 중요한 부분입니다. 가장 일반적인 상자는 js의 alert(), verify()이지만 이 대화 상자는 프레임이 아름답지 않고 스타일을 맞춤화할 수 없기 때문에 개발 과정에서 일반적으로 자신의 필요에 따라 휠을 제작하거나 타사를 사용합니다. alert(),confirm(),但是这个对话框的不美观,也不能自定义样式,所以在开发的过程中,一般根据自己自己的需求造轮子或者使用第三方的。

对话框的组成

常见的弹出框形式:

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

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

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

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

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

存在问题

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

  • 到底选择哪一种对话框(对于有选择综合症的人来说一个头疼的问题)

  • 可用性(api的简单与否,是否依赖了其他第三方的库)

  • 可扩展性

  • 浏览器的兼容性支持

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

HTML5(dialog)

a144f22e2a850e633abba38330027819
    c1a436a314ed609750bd7c7d319db4da Hello world.2e9b454fa8428549ca2e64dfac4625cd
e949bf554aab987df819ed6441bc3609

很简单,我们使用上面的代码就可以做一个弹出内容为‘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

대화상자 구성

일반적인 팝업 상자 형태:

위치: 왼쪽 위 모서리, 오른쪽 위 모서리, 왼쪽 아래 모서리, 화면 오른쪽 아래 모서리, 세로 중앙 등

크기: 고정 너비 및 고정 높이, 고정 너비 및 고정 높이, 가변 너비와 높이가 가변적입니다. 개발 중인 대화 상자 양식은 위치와 크기의 임의 조합입니다.

하지만 구현하기 쉽지 않은 상황(가변 너비와 높이의 수직 센터링)이 있습니다(display:table 또는 CSS3의 번역 또는 flex를 사용할 수 있음). 자세한 내용은 수평 및 수직 센터링 레이아웃을 참조하세요

위의 대화 상자에는 콘텐츠에 대한 컨테이너가 포함되어 있으며 대화 상자 아래에 마스크 레이어가 있습니다. 마스크 레이어는 사용자가 팝업 상자를 트리거한 후 대화 상자와 메인 페이지를 구분하는 레이어입니다. 사용자에게 더욱 확실한 시각적 차이 효과를 제공하고 사용자가 대화 상자를 트리거한 후 다른 불필요한 페이지 기본 작업을 방지하여 더 나은 사용자 경험을 제공합니다. 🎜🎜문제가 있습니다🎜🎜선택할 수 있는 대화 바퀴가 많지만, 우리는 다양한 문제에 직면합니다. 🎜
  • 🎜어떤 대화 상자를 선택할지(선택 증후군이 있는 사람에게는 골치 아픈 문제)🎜
  • 🎜사용성(API가 간단한지 여부, 다른 타사 라이브러리에 의존하는지 여부)🎜
  • 🎜Extensibility🎜
  • 🎜브라우저 호환성 지원🎜
🎜그러면 간단한 방법이 있습니까? 대화 상자를 만들까? 물론 HTML5의 dialog 요소를 사용할 수 있습니다. 🎜🎜HTML5(dialog)🎜
a38fd2622755924ad24c0fc5f0b4d412
  9a80b60279a1fc3cc29b87aae5a888b1
    e388a4556c0f65e1904146cc1a846bee确定 or 取消94b3e26ee717c64999d7867364b1b4a3
    1d15c23a371098d0a91cc26c5f5df8f6确定65281c5ac262bf6d81768915a4a77ac0
    73f05620b8d0f192df010cbb16b76d67取消65281c5ac262bf6d81768915a4a77ac0
  f5a47148e367a6035fd7a2faa965022e
e949bf554aab987df819ed6441bc3609

3f1c4e4b6b16bbbd69b2ee476dc4f83a
    var dialog = document.querySelector('dialog')
    dialog.showModal()
    dialog.addEventListener('close', function(event) {
        console.log(dialog.returnValue)
    })
2cacc6d41bbb37262a98f745aa00fbf0
🎜위 코드를 사용하면 'Hello world.'라는 내용의 팝업 대화 상자를 만들 수 있습니다. 🎜🎜대화 상자의 표시/숨기기를 제어하는 ​​것도 쉽습니다. open 속성을 ​​추가하면 표시되고, 제거하면 숨겨집니다. 물론 DOM 인터페이스를 통해 dialog의 가시성(show(), close())을 제어할 수도 있습니다. 대화 상자 아래 마스크 레이어의 경우 ::backgrop을 사용할 수 있습니다. 의사 요소를 활성화하려면 showModal()의 DOM API를 사용해야 합니다. ::backgrop의 특징은 위치가 다음과 같다는 것입니다. 대화상자 아래의 z-index 위에 있습니다. 🎜🎜showModal()을 사용하면 마스크 레이어뿐만 아니라 대화 상자 컨테이너도 표시할 수 있으므로 ::backdrop을 사용할 때 showModal()을 사용할 수 있습니다. show() API를 대체합니다. 키보드의 ESC 키를 누르면 팝업 레이어가 닫힙니다. 물론 를 사용할 수 있습니다. >close() 이 DOM API입니다. 🎜🎜::backdrop을 반투명 레이어로 설정할 수 있습니다. 코드는 다음과 같습니다. 🎜
var dialog = document.querySelector('dialog')
dialog.showModal()
dialog.addEventListener('close', function(event) {
  alert(dialog.returnValue)
})
🎜 프롬프트 정보가 포함된 일반적인 팝업 레이어 외에도 유형이 있습니다. 양식으로. 🎜🎜양식이 포함된 팝업 레이어🎜🎜양식 요소와 결합된 HTML5 대화 상자 요소를 사용하여 이러한 팝업 레이어를 만들 수 있나요? 🎜🎜답변: 예🎜🎜양식 요소와 대화 상자 요소를 어떻게 밀접하게 결합할 수 있나요? 🎜🎜답변: method="dialog" 속성을 ​​대화 상자 요소에 추가하기만 하면 버튼 요소의 value 속성 값이 전달될 수 있습니다. 대화 상자 요소에. 🎜
<dialog>
  <form method="dialog">
    <p>确定 or 取消</p>
    <button type="submit" value="yes">确定</button>
    <button type="submit" value="no">取消</button>
  </form></dialog>
🎜demo🎜
dialog::backdrop {  background: rgba(0, 0, 0, 0.6)
}
rrreeerrreee🎜브라우저 호환성🎜🎜비교적으로 사용하기 쉬운 HTML5이지만 아직 호환성 문제가 남아 있습니다. Firefox에서는 실험적인 기능이지만 IE, Edge, Safari에서는 더 잘 지원됩니다. 잘 지원하지 않고, iOS도 지원하지 않고, 안드로이드도 잘 지원하지 않습니다. 안드로이드 6 이상에서만 지원됩니다. 자세한 내용은 caniuse🎜🎜를 참조하세요. 그러면 이전 버전의 브라우저도 HTML5 대화 상자를 지원할 수 있나요? 우선 우리가 생각하는 것은 es6의 새로운 기능을 지원하는 babel-polyfill처럼 대화 상자를 지원하는 폴리필이 있는지 여부입니다. 실제로 다양한 버전의 vue와 a11y-dialog를 제공하는 오픈 소스 프로젝트가 있습니다. 각각 반응한다. 🎜🎜🎜

위 내용은 HTML5의 대화 상자 요소에 대한 자세한 설명(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제