ã¢ãŒãã« (Modal) ãš ãã€ã¢ãã° (Dialog) ã®éã å®å šæŽç
ãŠã§ãéçºãããŠãããšããã¢ãŒãã«ããšããã€ã¢ãã°ããšããçšèªãããè³ã«ããŸããå€ãã®éçºè ã¯ãã®äºã€ã䌌ãŠãããããããã¯åãæå³ã§äœ¿ãããšããããŸããå®éãApple ã§ã¯ã¢ãŒãã«ãGoogle ã§ã¯ãã€ã¢ãã°ãšããçšèªãäž»ã«äœ¿ãããããããæ··çšãããããšãå°ãªããããŸããããããããã®äºã€ã¯æç¢ºã«ç°ãªãç®çãšçžäºäœçšæ¹åŒãæã£ãŠããŸãã
ãã®ãã¹ãã§ã¯ãã¢ãŒãã«ãšãã€ã¢ãã°ã®æ£ç¢ºãªå®çŸ©ããäž»ãªéãããããŠãããããã©ã®ç¶æ³ã§äœ¿ãã¹ãããæç¢ºã«æŽçããŠã¿ãŸãããã®æç« ãæåŸãŸã§èªãã°ããã®äºã€ã® UI ã³ã³ããŒãã³ãããã€ãã©ã®ããã«äœ¿ãã¹ããèªä¿¡ãæãŠãããã«ãªãã§ãããïŒ
ã¢ãŒãã« (Modal) ãš ãã€ã¢ãã° (Dialog) ãšã¯ïŒ
ãŸããããããã®çšèªã®å®çŸ©ãèŠãªãããåºæ¬çãªæŠå¿µãããã£ããæŒãããŠãããŸãããã
ã¢ãŒãã« (Modal) ã®å®çŸ©
ã¢ãŒãã« (Modal) ã¯ãæ¢åã®ç»é¢ã®äžã«æ°ããã¬ã€ã€ãŒã衚瀺ãããŠãŒã¶ãŒã®èŠç·ãéäžããã UI èŠçŽ ã§ããã¢ãŒãã«ãæå¹ã«ãªããšããŠãŒã¶ãŒã¯ã¢ãŒãã« ãŠã£ã³ããŠãšã®å¯Ÿè©±ãè¡ããŸã§ãå ã®ããŒãžã®ä»ã®éšåãšæäœã§ããªããªããŸããã€ãŸããç¹å®ã®ã¿ã¹ã¯ãå®äºãããã¢ãŒãã«ãéãããŸã§ãå ã®ç»é¢ã«æ»ããªãã鮿å UIããšèšããŸãã
ãã®ãããªç¹æ§ã®ãããã¢ãŒãã«ã¯ çŸåšã®ããŒãžã«åŸå±ãã芪åé¢ä¿ãæã¡ãŸãããŸãã§çŸåšã®ããŒãžã®äžéšã®ããã«åäœãããŠãŒã¶ãŒãå¿ ã確èªãã¹ãéèŠãªæ å ±ã®äŒéã倿ãå¿ èŠãªãšãã«æå¹ã«äœ¿ãããŸãã
ãã€ã¢ãã° (Dialog) ã®å®çŸ©
ãã€ã¢ãã° (Dialog) ã¯ããŠãŒã¶ãŒã«æ å ±ãæäŸãããå ¥åãåãåã£ããããããã«äœ¿ãããã察話ããã¯ã¹ããæå³ãããããåºãæŠå¿µã§ããååã®éãããŠãŒã¶ãŒãšã·ã¹ãã ã®ç°¡åãªå¯Ÿè©±ãç®çãšããŠããŸãã
ãã€ã¢ãã°ã¯ã¢ãŒãã«ã®ããã«ãŠãŒã¶ãŒã®è¡åã匷å¶ãã ã¢ãŒãã« ãã€ã¢ãã° (Modal Dialog) ã«ãªãããšããä»ã®ç»é¢ãæäœããªããã§ãçžäºäœçšã§ãã ã¢ãŒãã«ã¬ã¹ ãã€ã¢ãã° (Modeless Dialog) ã®åœ¢ã«ãªãããšããããŸããã€ãŸãããã€ã¢ãã°ã¯ã¢ãŒãã«ãå«ãäžäœæŠå¿µãšèŠãªãããšãã§ããŸããïŒã¢ãŒãã« â ãã€ã¢ãã°ïŒ
MDN â dialog
<dialog>HTML èŠçŽ ã¯ãã¢ãŒãã«ãŸãã¯éã¢ãŒãã«ã®å¯Ÿè©±ããã¯ã¹ãéããããéç¥ãŠã£ã³ããŠãæ€æ»ããŒã«ããµããŠã£ã³ããŠãšãã£ãçžäºäœçšå¯èœãªã³ã³ããŒãã³ãã衚ããŸãã
HTML<dialog>èŠçŽ ã¯ãã¢ãŒãã«ããã³éã¢ãŒãã«å¯Ÿè©±ããã¯ã¹ãäœæããããã«äœ¿çšãããŸããã¢ãŒãã«å¯Ÿè©±ããã¯ã¹ã¯ããŒãžã®æ®ãéšåãšã®çžäºäœçšã忢ãããéã¢ãŒãã«å¯Ÿè©±ããã¯ã¹ã¯ããŒãžã®æ®ãéšåãšã®çžäºäœçšãèš±ããŸãã
<dialog>èŠçŽ ã衚瀺ããã«ã¯ JavaScript ã䜿ããªããã°ãªããŸãããã¢ãŒãã«å¯Ÿè©±ããã¯ã¹ã衚瀺ããã«ã¯.showModal()ã¡ãœããã䜿ããéã¢ãŒãã«å¯Ÿè©±ããã¯ã¹ã衚瀺ããã«ã¯.show()ã¡ãœããã䜿ããŸãã察話ããã¯ã¹ã¯.close()ã¡ãœããã䜿çšãããã<dialog>èŠçŽ å ã«ãã¹ãããã<form>ãéä¿¡ãããšãã« dialog ã¡ãœããã䜿ã£ãŠéããããŸããã¢ãŒãã«å¯Ÿè©±ããã¯ã¹ã¯ Esc ããŒãæŒãããšã§éããããšãã§ããŸãã
æ žå¿çãªéãïŒçžäºäœçšæ¹åŒãšç®ç
å®çŸ©ãããããããã«ãæã倧ããªéã㯠çžäºäœçšã®åŒ·å¶æ§ 㚠䜿çšç®ç ã«ãããŸãã
| åºå | ã¢ãŒãã« (Modal) | ãã€ã¢ãã° (Dialog) |
|---|---|---|
| çžäºäœçš | 鮿 (Blocking) â ã¢ãŒãã« ãŠã£ã³ããŠãéãããŸã§èæ¯ã³ã³ãã³ããšå¯Ÿè©±äžå¯ | 鮿åãŸãã¯é鮿å (Blocking or Nonâblocking) â ã¢ãŒãã«ãŸãã¯ã¢ãŒãã«ã¬ã¹ã®åœ¢ã§å®è£ å¯èœ |
| ç®ç | ãŠãŒã¶ãŒã®æ³šæéäžã»æ±ºå®ïŒå ¥ååŒ·å¶ â éèŠæ å ±ç¢ºèªãèšå®å€æŽãªã©äžå¯æ¬ ãªã¿ã¹ã¯ã®å®è¡ | æ å ±æäŸããã³åé â éç¥ã確èªã¡ãã»ãŒãžãªã©ãŠãŒã¶ãŒãšã®ç°¡åãªãããšã |
| é¢ä¿ | åžžã«ãã€ã¢ãã°ã®äžçš®ïŒãã¹ãŠã®ã¢ãŒãã«ã¯ãã€ã¢ãã°ïŒ | å æ¬çãªæŠå¿µïŒãã¹ãŠã®ãã€ã¢ãã°ãã¢ãŒãã«ã§ããããã§ã¯ãªãïŒ |
çµè«ãšããŠããã¢ãŒãã«ãã¯çžäºäœçšæ¹åŒãå®ããæè¡çãªçšèªã«è¿ããããã€ã¢ãã°ãã¯ãŠãŒã¶ãŒãšã®å¯Ÿè©±ãšããç®çãè¡šãæ©èœçãªçšèªã«è¿ããšèšããŸãã
ãã€äœã䜿ãã¹ããïŒïŒäœ¿çšäŸ (Use Cases)
ã§ã¯å®éã®éçºç°å¢ã§ã¯ããã€ã¢ãŒãã«ã䜿ãããã€ãã€ã¢ãã°ã䜿ãã¹ãã§ããããïŒ äžè¬çãªäœ¿çšã±ãŒã¹ãéããŠèŠãŠã¿ãŸãããã
ã¢ãŒãã« (Modal) 䜿çšãé©åãªå Žå
ãŠãŒã¶ãŒãå¿ ãç¹å®ã®äœæ¥ãçµããªããã°æ¬¡ã®ã¹ãããã«é²ããªãç¶æ³ã§äœ¿çšããŸãã
-
ãã°ã€ã³ / äŒå¡ç»é²ãŠã£ã³ããŠïŒãŠãŒã¶ãŒããã°ã€ã³æ å ±ãå ¥åãããŸã§ä»ã®æ©èœã䜿ãããããªããšã
-
éèŠãªç¢ºèªãŠã£ã³ããŠïŒãæ¬åœã«åé€ããŸããïŒãã®ããã«ãŠãŒã¶ãŒã®æç¢ºãªç¢ºèªãå¿ èŠãªå Žå
-
èšå®å€æŽïŒãŠãŒã¶ãŒãã¢ããªã®äž»èŠèšå®ã倿ŽããŠããéãä»ã®çžäºäœçšã鮿ããŠæ··ä¹±ãé²ããããšã
-
ã³ã³ãã³ã詳现衚瀺ïŒã®ã£ã©ãªãŒã§ç»åãã¯ãªãã¯ãããšããç»åã倧ãã衚瀺ããèæ¯ã¹ã¯ããŒã«ã鮿ããããšã
ãã€ã¢ãã° (Dialog) 䜿çšãé©åãªå Žå
ãŠãŒã¶ãŒã«ç°¡åãªæ å ±ãç¥ããããéžæè¢ãäžãããããããä»ã®äœæ¥ãå®å šã«æ¢ããå¿ èŠã®ãªããšãã«äœ¿çšããŸãã
-
éç¥ (Notifications)ïŒãã¢ããããŒãå¯èœã§ããã®ããã«ãŠãŒã¶ãŒãžæ å ±ãäŒããããå³åº§ã®æäœã匷å¶ããªããšãïŒã¢ãŒãã«ã¬ã¹ïŒ
-
ç°¡åãªéžæïŒããã¡ã€ã«ãä¿åããŸããïŒãã®ãã㪠Yes / No ã®éžæãåãåããšãïŒã¢ãŒãã«ïŒ
-
ããŒã«ã®ãªãã·ã§ã³ãŠã£ã³ããŠïŒPhotoshop ã®ãããªããŒã«ã§ãç¹å®ããŒã«ã®è©³çްãªãã·ã§ã³ãèšå®ããå°ããªãŠã£ã³ããŠïŒã¢ãŒãã«ã¬ã¹ïŒ
æè¡çå®è£ 芳ç¹
ãŠã§ãéçºã«ãããŠã¢ãŒãã«ãšãã€ã¢ãã°ã¯äž»ã« HTMLãCSSãJavaScript ã䜿ã£ãŠå®è£ ãããŸãã
-
HTMLïŒ
<dialog>ã¿ã°ã¯ãã€ã¢ãã°ãäœãããã®æšæº HTML èŠçŽ ã§ãããã®ã¿ã°ã䜿ãããšã§ã.showModal()ã¡ãœããã§ã¢ãŒãã«åœ¢åŒã.show()ã¡ãœããã§ã¢ãŒãã«ã¬ã¹åœ¢åŒãç°¡åã«éãããšãã§ããŸãã -
CSSïŒ
::backdropä»®æ³èŠçŽ ã䜿ãã°ã<dialog>ãã¢ãŒãã«åœ¢åŒã§éããéã®èæ¯ïŒããã¯ããããïŒã®ã¹ã¿ã€ã«ïŒããšãã°æããããªã©ïŒãç°¡åã«æå®ã§ããŸãã -
JavaScriptïŒã¢ãŒãã«ïŒãã€ã¢ãã°ãééããããžãã¯ãå¶åŸ¡ããŸãããã¿ã³ãã¯ãªãã¯ãããšãã«
showModal()ãåŒãã ããéãããã¿ã³ã Esc ããŒã§close()ãåŒãã ãããªã©ã®åäœãå®è£ ããŸãã
<!-- HTML æ§é äŸ -->
<dialog id="myDialog">
<h2>ãã€ã¢ãã° ã¿ã€ãã«</h2>
<p>ããã¯ãã€ã¢ãã°ã®å
容ã§ãã</p>
<button id="closeBtn">éãã</button>
</dialog>
<button id="openBtn">ãã€ã¢ãã° éã</button>
<script>
// JavaScript å®è£
äŸ
const dialog = document.getElementById('myDialog');
const openBtn = document.getElementById('openBtn');
const closeBtn = document.getElementById('closeBtn');
openBtn.addEventListener('click', () => {
dialog.showModal(); // ã¢ãŒãã«åœ¢åŒã§ãã€ã¢ãã°ãéããŸãã
});
closeBtn.addEventListener('click', () => {
dialog.close(); // ãã€ã¢ãã°ãéããŸãã
});
</script>
ãã®ããã«ãææ°ã®ãŠã§ãæšæºã§ã¯ <dialog> ã¿ã°ã䜿ã£ãŠäž¡åœ¢åŒã容æã«å®è£
ã§ããããã«ãªã£ãŠããŸãã
ããè¯ããŠãŒã¶ãŒäœéšã®ããã®éžæ
ããã§ã¢ãŒãã«ãšãã€ã¢ãã°ã®éããã¯ã£ãããããšæããŸãã
-
ã¢ãŒãã« (Modal) ã¯ãŠãŒã¶ãŒã®åäœã 匷å¶ããæ³šæãéäžãããªããã°ãªããªããšãã«äœ¿ã 匷åãªããŒã« ã§ãã
-
ãã€ã¢ãã° (Dialog) ã¯ãŠãŒã¶ãŒãšã® ç°¡åãªå¯Ÿè©± ãå¿ èŠãªãšã䜿ã å æ¬çãªæŠå¿µ ã®å¯Ÿè©±ããã¯ã¹ã§ãã
ãã¹ãŠã®ã¢ãŒãã«ã¯ãã€ã¢ãã°ã®äžçš®ã§ããããã¹ãŠã®ãã€ã¢ãã°ãã¢ãŒãã«ã§ããããã§ã¯ãããŸããããã£ãšã倧äºãªã®ã¯ããŠãŒã¶ãŒã®æµãã劚ããªãç¯å²ã§æç¢ºãªç®çãéæããããš ã§ããå¿ èŠã§ãªãéãããŠãŒã¶ãŒã®æäœã鮿ããã¢ãŒãã«ã®äœ¿çšã¯æå°åããã®ãæãŸããã§ãããã
ä»åŸãããžã§ã¯ãã§ UI ãèšèšããéã«ã¯ããŸãããã®æ å ±ã¯ãŠãŒã¶ãŒã®äœæ¥ãäžæãããã ãã®éèŠæ§ããããïŒããšããåããæã£ãŠãã ããããã®åãã«å¯Ÿããçãããã¢ãŒãã«ãšãã€ã¢ãã°ã®éã§æ£ããéžæãå°ããŠãããã¯ãã§ãã ð