Baseline Widely available *
<dialog>
㯠HTML ã®è¦ç´ ã§ãã¢ã¼ãã«ã¾ãã¯éã¢ã¼ãã«ãã¤ã¢ãã°ããã¯ã¹ãããã以å¤ã®æ¶ããã¨ãã§ããã¢ã©ã¼ããã¤ã³ã¹ãã¯ã¿ã¼ããµãã¦ã£ã³ãã¦ãªã©ã®ãããªå¯¾è©±çã³ã³ãã¼ãã³ãã表ãã¾ãã
HTML ã® <dialog>
è¦ç´ ã¯ãã¢ã¼ãã«ãã¤ã¢ãã°ããã¯ã¹ã¨éã¢ã¼ãã«ãã¤ã¢ãã°ããã¯ã¹ã®ã©ã¡ãã使ããæã«ã使ç¨ãã¾ãã ã¢ã¼ãã«ãã¤ã¢ãã°ããã¯ã¹ã¯ããã¼ã¸ã®ä»ã®é¨åã¨ã®æä½ã䏿ããéã¢ã¼ãã«ãã¤ã¢ãã°ããã¯ã¹ã¯ããã¼ã¸ã®ä»ã®é¨åã¨ã®æä½ã許å¯ãã¾ãã
<dialog>
è¦ç´ ã表示ããã«ã¯ãJavaScript ã使ç¨ãã¦ä¸ãããã¢ã¼ãã«ãã¤ã¢ãã°ã表示ããã«ã¯ .showModal()
ã¡ã½ããããéã¢ã¼ãã«ãã¤ã¢ãã°ã表示ããã«ã¯ .show()
ã¡ã½ããã使ç¨ãã¦ä¸ããããã¤ã¢ãã°ããã¯ã¹ã¯ .close()
ã¡ã½ããã使ç¨ããããã¾ã㯠<dialog>
è¦ç´ å
ã«å«ã¾ãã <form>
ãã©ã¼ã ãéä¿¡ããéã« dialog
ã¡ã½ããã使ç¨ãã¦éãããã¨ãã§ãã¾ããã¢ã¼ãã«ãã¤ã¢ãã°ã¯ãEsc ãã¼ãæ¼ããã¨ã§ãéãããã¨ãã§ãã¾ãã
ãã®è¦ç´ ã«ã¯ã°ãã¼ãã«å±æ§ãããã¾ãã
è¦å: tabindex
屿§ã <dialog>
è¦ç´ ã§ä½¿ç¨ãã¦ã¯ããã¾ããã詳ãã使ç¨ä¸ã®æ³¨æãåç
§ãã¦ãã ããã
open
ãã¤ã¢ãã°ããã¯ã¹ãã¢ã¯ãã£ãã§ãããæä½ã§ããç¶æ
ã§ãããã¨ã示ãã¾ãã open
ãè¨å®ããã¦ããªãå ´åããã¤ã¢ãã°ããã¯ã¹ã¯ã¦ã¼ã¶ã¼ã«è¡¨ç¤ºããã¾ããã ãã¤ã¢ãã°ã表示ããã«ã¯ãopen
屿§ã§ã¯ãªã .show()
ã¾ã㯠.showModal()
ã¡ã½ããã使ç¨ãããã¨ãæ¨å¥¨ããã¾ãããã <dialog>
ã open
屿§ã使ç¨ãã¦éãããå ´åããã®ãã¤ã¢ãã°ã¯éã¢ã¼ãã«ã«ãªãã¾ãã
ã¡ã¢: ã¢ã¼ãã«ã§ã¯ãªããã¤ã¢ãã°ããã¯ã¹ã®éããç¶æ
ã¨éããç¶æ
ãåãæ¿ããã«ã¯ãopen
屿§ã®æç¡ãåãæ¿ãããã¨ãã§ãã¾ããããã®ææ³ã¯æ¨å¥¨ããã¾ããã
<form>
è¦ç´ ã¯ã屿§ method=ãdialogã ãä¿æãã¦ããå ´åãã¾ãã¯ãã©ã¼ã ãéä¿¡ãããã¿ã³ã« formmethod="dialog"
ãè¨å®ããã¦ããå ´åã«ããã¤ã¢ãã°ããã¯ã¹ãéãããã¨ãã§ãã¾ãã <dialog>
å
ã® <form>
ã dialog
ã¡ã½ããã§ç¢ºå®ãããã¨ããã¤ã¢ãã°ããã¯ã¹ãéãããããã®ãã©ã¼ã ã³ã³ããã¼ã«ã®ç¶æ
ãä¿åããã¾ãããéä¿¡ã¯ããã¾ãããã¾ãã returnValue
ããããã£ã¯ãæ¼ããããã¿ã³ã®å¤ã«è¨å®ããã¾ãã::backdrop
æ¬ä¼¼è¦ç´ ã¯ãã¢ã¼ãã«ãã¤ã¢ãã°ã®èæ¯ãã¹ã¿ã¤ã«è¨å®ããããã«ä½¿ç¨ãããã¨ãã§ãã¾ããããã¯ãHTMLDialogElement.showModal()
ã¡ã½ããã使ç¨ãã¦ãã¤ã¢ãã°ã表示ããéã«ã<dialog>
è¦ç´ ã®èå¾ã«è¡¨ç¤ºããã¾ããä¾ãã°ããã®æ¬ä¼¼è¦ç´ ã使ç¨ãã¦ãã¢ã¼ãã«ãã¤ã¢ãã°ã®èå¾ã®ç¡å¹ãªã³ã³ãã³ããã¼ãããããæãããããã¨ãã£ãæ¹æ³ã§åããã«ãããããã¨ãã§ãã¾ããautofocus
屿§ããã¢ã¼ãã«ãã¤ã¢ãã°ãéããç´å¾ã«ã¦ã¼ã¶ã¼ãæä½ãããã¨ãæ³å®ãããè¦ç´ ã«è¿½å ãã¹ãã§ããä»ã«å³åº§ã®æä½ãæ³å®ãããè¦ç´ ããªãå ´åã¯ãautofocus
ããã¤ã¢ãã°å
ã®ï¼»éããï¼½ãã¿ã³ã«è¿½å ããããã¦ã¼ã¶ã¼ãã¯ãªãã¯/ã¢ã¯ãã£ãã«ãã¦éãããã¨ãæ³å®ãããå ´åã¯ãã¤ã¢ãã°èªä½ã«è¿½å ãããã¨ããå§ããã¾ãã<dialog>
è¦ç´ ã« tabindex
ããããã£ã追å ããªãã§ãã ããããã®è¦ç´ ã¯æä½å¯¾è±¡ã§ã¯ãªãããã©ã¼ã«ã¹ãåãåããªãããã§ãããã¤ã¢ãã°ã®å
容ã¯ï¼ãã¤ã¢ãã°ã«å«ã¾ããªãéãããã¿ã³ãå«ãï¼ããã©ã¼ã«ã¹ãåãåããã¨ãã§ããæä½å¯¾è±¡ã¨ãªãã¾ãããã¤ã¢ãã°ãå®è£
ããéã«ã¯ãã¦ã¼ã¶ã¼ã®ãã©ã¼ã«ã¹ãè¨å®ããå ´æã¨ãã¦æãé©åãªå ´æãæ¤è¨ãããã¨ãéè¦ã§ããHTMLDialogElement.showModal()
ãç¨ã㦠<dialog>
ãéããã¨ãããã©ã¼ã«ã¹ã¯å
é¨ã§æåã®ãã©ã¼ã«ã¹å¯è½ãªè¦ç´ ã«è¨å®ããã¾ããautofocus
屿§ã使ç¨ãã¦åæãã©ã¼ã«ã¹ã®é
ç½®ãæç¢ºã«ç¤ºãã¨ãç¹å®ã®ãã¤ã¢ãã°ã«å¯¾ãã¦æé©ãªåæãã©ã¼ã«ã¹ã®é
ç½®ã¨ã¿ãªãããè¦ç´ ã«åæãã©ã¼ã«ã¹ãè¨å®ããã®ã«å½¹ç«ã¡ã¾ãããã¤ã¢ãã°ã®åæãã©ã¼ã«ã¹ãã©ãã«è¨å®ãããã常ã«ããããªãå ´åãç¹ã«ãã¤ã¢ãã°ã®ã³ã³ãã³ããå¼ã³åºãããã¨ãã«åçã«æç»ãããå ´åãå¿
è¦ã§ããã° <dialog>
è¦ç´ ãã®ãã®ã«ãã©ã¼ã«ã¹ãå½ã¦ããã¨ããåæãã©ã¼ã«ã¹ã®é
ç½®ã¨ãã¦æé©ã¨å¤æãããããããã¾ããã
ã¦ã¼ã¶ã¼ããã¤ã¢ãã°ãéãããã¨ãã§ããæ©æ§ã確å®ã«ç¨æãã¦ãã ããããã¹ã¦ã®ã¦ã¼ã¶ã¼ã確å®ã«ãã¤ã¢ãã°ãéãããã¨ãã§ããããã«ããæã確å®ãªæ¹æ³ã¯ãéããããã®æç¢ºãªãã¿ã³ãè¨è¼ãããã¨ã§ããä¾ãã°ã確èªããã£ã³ã»ã«ãéãããªã©ã®ãã¿ã³ãé©åã§ãã
æ¢å®ã§ã¯ãshowModal()
ã¡ã½ããã«ãã£ã¦å¼ã³åºããããã¤ã¢ãã°ã¯ãEsc ã«ãã£ã¦éãããã¨ãã§ãã¾ããéã¢ã¼ãã«ãã¤ã¢ãã°ã§ã¯ãæ¢å®ã§ã¯ Esc ãã¼ã§éãã¾ããããéã¢ã¼ãã«ãã¤ã¢ãã°ã表ããã®ã«ãã£ã¦ã¯ããã®åä½ãæã¾ãããªãå ´åãããã¾ãããã¼ãã¼ãã®å©ç¨è
ã¯ãEsc ãã¼ã§ã¢ã¼ãã«ãã¤ã¢ãã°ãéãããã¨ãæå¾
ãã¾ãããã®åä½ãå®è£
ãããç¶æããã¦ãããã¨ã確èªãã¦ãã ãããè¤æ°ã®ã¢ã¼ãã«ãã¤ã¢ãã°ãéãã¦ããå ´åãEsc ã¯æå¾ã«ç¤ºããããã¤ã¢ãã°ã®ã¿ãéããããã«ãã¾ãã<dialog>
ã使ç¨ããå ´åããã®åä½ã¯ãã©ã¦ã¶ã¼ã«ãã£ã¦æä¾ããã¾ãã
ãã¤ã¢ãã°ã¯ä»ã®è¦ç´ ã使ç¨ãã¦ä½æãããã¨ãã§ãã¾ããããã¤ãã£ãã® <dialog>
è¦ç´ ã¯ãåæ§ã®ç®çã§ä»ã®è¦ç´ ã使ç¨ããå ´åã¯åç¾ããªããã°ãªããªãã¦ã¼ã¶ããªãã£ã¨ã¢ã¯ã»ã·ããªãã£æ©è½ãæä¾ãã¾ããç¬èªã®ãã¤ã¢ãã°å®è£
ã使ããå ´åã¯ããã¹ã¦ã®æå¾
ãããæ¢å®ã®åä½ã«å¯¾å¿ãã¦ãããé©åãªã©ãã«ä»ãã®æ¨å¥¨äºé
ã«å¾ããã¨ãä¿è¨¼ãã¦ãã ããã
<dialog>
è¦ç´ ã¯ãARIA ã® role="dialog" 屿§ã使ç¨ããç¬èªãã¤ã¢ãã°ã¨åããããªå½¢ã§ããã©ã¦ã¶ã¼ãæä¾ãã¾ãã<dialog>
è¦ç´ ã showModal()
ã¡ã½ããã§å¼ã³åºãããå ´åãæé»ã®ãã¡ã« aria-modal="true" ã¨ãªãã䏿¹ <dialog>
ã show()
ã¡ã½ãããã¾ã㯠open
屿§ã使ç¨ãã¦è¡¨ç¤ºãããã <dialog>
ã®æ¢å®ã® display
ã夿´ããå ´å㯠[aria-modal="false"]
ã¨ãã¦è¡¨ç¤ºããã¾ããã¢ã¼ãã«ãã¤ã¢ãã°ãå®è£
ããéã«ã¯ã<dialog>
ã¨ãã®ã³ã³ãã³ã以å¤ã¯ inert
屿§ã使ã£ã¦ä¸æ´»æ§åããå¿
è¦ãããã¾ãã<dialog>
ã HTMLDialogElement.showModal()
ã¡ã½ããã§ä½¿ç¨ããå ´åããã®åä½ã¯ãã©ã¦ã¶ã¼ãæä¾ãã¾ãã
ãã®ä¾ã¯ãHTML ã®ã¿ã使ç¨ãã¦ãã¢ã¼ãã«ã§ã¯ãªããã¤ã¢ãã°ã®ä½ææ¹æ³ã示ãã¦ãã¾ããè«ç屿§ open
ã <dialog>
è¦ç´ ã«ããããããã¼ã¸ãèªã¿è¾¼ã¾ããã¨ãã¤ã¢ãã°ãéããç¶æ
ã§è¡¨ç¤ºããã¾ãã <form>
è¦ç´ ã® method
屿§ã "dialog"
ã«è¨å®ããã¦ããããããã¤ã¢ãã°ã¯ï¼»OKï¼½ãã¿ã³ãã¯ãªãã¯ãããã¨ã§éãããã¨ãã§ãã¾ãã ãã®å ´åããã©ã¼ã ãéããããã« JavaScript ã¯å¿
è¦ããã¾ããã
<dialog open>
<p>Greetings, one and all!</p>
<form method="dialog">
<button>OK</button>
</form>
</dialog>
çµæ
ã¡ã¢: åºåçµæããªã»ããããã«ã¯ããã®ãã¼ã¸ãåèªã¿è¾¼ã¿ãã¦ãã ããã
ãã®ãã¤ã¢ãã°ã¯ãopen
屿§ãåå¨ããããã«æåã«éããã¾ããopen
屿§ã使ç¨ãã¦è¡¨ç¤ºããããã¤ã¢ãã°ã¯ãã¢ã¼ãã«ã§ã¯ããã¾ãããï¼»OKï¼½ãã¯ãªãã¯ããã¨ããã¤ã¢ãã°ã¯éããããçµæãã¬ã¼ã ã¯ç©ºã«ãªãã¾ãããã¤ã¢ãã°ãéããããå¾ããããå度éãããã®æ¹æ³ã¯æä¾ããã¦ãã¾ããããã®ãããã¢ã¼ãã«ã§ã¯ãªããã¤ã¢ãã°ã表示ããã«ã¯ã HTMLDialogElement.show()
ã¡ã½ããã使ç¨ããã®ãæ¨å¥¨ããã¾ããè«ç屿§ã§ãã open
ã追å ã¾ãã¯åé¤ãããã¨ã§ããã¤ã¢ãã°ã®è¡¨ç¤ºãåãæ¿ãããã¨ãå¯è½ã§ãããæ¨å¥¨ãããæ¹æ³ã§ã¯ããã¾ããã
ãã®ä¾ã§ã¯ãã°ã©ãã¼ã·ã§ã³ã®èæ¯ãæã¤ã¢ã¼ãã«ãã¤ã¢ãã°ã示ãã¦ãã¾ãã.showModal()
ã¡ã½ããã¯ãï¼»ãã¤ã¢ãã°ã表示]ãã¿ã³ãæ¼ãããéã«ãã¢ã¼ãã«ãã¤ã¢ãã°ãéãããã®ãã®ã§ãããã¤ã¢ãã°ã¯ãEsc ãã¼ãæ¼ããããã¤ã¢ãã°å
ã®ï¼»éããï¼½ãã¿ã³ãæ¼ãããéã« close()
ã¡ã½ããã使ç¨ãããã¨ã§éãããã¨ãã§ãã¾ãã
ãã¤ã¢ãã°ãéãã¨ãæ¢å®ã§ã¯ããã©ã¦ã¶ã¼ã¯ãã¤ã¢ãã°å
ã§ãã©ã¼ã«ã¹å¯è½ãªæåã®è¦ç´ ã«ãã©ã¼ã«ã¹ãå½ã¦ã¾ãããã®ä¾ã§ã¯ã autofocus
屿§ãï¼»éããï¼½ãã¿ã³ã«é©ç¨ããã¦ããããã®ãã¿ã³ã«ãã¤ã¢ãã°ãéããã¨ãã«ãã©ã¼ã«ã¹ãå½ããã¾ããããã¯ããã¤ã¢ãã°ãéããç´å¾ã«ã¦ã¼ã¶ã¼ã対話ããã¨æ³å®ãããè¦ç´ ã ããã§ãã
<dialog>
<button autofocus>éãã</button>
<p>ãã®ã¢ã¼ãã«ãã¤ã¢ãã°ã®èæ¯ã¯ã¯ã¼ã«ã§ãï¼</p>
</dialog>
<button>ãã¤ã¢ãã°ã表示</button>
CSS
ãã¤ã¢ãã°ã®èæ¯ã¯ã::backdrop
æ¬ä¼¼è¦ç´ ã使ç¨ãã¦ã¹ã¿ã¤ã«è¨å®ãããã¨ãã§ãã¾ãã
::backdrop {
background-image: linear-gradient(
45deg,
magenta,
rebeccapurple,
dodgerblue,
green
);
opacity: 0.75;
}
JavaScript
ãã¤ã¢ãã°ã¯ã.showModal()
ã¡ã½ããã使ç¨ãã¦ã¢ã¼ãã«ã«éããã.close()
ã¡ã½ããã使ç¨ãã¦éãããã¾ãã
const dialog = document.querySelector("dialog");
const showButton = document.querySelector("dialog + button");
const closeButton = document.querySelector("dialog button");
// ï¼»ãã¤ã¢ãã°ã表示]ãã¿ã³ã§ãã¤ã¢ãã°ãã¢ã¼ãã«ã«éã
showButton.addEventListener("click", () => {
dialog.showModal();
});
// ï¼»éããï¼½ãã¿ã³ã§ãã¤ã¢ãã°ãéãã
closeButton.addEventListener("click", () => {
dialog.close();
});
çµæ
ã¢ã¼ãã«ãã¤ã¢ãã°ã表示ãããã¨ãåå¨ããä»ã®ãã¤ã¢ãã°ã®ä¸ã«è¡¨ç¤ºããã¾ããã¢ã¼ãã«ãã¤ã¢ãã°ã®å¤å´ã«ãããã®ã¯ãã¹ã¦ç¡å¹ã¨ãªãããã¤ã¢ãã°å¤ã§ã®æä½ã¯ãããã¯ããã¾ãããã¤ã¢ãã°ãéãã¦ããéã¯ããã¤ã¢ãã°èªä½ãé¤ãã¦ãææ¸å ã®æä½ã¯ä¸å¯è½ã§ãããã¨ã«æ³¨æãã¦ãã ãããï¼»ãã¤ã¢ãã°ã表示]ãã¿ã³ã¯ãã»ã¨ãã©ä¸éæãªãã¤ã¢ãã°ã®èæ¯ã«ãã£ã¦ã»ã¨ãã©é ããã¦ãã¾ããç¡å¹ã¨ãªãã¾ãã
ãã¤ã¢ãã°ããã®è¿å¤ãæ±ããã®ä¾ã§ã¯ã<dialog>
è¦ç´ ã® returnValue
ã¨ããã©ã¼ã ã使ç¨ãã¦ã¢ã¼ãã«ãã¤ã¢ãã°ãéããæ¹æ³ã示ãã¦ãã¾ãã æ¢å®ã§ã¯ãreturnValue
ã¯ç©ºæååãã¾ã㯠<dialog>
è¦ç´ å
ã«ãã©ã¼ã ãéä¿¡ãããã¿ã³ãããå ´åã¯ãã®å¤ã¨ãªãã¾ãã
ãã®ä¾ã§ã¯ãï¼»ãã¤ã¢ãã°ã表示]ãã¿ã³ãæ¼ãããã¨ã¢ã¼ãã«ãã¤ã¢ãã°ãéãã¾ãããã¤ã¢ãã°ã«ã¯ã<select>
㨠2 ã¤ã® <button>
è¦ç´ ã¨ããå½¢ã§ãã©ã¼ã ãå«ã¾ãã¦ãããæ¢å®ã§ã¯ type="submit"
ã¨ãªã£ã¦ãã¾ããã¤ãã³ããªã¹ãã¼ã¯ã鏿ãªãã·ã§ã³ã夿´ãããéã«ï¼»ç¢ºèªï¼½ãã¿ã³ã®å¤ãæ´æ°ãã¾ãã[確èªï¼½ãã¿ã³ããã¤ã¢ãã°ãéããããã«æå¹åãããå ´åããã¿ã³ã®ç¾å¨ã®å¤ãè¿å¤ã¨ãªãã¾ããï¼»ãã£ã³ã»ã«ï¼½ãã¿ã³ãæ¼ããã¦ãã¤ã¢ãã°ãéããããå ´åã returnValue
㯠cancel
ã¨ãªãã¾ãã
ãã¤ã¢ãã°ãéããããã¨ãè¿å¤ãï¼»ãã¤ã¢ãã°ã表示]ãã¿ã³ã®ä¸ã«è¡¨ç¤ºããã¾ãã Esc ãã¼ãæ¼ãã¦ãã¤ã¢ãã°ãéããããå ´åã returnValue
ã¯æ´æ°ãããã close
ã¤ãã³ããçºçããªãããã<output>
å
ã®ããã¹ãã¯æ´æ°ããã¾ããã
<!-- ãã©ã¼ã ã®ããã¢ã¼ãã«ãã¤ã¢ãã° -->
<dialog id="favDialog">
<form>
<p>
<label>
好ããªåç©ã¯ï¼
<select>
<option value="default">鏿ãã¦ãã ããâ¦</option>
<option>ãã©ã¤ã³ã·ã¥ãªã³ã</option>
<option>ã¬ããµã¼ãã³ã</option>
<option>ã¯ã¢ã¶ã«</option>
</select>
</label>
</p>
<div>
<button value="cancel" formmethod="dialog">ãã£ã³ã»ã«</button>
<button id="confirmBtn" value="default">確èª</button>
</div>
</form>
</dialog>
<p>
<button id="showDialog">ãã¤ã¢ãã°ã表示</button>
</p>
<output></output>
JavaScript
const showButton = document.getElementById("showDialog");
const favDialog = document.getElementById("favDialog");
const outputBox = document.querySelector("output");
const selectEl = favDialog.querySelector("select");
const confirmBtn = favDialog.querySelector("#confirmBtn");
// "Show the dialog" ãã¿ã³ã§ <dialog> ãã¢ã¼ãã«ã«éã
showButton.addEventListener("click", () => {
favDialog.showModal();
});
// "Cancel" ãã¿ã³ã§ [formmethod="dialog"] ã«ããéä¿¡ãè¡ããã«ãã¤ã¢ãã°ãéããclose ã¤ãã³ããçºè¡ãã
favDialog.addEventListener("close", (e) => {
outputBox.value =
favDialog.returnValue === "default"
? "No return value."
: `ReturnValue: ${favDialog.returnValue}`; // 空æååã§ã¯ãªããæ¢å®å¤ãã©ããã調ã¹ãå¿
è¦ããã
});
// [確èªï¼½ãã¿ã³ãæ¢å®ã§ãã©ã¼ã ãéä¿¡ããªãããã«ãã`close()` ã¡ã½ããã§ãã¤ã¢ãã°ãéãã"close" ã¤ãã³ããçºçããã
confirmBtn.addEventListener("click", (event) => {
event.preventDefault(); // ãã®å½ãã©ã¼ã ãéä¿¡ããªã
favDialog.close(selectEl.value); // ããã§é¸æããã¯ã¹ã®å¤ãéãå¿
è¦ããã
});
çµæ
ä¸è¨ã®ä¾ã§ã¯ãä¸è¨ã®ä¾ã¯ãã¢ã¼ãã«ãã¤ã¢ãã°ãéããæ¬¡ã® 3 ã¤ã®ã¡ã½ããã示ãã¦ãã¾ãã
dialog
ã¡ã½ããã使ç¨ãã¦ç¢ºå®ãããã¨ã«ãã£ã¦ï¼ä¾ãã°ãHTML ã®ã¿ã®ä¾ãåç
§ï¼ãHTMLDialogElement.close()
ã¡ã½ãããå¼ã³åºããã¨ã«ãã£ã¦ï¼ã¢ã¼ãã«ã®ä¾ã«ããããã«ï¼ã ãã®ä¾ã§ã¯ãï¼»ãã£ã³ã»ã«ï¼½ãã¿ã³ã¯ãã¤ã¢ãã°ãã©ã¼ã ã¡ã½ãããä»ãã¦ãã¤ã¢ãã°ãéãã[確èªï¼½ãã¿ã³ã¯ HTMLDialogElement.close()
ã¡ã½ãããä»ãã¦ãã¤ã¢ãã°ãéãã¾ããï¼»ãã£ã³ã»ã«ï¼½ãã¿ã³ã«ã¯ formmethod="dialog"
ãå«ã¾ãã¦ããã <form>
ã®æ¢å®ã® GET
ã¡ã½ãã (method
) ã䏿¸ããã¾ãããã©ã¼ã ã®ã¡ã½ããã dialog
ã®å ´åããã©ã¼ã ã®ç¶æ
ã¯éä¿¡ãããã«ä¿åããããã¤ã¢ãã°ã¯éãããã¾ãã
action
ããªãå ´åãæ¢å®ã® GET
ã¡ã½ããã§ãã©ã¼ã ãéä¿¡ããã¨ããã¼ã¸ã®åèªã¿è¾¼ã¿ãçºçãã¾ããJavaScript ã使ç¨ãã¦ãéä¿¡ã黿¢ãããã¤ã¢ãã°ãéããããã«ããããã event.preventDefault()
㨠HTMLDialogElement.close()
ã¡ã½ããã使ç¨ãã¦ãã¾ãã
ãã¹ã¦ã® dialog
è¦ç´ ã§éããããã®ä»çµã¿ãæä¾ãããã¨ãéè¦ã§ããæ¢å®ã§ã¯ãéã¢ã¼ãã«ã®ãã¤ã¢ãã°ã¯ Esc ãã¼ã§ã¯éãã¾ããããã¦ã¼ã¶ã¼ãç©çãã¼ãã¼ãã«ã¢ã¯ã»ã¹ãããã¨ãæ³å®ãã¦ã¯ããã¾ããï¼ãã¨ãã°ããã¼ãã¼ãã«ã¢ã¯ã»ã¹ã§ããªãã¿ããç»é¢ç«¯æ«ã使ç¨ãã¦ãã人ããã¾ãï¼ã
ãã¤ã¢ãã°å
ã®ãã©ã¼ã ã«å¿
é å
¥åé
ç®ãããå ´åãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã¯ãå¿
é å
¥åé
ç®ã«å¤ãå
¥åãããã¾ã§ããã¤ã¢ãã°ãéãããã¨ãã§ãã¾ããããã®ãããªãã¤ã¢ãã°ãéããã«ã¯ãï¼»éããï¼½ãã¿ã³ã« formnovalidate
屿§ã使ç¨ããããï¼»éããï¼½ãã¿ã³ãã¯ãªãã¯ãããã¨ãã«ãã¤ã¢ãã°ãªãã¸ã§ã¯ãã® close()
ã¡ã½ãããå¼ã³åºãããã¦ãã ããã
<dialog id="dialog">
<form method="dialog">
<p>
<label>
好ããªåç©ã¯ï¼
<input type="text" required />
</label>
</p>
<div>
<input type="submit" id="normal-close" value="é常 éãã" />
<input
type="submit"
id="novalidate-close"
value="ç¡æ¤è¨¼ éãã"
formnovalidate />
<input type="submit" id="js-close" value="JS éãã" />
</div>
</form>
</dialog>
<p>
<button id="show-dialog">ãã¤ã¢ãã°ã表示</button>
</p>
<output></output>
[type="submit"] {
margin-right: 1rem;
}
JavaScript
const showBtn = document.getElementById("show-dialog");
const dialog = document.getElementById("dialog");
const jsCloseBtn = dialog.querySelector("#js-close");
showBtn.addEventListener("click", () => {
dialog.showModal();
});
jsCloseBtn.addEventListener("click", (e) => {
e.preventDefault();
dialog.close();
});
çµæ
åºåãããï¼»é常 éããï¼½ãã¿ã³ã使ç¨ãã¦ãã¤ã¢ãã°ãéãããã¨ãã§ããªããã¨ãåããã¾ããããããï¼»ç¡æ¤è¨¼ éããï¼½ãã¿ã³ã® formnovalidate
屿§ã使ç¨ãã¦ãã©ã¼ã ã®æ¤è¨¼ããã¤ãã¹ããã°ããã¤ã¢ãã°ãéãããã¨ãã§ãã¾ããããã°ã©ã ä¸ã§ã¯ãdialog.close()
ã使ç¨ãã¦ãåæ§ã«ãã¤ã¢ãã°ãéãããã¨ãã§ãã¾ãã
<dialog>
è¦ç´ ã¯ãé表示æã«ã¯ display: none;
表示æã«ã¯ display: block;
ã¨è¨å®ãããæä¸ä½ã¬ã¤ã¤ã¼ããã³ã¢ã¯ã»ã·ããªãã£ããªã¼ããåé¤ããããã追å ãããããã¾ãããããã£ã¦ã <dialog>
è¦ç´ ãã¢ãã¡ã¼ã·ã§ã³ãããã«ã¯ã display
ããããã£ãã¢ãã¡ã¼ã·ã§ã³åããå¿
è¦ãããã¾ãã対å¿ãã©ã¦ã¶ã¼ã§ã¯ãdisplay
ããããã£ã颿£çãªã¢ãã¡ã¼ã·ã§ã³åã§å¤åããã¦ã¢ãã¡ã¼ã·ã§ã³åãã¾ããå
·ä½çã«ã¯ããã©ã¦ã¶ã¼ã¯ none
ã¨ä»ã® display
å¤ã交äºã«åãæ¿ãããã¨ã§ãã¢ãã¡ã¼ã·ã§ã³åãããã³ã³ãã³ããã¢ãã¡ã¼ã·ã§ã³ã®å
¨æéã«ããã£ã¦è¡¨ç¤ºãããããã«ãã¾ãã
ä¾ãã°ã
display
ã none
ãã block
ï¼ãããã¯ä»ã®å¯è¦ã® display
å¤ï¼ã«ã¢ãã¡ã¼ã·ã§ã³ããå ´åãã¢ãã¡ã¼ã·ã§ã³åçæéã® 0%
ã§å¤ã block
ã«åãæ¿ããã常ã«è¡¨ç¤ºããã¾ããdisplay
ã® block
ï¼ã¾ãã¯ä»ã®å¯è¦ã® display
å¤ï¼ãã none
ã¸ã®ã¢ãã¡ã¼ã·ã§ã³ã§ã¯ãã¢ãã¡ã¼ã·ã§ã³åçæéã® 100%
ã®æç¹ã§å¤ã none
ã«åãæ¿ãããããå
¨ä½ãéãã¦è¡¨ç¤ºããã¾ããã¡ã¢: CSS ãã©ã³ã¸ã·ã§ã³ã使ç¨ãã¦ã¢ãã¡ã¼ã·ã§ã³ãè¡ãå ´åãä¸è¨ã®åä½ãæå¹ã«ããã«ã¯ transition-behavior: allow-discrete
ãè¨å®ããå¿
è¦ãããã¾ããCSS ã¢ãã¡ã¼ã·ã§ã³ã§ã¢ãã¡ã¼ã·ã§ã³ãè¡ãå ´åããã®åä½ã¯æ¢å®ã§ã¯å©ç¨ã§ããåçã®æé ã¯å¿
è¦ããã¾ããã
CSS ãã©ã³ã¸ã·ã§ã³ã§ <dialog>
ãã¢ãã¡ã¼ã·ã§ã³ãããå ´åã以ä¸ã®æ©è½ãè¦æ±ããã¾ãã
@starting-style
ã¢ããã«ã¼ã«
<dialog>
ã«è¨å®ãããããããã£ã®ãéããããã³ã«ãã©ã³ã¸ã·ã§ã³ããéå§å¤ã®ã»ãããæä¾ãã¾ããããã¯äºæãã¬åä½ãé¿ããããã«å¿
è¦ã§ããæ¢å®ã§ã¯ãCSS ãã©ã³ã¸ã·ã§ã³ã¯ãå¯è¦è¦ç´ ã®ããããã£ã 1 ã¤ã®å¤ããå¥ã®å¤ã«å¤æ´ãããå ´åã®ã¿çºçãã¾ããè¦ç´ ã®æåã®ã¹ã¿ã¤ã«æ´æ°æããdisplay
ã®åã none
ããå¥ã®åã«å¤æ´ãããå ´åã«ã¯çºçãã¾ããã
display
ããããã£
ãã©ã³ã¸ã·ã§ã³ã®ãªã¹ãã« display
ã追å ããã¨ããã©ã³ã¸ã·ã§ã³ã®åçæéä¸ã<dialog>
ã display: block
ï¼ã¾ãã¯ãã¤ã¢ãã°ãéãã¦ããç¶æ
ã¨ãã¦è¨å®ããã¦ããä»ã®å¯è¦ display
å¤ï¼ã®ã¾ã¾ã«ãªããä»ã«ããã©ã³ã¸ã·ã§ã³ã確å®ã«è¡¨ç¤ºããã¾ãã
overlay
ããããã£
ãã©ã³ã¸ã·ã§ã³ã®ãªã¹ãã« overlay
ãå«ã¾ãã¦ããã¨ãæä¸ä½ã¬ã¤ã¤ã¼ãã <dialog>
ã確å®ã«é¤å»ãããã¾ã§ãã©ã³ã¸ã·ã§ã³ãå®äºããã¾ã§é
å»¶ããããã©ã³ã¸ã·ã§ã³ã確å®ã«è¡¨ç¤ºãããããã«ãªãã¾ãã
transition-behavior
ããããã£
transition-behavior: allow-discrete
ã display
㨠overlay
ãã©ã³ã¸ã·ã§ã³ï¼ã¾ã㯠transition
䏿¬æå®ï¼ã«è¨å®ããã¨ãæ¢å®ã§ã¯ã¢ãã¡ã¼ã·ã§ã³ã§ããªãããã2ã¤ã®ããããã£ã§é¢æ£ãã©ã³ã¸ã·ã§ã³ãæå¹ã«ãªãã¾ãã
ãã®æ©è½ãã©ã®ãããªãã®ãè¦ã¦ããããã«ãä¾ãã°æ¬¡ã®ãããªä¾ãæãã¦ã¿ã¾ãããã
HTMLãã® HTML 㯠<dialog>
è¦ç´ ã¨ããã¤ã¢ãã°ã表示ãããããã®ãã¿ã³ãæ ¼ç´ãã¦ãã¾ããããã«ã<dialog>
è¦ç´ ã«ã¯ãããèªä½ãéããããããã®ãã¿ã³ãããä¸ã¤æ ¼ç´ããã¦ãã¾ãã
<dialog id="dialog">
ãããã³ã³ãã³ã
<button class="close">éãã</button>
</dialog>
<button class="show">ã¢ã¼ãã«è¡¨ç¤º</button>
CSS
CSS ã§ã¯ã@starting-style
ãããã¯ãè¨è¿°ãã¦ãopacity
ããã³ transform
ããããã£ã®ãã©ã³ã¸ã·ã§ã³éå§æã®ã¹ã¿ã¤ã«ãdialog[open]
ç¶æ
ã®ãã©ã³ã¸ã·ã§ã³çµäºæã®ã¹ã¿ã¤ã«ã<dialog>
ã表示ãããå¾ã«å
ã®ç¶æ
ã«æ»ãéã®æ¢å®ã® dialog
ç¶æ
ã®ã¹ã¿ã¤ã«ãå®ç¾©ãã¾ããæ³¨æãã¦ã»ããã®ã¯ã <dialog>
ã® transition
ãªã¹ãã«ã¯ããããã®ããããã£ã ãã§ãªããdisplay
㨠overlay
ããããã£ãå«ã¾ããããããã« allow-discrete
ãè¨å®ããã¦ãããã¨ã§ãã
ã¾ããéããã¨ãã«ç¾ãã <dialog>
ã®èå¾ã«ç¾ãã ::backdrop
ã® background-color
ããããã£ã«éå§æã®ã¹ã¿ã¤ã«å¤ãè¨å®ããç´ æµãªæè»¢ã¢ãã¡ã¼ã·ã§ã³ãæå®ãã¾ããã dialog[open]::backdrop
ã»ã¬ã¯ã¿ã¼ã¯ããã¤ã¢ãã°ãéãã¦ããã¨ãã«ã<dialog>
è¦ç´ ã®èæ¯ã®ã¿ã鏿ãã¾ãã
/* éããç¶æ
ã®ãã¤ã¢ãã° */
dialog[open] {
opacity: 1;
transform: scaleY(1);
}
/* éããç¶æ
ã®ãã¤ã¢ãã° */
dialog {
opacity: 0;
transform: scaleY(0);
transition:
opacity 0.7s ease-out,
transform 0.7s ease-out,
overlay 0.7s ease-out allow-discrete,
display 0.7s ease-out allow-discrete;
/* transition: all 0.7s allow-discrete;
ã¨çãã*/
}
/* éãåã®ç¶æ
*/
/* 詳細度ãåãã§ãããããåã® dialog[open] ã«ã¼ã«ã®å¾ã«ç½®ããªããã°å¹æãããã¾ãã */
@starting-style {
dialog[open] {
opacity: 0;
transform: scaleY(0);
}
}
/* ãã¤ã¢ãã°ãã¢ã¼ãã«ã§æä¸ä½ã«æ¥ãå ´åã« :backdrop ããã©ã³ã¸ã·ã§ã³ãã */
dialog::backdrop {
background-color: rgb(0 0 0 / 0%);
transition:
display 0.7s allow-discrete,
overlay 0.7s allow-discrete,
background-color 0.7s;
/* transition: all 0.7s allow-discrete;
ã¨çãã */
}
dialog[open]::backdrop {
background-color: rgb(0 0 0 / 25%);
}
/* ãã®éå§ã¹ã¿ã¤ã«è¨å®ã«ã¼ã«ã¯ãä¸è¨ã®ã»ã¬ã¯ã¿ã¼å
ã«ãã¹ããããã¨ãã§ãã¾ããã
å
¥ãåã»ã¬ã¯ã¿ã¼ã¯æ¬ä¼¼è¦ç´ ã表ããã¨ãã§ããªãããã§ãã */
@starting-style {
dialog[open]::backdrop {
background-color: rgb(0 0 0 / 0%);
}
}
JavaScript
JavaScript ã§ã表示ãã¿ã³ã¨éãããã¿ã³ã«ã¤ãã³ããã³ãã©ã¼ã追å ããã¯ãªãã¯ãããã¨ãã« <dialog>
ã表示ããããéãããããã¤ãã³ããçºçããã¾ãã
const dialogElem = document.getElementById("dialog");
const showBtn = document.querySelector(".show");
const closeBtn = document.querySelector(".close");
showBtn.addEventListener("click", () => {
dialogElem.showModal();
});
closeBtn.addEventListener("click", () => {
dialogElem.close();
});
çµæ
ãã®ã³ã¼ãã¯æ¬¡ã®ããã«è¡¨ç¤ºããã¾ãã
ã¡ã¢: <dialog>
ã¯ã表示ãããæç¹ã§ã¯å¸¸ã« display: none
ãã display: block
ã«å¤æ´ããããããé
ç®é·ç§»ãçºçãããã³ã«ã<dialog>
㯠@starting-style
ã¹ã¿ã¤ã«ãã dialog[open]
ã¹ã¿ã¤ã«ã«ãã©ã³ã¸ã·ã§ã³ãã¾ãã <dialog>
ãéããããã¨ãdialog[open]
ç¶æ
ããæ¢å®ã® dialog
ç¶æ
ã«ãã©ã³ã¸ã·ã§ã³ãã¾ãã
ãã®ãããªå ´åãé ç®ã¸ã®å ¥åæã¨åºåæã®ã¹ã¿ã¤ã«è¨å®ã®ãã©ã³ã¸ã·ã§ã³ãç°ãªããã¨ãå¯è½ã§ãããã®ä¾ã«ã¤ãã¦ã¯ããéå§ã¹ã¿ã¤ã«ã使ç¨ããå ´åã®ãã¢ããã覧ãã ããã
dialog ã®ãã¼ãã¬ã¼ã ã¢ãã¡ã¼ã·ã§ã³CSS ã®ãã¼ãã¬ã¼ã ã¢ãã¡ã¼ã·ã§ã³ã§ <dialog>
ãã¢ãã¡ã¼ã·ã§ã³ãããå ´åããã©ã³ã¸ã·ã§ã³ã¨ã®ããã¤ãã®éãã«æ³¨æããå¿
è¦ãããã¾ãã
@starting-style
ã¯æä¾ãã¾ãããdisplay
ãè¨è¼ãã¾ããããã¯ã¢ãã¡ã¼ã·ã§ã³å
¨ä½ãã¾ãã¯å¥ã® none
以å¤ã®è¡¨ç¤ºå¤ãæå®ãããã¾ã§ã®è¡¨ç¤ºå¤ã¨ãªãã¾ããallow-discrete
ã«ç¸å½ãããã®ã¯ããã¾ãããoverlay
ãè¨å®ããå¿
è¦ãããã¾ããã display
ã®ã¢ãã¡ã¼ã·ã§ã³ã <dialog>
ã®è¡¨ç¤ºããé表示ã¸ã®ã¢ãã¡ã¼ã·ã§ã³ãå¦çãã¾ãããã®ä¾ãè¦ã¦ãã©ã®ãããªãã®ãè¦ã¦ããã¾ãããã
HTMLæåã® HTML ã«ã¯ã<dialog>
è¦ç´ ã¨ããã¤ã¢ãã°ã表示ãããããã®ãã¿ã³ãããã¾ããããã«ã<dialog>
è¦ç´ ã«ã¯ãããèªä½ãéããããã®ãã¿ã³ãæ ¼ç´ããã¦ãã¾ãã
<dialog id="dialog">
ãããã³ã³ãã³ãã§ã
<button class="close">éãã</button>
</dialog>
<button class="show">ã¢ã¼ãã«è¡¨ç¤º</button>
CSS
CSSã§ã¯ã<dialog>
ãéããããç¶æ
ã¨è¡¨ç¤ºãããç¶æ
ã®éã§ã¢ãã¡ã¼ã·ã§ã³ãããããã®ãã¼ãã¬ã¼ã ãå®ç¾©ããããã«ã<dialog>
ã®èæ¯ã®ãã§ã¼ãã¤ã³ã¢ãã¡ã¼ã·ã§ã³ãå®ç¾©ãã¦ãã¾ãããã¤ã¢ãã°ããã¯ã¹ã®ã¢ãã¡ã¼ã·ã§ã³ã«ã¯ãå®éã®ã¢ãã¡ã¼ã·ã§ã³å¹æãåçæéå
¨ä½ã«ããã£ã¦ç¢ºå®ã«è¡¨ç¤ºãããããã«ããããã® display
ã®ã¢ãã¡ã¼ã·ã§ã³ãå«ã¾ãã¾ãã ããã¯ã°ã©ã¦ã³ãã®ãã§ã¼ãã¢ã¦ãã®ã¢ãã¡ã¼ã·ã§ã³ã¯ä¸å¯è½ã§ãããã¨ã«æ³¨æãã¦ãã ãããèæ¯ã¯ããã¤ã¢ãã°ããã¯ã¹ãéããããã¨ããã« DOM ããé¤å»ããããããã¢ãã¡ã¼ã·ã§ã³åããä½ããããããã§ã¯ããã¾ããã
dialog {
animation: fade-out 0.7s ease-out;
}
dialog[open] {
animation: fade-in 0.7s ease-out;
}
dialog[open]::backdrop {
animation: backdrop-fade-in 0.7s ease-out forwards;
}
/* Animation keyframes */
@keyframes fade-in {
0% {
opacity: 0;
transform: scaleY(0);
display: none;
}
100% {
opacity: 1;
transform: scaleY(1);
display: block;
}
}
@keyframes fade-out {
0% {
opacity: 1;
transform: scaleY(1);
display: block;
}
100% {
opacity: 0;
transform: scaleY(0);
display: none;
}
}
@keyframes backdrop-fade-in {
0% {
background-color: rgb(0 0 0 / 0%);
}
100% {
background-color: rgb(0 0 0 / 25%);
}
}
body,
button {
font-family: system-ui;
}
JavaScript
æå¾ã«ãJavaScript ã§ãã¿ã³ã«ã¤ãã³ããã³ãã©ã¼ã追å ãã<dialog>
ã表示ããããéãããã§ããããã«ãã¾ãã
const dialogElem = document.getElementById("dialog");
const showBtn = document.querySelector(".show");
const closeBtn = document.querySelector(".close");
showBtn.addEventListener("click", () => {
dialogElem.showModal();
});
closeBtn.addEventListener("click", () => {
dialogElem.close();
});
çµæ
ãã®ã³ã¼ãã¯æ¬¡ã®ããã«è¡¨ç¤ºããã¾ãã
æè¡çæ¦è¦ 仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ å ±HTMLDialogElement
ã¤ã³ã¿ã¼ãã§ã¤ã¹close
ã¤ãã³ãcancel
ã¤ãã³ãopen
ããããã£ï¼HTMLDialogElement
ã¤ã³ã¿ã¼ãã§ã¤ã¹ï¼inert
ã°ãã¼ãã«å±æ§ï¼HTML è¦ç´ ï¼::backdrop
æ¬ä¼¼è¦ç´ RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4