HTML <button> ãã¿ã³è¦ç´
Baseline
åºãå©ç¨å¯è½
*
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
* ãã®æ©è½ã®ä¸é¨ã¯ã対å¿ã¬ãã«ãç°ãªãå ´åãããã¾ãã
<button> 㯠HTML ã®è¦ç´ ã§ããã¦ã¹ããã¼ãã¼ããæãé³å£°ã³ãã³ãããã®ä»ã®æ¯æ´æè¡ã§èµ·åãããã¨ãã§ããæä½å¯è½è¦ç´ ã§ããèµ·åããã¨ããã©ã¼ã ãéä¿¡ããããã¤ã¢ãã°ãéãããã¨ãã£ãæä½ãå®è¡ãã¾ãã
ããã©ã«ãã§ã¯ãHTML ã®ãã¿ã³ã¯ã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ããå®è¡ããã¦ãããã¹ãã®ãã©ãããã©ã¼ã ã®ã¹ã¿ã¤ã«ã¨ä¼¼ã¦ãã¾ããã CSS ã使ç¨ãã¦ãã¿ã³ã®å¤è¦ã夿´ãããã¨ãã§ãã¾ãã
試ãã¦ã¿ã¾ããã
<button class="favorite styled" type="button">ãæ°ã«å
¥ãã«è¿½å </button>
.styled {
border: 0;
line-height: 2.5;
padding: 0 20px;
font-size: 1rem;
text-align: center;
color: white;
text-shadow: 1px 1px 1px black;
border-radius: 10px;
background-color: tomato;
background-image: linear-gradient(
to top left,
rgb(0 0 0 / 0.2),
rgb(0 0 0 / 0.2) 30%,
transparent
);
box-shadow:
inset 2px 2px 3px rgb(255 255 255 / 0.6),
inset -2px -2px 3px rgb(0 0 0 / 0.6);
}
.styled:hover {
background-color: red;
}
.styled:active {
box-shadow:
inset -2px -2px 3px rgb(255 255 255 / 0.6),
inset 2px 2px 3px rgb(0 0 0 / 0.6);
}
屿§
ãã®è¦ç´ ã«ã¯ã°ãã¼ãã«å±æ§ãããã¾ãã
autofocus-
è«ç屿§ã§ããã¼ã¸èªã¿è¾¼ã¿æã«ãã®ãã¿ã³ãå ¥åãã©ã¼ã«ã¹ãæã¤ã¹ãã§ãããã¨ãæå®ãã¾ãããã®å±æ§ãè¨å®ãããã¨ãã§ããã®ã¯ãææ¸ä¸ã®è¦ç´ ä¸ã¤ã ãã§ãã
command-
å¶å¾¡ãã¿ã³ã®
<button>ã«ãã£ã¦å¶å¾¡ããããcommandfor屿§ã§æå®ããè¦ç´ ã«å¯¾ãã¦å®è¡ããã¢ã¯ã·ã§ã³ãæå®ãã¾ããå®ç¾å¯è½ãªå¤ã¯æ¬¡ã®ã¨ããã§ãã"show-modal"-
ãã®ãã¿ã³ã¯ã
<dialog>ãã¢ã¼ãã«ã¨ãã¦è¡¨ç¤ºããã¾ãããã¤ã¢ãã°ããã§ã«ã¢ã¼ãã«ã§ããå ´åã¯ãä½ããã¾ãããããã¯ãHTMLDialogElement.showModal()ã¡ã½ããã<dialog>è¦ç´ ã§å¼ã³åºããã¨ã¨åãæå³ã®å®£è¨çãªæ¹æ³ã§ãã "close"-
ãã®ãã¿ã³ã¯ã
<dialog>è¦ç´ ãéãã¾ãã ãã¤ã¢ãã°ããã§ã«éãããã¦ããå ´åãä½ããã¾ããã ããã¯ãHTMLDialogElement.close()ã¡ã½ããã<dialog>è¦ç´ ã§å¼ã³åºããã¨ã¨åãæå³ã®å®£è¨çãªæ¹æ³ã§ããvalue屿§ãæå®ããå ´åããã¿ã³ã®å¤ã¯ãã¤ã¢ãã°ã®returnValueããããã£ã¨ãã¦æ¸¡ããã¾ãã "request-close"-
ãã®ãã¿ã³ã¯ã
cancelã¤ãã³ãã<dialog>è¦ç´ ä¸ã§çºè¡ãããã©ã¦ã¶ã¼ã«ãã¤ã¢ãã°ãéããããè¦æ±ããç¶ãã¦closeã¤ãã³ããçºè¡ãã¾ãã ããã¯closeã³ãã³ãã¨ã¯ç°ãªãã使è ã¯Event.preventDefault()ãcancelã¤ãã³ãã«å¯¾ãã¦å¼ã³åºããã¨ã§<dialog>ãéããã®ãé²ããã¨ãã§ãã¾ãã ãã¤ã¢ãã°ãæ¢ã«éãããã¦ããå ´åã¯ãä½ãè¡ããã¾ããã ããã¯ãHTMLDialogElement.requestClose()ã¡ã½ããã<dialog>è¦ç´ ã«å¯¾ãã¦å¼ã³åºããã¨ã¨åçã®å®£è¨çãªæ¹æ³ã§ãã ãã¿ã³ã®value屿§ãæå®ããå ´åããã®å¤ããã¤ã¢ãã°ã®returnValueããããã£ã¨ãã¦æ¸¡ããã¾ãã "show-popover"-
ãã®ãã¿ã³ã¯ãé表示ã®ããããªã¼ãã¼ã表示ãã¾ãããã§ã«è¡¨ç¤ºããã¦ããããããªã¼ãã¼ã表示ãããã¨ããã¨ãä½ããã¾ããã詳細ã«ã¤ãã¦ã¯ãããããªã¼ãã¼ API ãåç §ãã¦ãã ãããããã¯ã
showã®å¤ãpopovertargetaction屿§ã«è¨å®ãããã¨ã«ç¸å½ããããããªã¼ãã¼è¦ç´ ã«å¯¾ãã¦HTMLElement.showPopover()ã¡ã½ãããå¼ã³åºããã¨ã¨åãæå³ã®å®£è¨çãªæ¹æ³ã§ãã "hide-popover"-
ãã®ãã¿ã³ã¯ã表示ããã¦ããããããªã¼ãã¼ãé表示ã«ãã¾ãããã§ã«é表示ã«ãªã£ã¦ããããããªã¼ãã¼ãé表示ã«ãããã¨ããã¨ãä½ããã¾ããã詳細ã«ã¤ãã¦ã¯ãããããªã¼ãã¼ API ãåç §ãã¦ãã ãããããã¯ã
hideã®å¤ãpopovertargetaction屿§ã«è¨å®ãããã¨ã«ç¸å½ããããããªã¼ãã¼è¦ç´ ã§HTMLElement.hidePopover()ã¡ã½ãããå¼ã³åºããã¨ã¨åãæå³ã®å®£è¨çãªæ¹æ³ã§ãã "toggle-popover"-
ãã®ãã¿ã³ã¯ãããããªã¼ãã¼ã®è¡¨ç¤ºã¨é表示ãåãæ¿ãã¾ããããããªã¼ãã¼ãé表示ã®å ´åã¯è¡¨ç¤ºãããããããªã¼ãã¼ã表示ããã¦ããå ´åã¯é表示ã«ãªãã¾ãã詳細ã«ã¤ãã¦ã¯ãããããªã¼ãã¼ API ãåç §ãã¦ãã ãããããã¯ã
toggleã®å¤ãpopovertargetaction屿§ã«è¨å®ãããã¨ã«ç¸å½ããããããªã¼ãã¼è¦ç´ ã§HTMLElement.togglePopover()ã¡ã½ãããå¼ã³åºããã¨ã¨åãæå³ã®å®£è¨çãªæ¹æ³ã§ãã - ã«ã¹ã¿ã å¤
-
ãã®å±æ§ã¯ã 2 ã¤ã®ãã¤ãã³æå (
--) ãæ¥é è¾ã¨ãã¦ä»å ããã«ã¹ã¿ã å¤ã表ãã¾ããã«ã¹ã¿ã å¤ãæã¤ãã¿ã³ã¯ãå¶å¾¡ãããè¦ç´ ã§CommandEventãé ä¿¡ãã¾ãã
commandfor-
<button>è¦ç´ ãã³ãã³ããã¿ã³ã«å¤æãããã¿ã³ã«æå®ãããcommand屿§ã§å®ç¾©ãããã³ãã³ããçºè¡ãããã¨ã§ãæå®ããã対話è¦ç´ ãå¶å¾¡ãã¾ããcommandfor屿§ã¯ãå¶å¾¡å¯¾è±¡ã¨ãªãè¦ç´ ã® ID ãå¤ã¨ãã¦åãã¾ããããã¯popovertargetã®ããæ±ç¨çãªãã¼ã¸ã§ã³ã§ãã disabled-
ããã¯è«ç屿§ã§ãã¦ã¼ã¶ã¼ããã¿ã³ãæä½ãããã¨ãææ¢ãã¾ããæ¼ããããã©ã¼ã«ã¹ãåããããããã¨ãã§ããªããªãã¾ãã
form-
ãã¿ã³ã«é¢é£ä»ãããã
<form>è¦ç´ ï¼ãã©ã¼ã ãªã¼ãã¼ï¼ã§ãããã®å±æ§ã®å¤ã¯ãå䏿æ¸å ã®<form>è¦ç´ ã®id屿§ã¨åä¸ã§ãªããã°ãªãã¾ãããï¼ãã®å±æ§ãè¨å®ããªãã£ãå ´åã<button>ã¯ç¥å ã«<form>è¦ç´ ãåå¨ããã°ããã®è¦ç´ ã«é¢é£ä»ãããã¾ããï¼ãã®å±æ§ã«ãã£ã¦
<button>è¦ç´ ã<form>ã®ä¸ã«ãªãã¦ããå䏿æ¸å ã«ããä»»æã®<form>è¦ç´ ã«é¢é£ä»ãããã¨ãå¯è½ã«ãªãã¾ãããã¾ããç¥å ã®<form>è¦ç´ ã䏿¸ããããã¨ãã§ãã¾ãã formaction-
ãã®ãã¿ã³ã«ãã£ã¦éä¿¡ãããæ å ±ãå¦çãã URL ã§ãããã®ãã¿ã³ã®ãã©ã¼ã ãªã¼ãã¼ã®
action屿§ãããåªå ããã¾ãããã©ã¼ã ãªã¼ãã¼ããªãå ´åã¯ä½ããã¾ããã formenctype-
ãã®ãã¿ã³ãéä¿¡ãã¿ã³ã§ããå ´åï¼
<form>ã®ä¸ã«ãããé¢é£ä»ãããã¦ãããtype="button"ãè¨å®ããã¦ããªãå ´åï¼ãéä¿¡ããããã©ã¼ã ãã¼ã¿ã®ã¨ã³ã³ã¼ãæ¹æ³ãæå®ãã¾ããæå®å¯è½ãªå¤ã¯ä»¥ä¸ã®éãã§ããapplication/x-www-form-urlencoded: ãã®å±æ§ã使ç¨ãããªãã£ãå ´åã®ããã©ã«ãå¤ãmultipart/form-data:<input>è¦ç´ ã®type屿§ã«fileãæå®ãã¦ä½¿ç¨ããå ´åã«ä½¿ç¨ãã¾ããtext/plain: ãããã°ç®çã§æå®ããããã®ã§ããå®éã®ãã©ã¼ã éä¿¡ã§ä½¿ç¨ãã¹ãã§ã¯ããã¾ããã
ãã®å±æ§ãæå®ãããå ´åããã®ãã¿ã³ã®ãã©ã¼ã ãªã¼ãã¼ã®
enctype屿§ããåªå ããã¾ãã formmethod-
ãã®ãã¿ã³ãéä¿¡ãã¿ã³ã§ããå ´åï¼
<form>ã®ä¸ã«ãããé¢é£ä»ãããã¦ãããtype="button"ãè¨å®ããã¦ããªãå ´åï¼ããã®å±æ§ã¯ãã®ãã©ã¼ã ãéä¿¡ããã®ã«ä½¿ç¨ããã HTTP ã¡ã½ãããæå®ãã¾ããæå®å¯è½ãªå¤ã¯ä»¥ä¸ã®éãã§ããpost: ãã©ã¼ã ã®ãã¼ã¿ã¯ããµã¼ãã¼ã¸éä¿¡ããéã« HTTP ãªã¯ã¨ã¹ãã®æ¬æã«å«ãããã¾ãããã©ã¼ã ã«ãã¹ã¯ã¼ããªã©ã®å ¬éããã¹ãã§ã¯ãªãæ å ±ãå«ã¾ãã¦ããå ´åã¯ããã®ã¡ã½ããã使ç¨ãã¦ãã ãããget: ãã©ã¼ã ã®ãã¼ã¿ã¯ããã©ã¼ã ã®actionã® URL ã«ãã»ãã¬ã¼ã¿ã¼ã¨ã㦠'?' ã使ç¨ãã¦è¿½å ããããã®çµæã¨ãªã URL ããµã¼ãã¼ã¸éä¿¡ãã¾ããæ¤ç´¢ãã©ã¼ã ã®ããã«ãã¾ã£ããå¯ä½ç¨ããªãå ´åã«ã®ã¿ããã®ã¡ã½ããã使ç¨ãã¦ãã ãããdialog: ãã®ã¡ã½ããã¯ããã¿ã³ãé¢é£ä»ãããããã¤ã¢ãã°ãéãããã©ã¼ã ãã¼ã¿ãã¾ã£ããéä¿¡ããªããã¨ã示ãããã«ä½¿ç¨ãã¾ãã
æå®ãããå ´åããã®å±æ§ã¯ãã¿ã³ã®ãã©ã¼ã ãªã¼ãã¼ã®
method屿§ããåªå ãã¦ä½¿ç¨ããã¾ãã formnovalidate-
è«ç屿§ã§ããã¿ã³ãéä¿¡ãã¿ã³ã§ããå ´åã«ããã©ã¼ã ãã¼ã¿éä¿¡æã«å å®¹ãæ¤è¨¼ããªãããã«æå®ãããã®ã§ãããã®å±æ§ãæå®ãããå ´åããã¿ã³ã®å±ãããã©ã¼ã ãªã¼ãã¼ã®
novalidate屿§ããåªå ãã¦ä½¿ç¨ããã¾ãããã®å±æ§ã¯
<input type="image">ããã³<input type="submit">è¦ç´ ã§ã使ç¨ã§ãã¾ãã formtarget-
ãã¿ã³ãéä¿¡ãã¿ã³ã§ããå ´åããã©ã¼ã ã®éä¿¡å¾ã«åä¿¡ããã¬ã¹ãã³ã¹ã表示ããå ´æã示ãã¦ã¼ã¶ã¼å®ç¾©ã®ååããããã¯ã¢ã³ãã¼ã¹ã³ã¢ããå§ã¾ãæ¨æºåããããã¼ã¯ã¼ãã§ããããã¯ãé²è¦§ã³ã³ããã¹ãï¼ã¿ããã¦ã£ã³ãã¦ã
<iframe>ï¼ã®nameã¾ãã¯ããã表ããã¼ã¯ã¼ãã§ãããã®å±æ§ãæå®ãããå ´åããã¿ã³ã®ãã©ã¼ã ãªã¼ãã¼ã®target屿§ããåªå ããã¾ãã以ä¸ã®ãã¼ã¯ã¼ãã¯ç¹å¥ãªæå³ãæã¡ã¾ãã_self: ã¬ã¹ãã³ã¹ãåãé²è¦§ã³ã³ããã¹ãã«èªã¿è¾¼ã¿ã¾ããããã¯ã屿§ãæå®ããã¦ããªãå ´åã®ããã©ã«ãå¤ã§ãã_blank: ã¬ã¹ãã³ã¹ãæ°ããç¡åã®é²è¦§ã³ã³ããã¹ã â æ®éã¯ããã©ã¦ã¶ã¼ã®è¨å®ã«å¾ããæ°ããã¿ãã¾ãã¯ã¦ã£ã³ã㦠â ã«èªã¿è¾¼ã¿ã¾ãã_parent: ã¬ã¹ãã³ã¹ãç¾å¨ã®ã³ã³ããã¹ãã®è¦ªã®é²è¦§ã³ã³ããã¹ãã«èªã¿è¾¼ã¿ã¾ãã親è¦ç´ ããªãå ´åããã®ãªãã·ã§ã³ã¯_selfã¨åãæ¯ãèãããã¾ãã_top: ã¬ã¹ãã³ã¹ãæä¸ä½ã®é²è¦§ã³ã³ããã¹ã (ç¾å¨ã®ã³ã³ããã¹ãã®ç¥å ã§ããã以åã®ç¥å ããããªãé²è¦§ã³ã³ããã¹ã) ã«èªã¿è¾¼ã¿ã¾ãã親è¦ç´ ããªãå ´åããã®ãªãã·ã§ã³ã¯_selfã¨åãæ¯ãèãããã¾ãã
interestfor-
ãã®
<button>è¦ç´ ãé¢å¿ã¤ã³ãã¼ã«ã¼ã¨ãã¦å®ç¾©ãã¾ãããã®å¤ã¯å¯¾è±¡è¦ç´ ã®idã§ãããã¤ã³ãã¼ã«ã¼è¦ç´ ã«å¯¾ãã¦é¢å¿ãåããããã失ããããããéï¼ä¾ãã°ãããã¼ãããã¼è§£é¤ããã©ã¼ã«ã¹ããã©ã¼ã«ã¹è§£é¤ãªã©ï¼ããã®å¯¾è±¡è¦ç´ ã«ä½ããã®å½±é¿ï¼é常ã¯è¡¨ç¤ºã¾ãã¯é表示ï¼ãåã¶ããã«ãªãã¾ãã詳細ãä¾ã«ã¤ãã¦ã¯ãé¢å¿ã¤ã³ãã¼ã«ã¼ã®ä½¿ç¨ãã覧ãã ããã name-
ãã®ãã¿ã³ã®ååã§ããã©ã¼ã ãã¼ã¿ã®ä¸é¨ã¨ãã¦ãã®ãã¿ã³ã®
valueã¨ã®çµã¿åããã§éä¿¡ããã¾ãã popovertarget-
<button>è¦ç´ ãããããªã¼ãã¼ã®å¶å¾¡ãã¿ã³ã«å¤æãã¾ããå¶å¾¡ããããããªã¼ãã¼è¦ç´ ã® ID ãå¤ã¨ãã¦åãåãã¾ããpopovertarget屿§ãæå®ãã¦ããããªã¼ãã¼ã¨ãã®å¼ã³åºãå ãã¿ã³ã¨ã®é¢é£ä»ããè¨å®ããã¨ã2 ã¤ã®æçãªå¹æã追å ããã¾ãã- ãã©ã¦ã¶ã¼ã¯ãããããªã¼ãã¼ã¨å¼ã³åºãå
ã¨ã®éã«æé»ã®
aria-detailsããã³aria-expandedã®é¢ä¿ã使ããããããªã¼ãã¼ã表示ãããã¨ãã«ããã¼ãã¼ããã©ã¼ã«ã¹ããã²ã¼ã·ã§ã³ã®é åºã§è«ççãªä½ç½®ã«ããããªã¼ãã¼ãé ç½®ãã¾ããããã«ããããã¼ãã¼ãããã³æ¯æ´æè¡ (AT) ã®ã¦ã¼ã¶ã¼ãããããªã¼ãã¼ã«ã¢ã¯ã»ã¹ãããããªãã¾ã ï¼ãããããªã¼ãã¼ã®ã¢ã¯ã»ã·ããªãã£æ©è½ããåç §ãã¦ãã ããï¼ã - ãã©ã¦ã¶ã¼ã¯ã2 ã¤ã®éã«æé»ã®ã¢ã³ã«ã¼åç §ã使ãããããCSS ã¢ã³ã«ã¼ä½ç½®æå®ã使ç¨ãã¦ãã³ã³ããã¼ã«ãåºæºã«ãã¦ããããªã¼ãã¼ãç¸å¯¾çã«ä½ç½®æå®ãããã¨ãã¨ã¦ã便å©ã§ãã詳細ã«ã¤ãã¦ã¯ããããããªã¼ãã¼ã®ã¢ã³ã«ã¼ä½ç½®æå®ããåç §ãã¦ãã ããã
- ãã©ã¦ã¶ã¼ã¯ãããããªã¼ãã¼ã¨å¼ã³åºãå
ã¨ã®éã«æé»ã®
popovertargetaction-
å¶å¾¡ç¨
<button>ã«ãã£ã¦å¶å¾¡ããã¦ããããããªã¼ãã¼è¦ç´ ã«å¯¾ãã¦å®è¡ãããåä½ãæå®ãã¾ãã使ç¨å¯è½ãªå¤ã¯ä»¥ä¸ã®éãã§ãã"hide"-
ãã®ãã¿ã³ã¯ã表示ããã¦ããããããªã¼ãã¼ãé表示ã«ãã¾ããé表示ã«ãªã£ã¦ããããããªã¼ãã¼ãé表示ã«ãããã¨ããå ´åãä½ãè¡ããã¾ããã
"show"-
ãã®ãã¿ã³ã¯ãé表示ã®ããããªã¼ãã¼ã表示ãã¾ãããã§ã«è¡¨ç¤ºããã¦ããããããªã¼ãã¼ã表示ãããã¨ãã¦ããä½ã®åä½ãèµ·ããã¾ããã
"toggle"-
ããããªã¼ãã¼ã®è¡¨ç¤ºã»é表示ãåãæ¿ãããã¿ã³ã§ããããããªã¼ãã¼ãé表示ã®å ´åã¯è¡¨ç¤ºãããããããªã¼ãã¼ã表示ããã¦ããå ´åã¯é表示ã«ãªãã¾ãã
popovertargetactionãçç¥ãããå ´åã"toggle"ããã®ã³ã³ããã¼ã«ãã¿ã³ã«ãã£ã¦å®è¡ãããããã©ã«ãã®åä½ã§ãã
type-
ãã®ãã¿ã³ã®ããã©ã«ãã®åä½ã§ãã以ä¸ã®å¤ãæå®å¯è½ã§ãã
submit: ãã®ãã¿ã³ã¯ãã©ã¼ã ã®ãã¼ã¿ããµã¼ãã¼ã¸éä¿¡ãã¾ããããã¯ãã®å±æ§ã<form>ã«é¢é£ä»ãããããã¿ã³ã«æå®ããã¦ããªãå ´åãã¾ãã¯ãã®å±æ§ã空ã§ãã£ãã䏿£ãªå¤ã§ãã£ããããå ´åã®ããã©ã«ãå¤ã§ããreset: ãã®ãã¿ã³ã¯ãã¹ã¦ã®ã³ã³ããã¼ã«ãåæå¤ã«åæåãã¾ãã <input type="reset"> ã¨åæ§ã§ãã (ãã®åä½ã¯ã¦ã¼ã¶ã¼ãå°ãããå¾åãããã¾ãã)button: ãã¿ã³ã«ã¯ããã©ã«ãã®åä½ããªããããã©ã«ãã§ã¯æ¼ããã¦ãä½ãè¡ãã¾ããããã®è¦ç´ ã®ã¤ãã³ããå¾ ã¡åãããã¤ãã³ããçºçããã¨èµ·åãããã¯ã©ã¤ã¢ã³ãå´ã¹ã¯ãªãããè¨å®ãããã¨ãã§ãã¾ãã
value-
ãã©ã¼ã ã®ãã¼ã¿ã¨ä¸ç·ã«éä¿¡ãããéã«ããã¿ã³ã®
nameã«çµã³ä»ããããå¤ãå®ç¾©ãã¾ãã ãã®å¤ã¯ããã©ã¼ã ã«éä¿¡ããéã«ãµã¼ãã¼ã«å¼æ°ã¨ãã¦æ¸¡ããã¾ããcloseã¾ãã¯request-closeã³ãã³ãã§ä½¿ç¨ããå ´åãvalue屿§ã¯ãå¶å¾¡å¯¾è±¡ã®<dialog>è¦ç´ ã®returnValueãè¨å®ãã¾ãã
ã¡ã¢
éä¿¡ãã¿ã³ã« formaction 屿§ãè¨å®ããã¦ãã¦ããé¢é£ä»ãããããã©ã¼ã ããªãå ´åã¯ä½ããã¾ããããã¿ã³ã <form> ã§å²ããã form ã§ãã©ã¼ã ã® id ãè¨å®ããããã¦ãã©ã¼ã ãªã¼ãã¼ãè¨å®ããå¿
è¦ãããã¾ãã
<button> è¦ç´ 㯠<input> è¦ç´ ããããã£ã¨ç°¡åã«ã¹ã¿ã¤ã«ä»ãã§ãã¾ããå
é¨ã« HTML ã³ã³ãã³ããï¼<i>ã <br> ã <img> ãããï¼è¿½å ã§ãã¾ãããè¤éãªæç»ã®ããã« ::after ã ::before æ¬ä¼¼è¦ç´ ã使ç¨ãããã¨ãã§ãã¾ãã
ãã¿ã³ããµã¼ãã¼ã«ãã¼ã¿ãéä¿¡ããããã®ãã®ã§ãªãå ´åã¯ã type 屿§ã button ã«è¨å®ãããã¨ãå¿ããªãã§ãã ããããããªãã¨ããã©ã¼ã ãã¼ã¿ãéä¿¡ãã¦ï¼åå¨ããªãï¼ã¬ã¹ãã³ã¹ãèªã¿è¾¼ã¿ãææ¸ã®ç¾å¨ã®ç¶æ
ãç ´æ£ãã¦ãã¾ãããããããã¾ãã
<button type="button"> ã«ã¯ããã©ã«ãã®åä½ãããã¾ããããã¤ãã³ããã³ãã©ã¼ãè¨è¿°ãã¦åä½ãèµ·åãããã¨ãã§ãã¾ããèµ·åããããã¿ã³ã¯ JavaScript ãç¨ãã¦ããã°ã©ã å¯è½ãªã¢ã¯ã·ã§ã³ãå®è¡ãããã¨ãã§ãã¾ããä¾ãã°ã¢ã¤ãã ããªã¹ãããåé¤ãããªã©ã§ãã
ããã©ã«ãã§ã¯ãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã¯ãã¿ã³ã display: flow-root ã¨ãã¦ã¹ã¿ã¤ã«è¨å®ãã¾ããããã«ãããæ°ãããããã¯æ´å½¢ã³ã³ããã¹ãã確ç«ããããã¿ã³ããªã¼ãã¼ããã¼ããªãéãããã¿ã³ã®ä¸ã®åè¦ç´ ãæ°´å¹³æ¹åã¨åç´æ¹åã®ä¸¡æ¹ã§ä¸å¤®ã«é
ç½®ããã¾ãããã¿ã³ããã¬ãã¯ã¹ã¾ãã¯ã°ãªããã³ã³ããã¼ã¨ãã¦å®ç¾©ããã¦ããå ´åãåè¦ç´ ã¯ãã¬ãã¯ã¹ã¾ãã¯ã°ãªããã¢ã¤ãã ã¨ãã¦åä½ãã¾ãã display: inline ã«è¨å®ããããã¿ã³ã¯ãå¤ã display: inline-block ã«è¨å®ããã¦ãããã®ããã«ã¹ã¿ã¤ã«è¨å®ããã¾ãã
ã¢ã¯ã»ã·ããªãã£
>ã¢ã¤ã³ã³ãã¿ã³
ã¢ã¤ã³ã³ã®ã¿ã使ã£ã¦æ©è½ã表ç¾ãããã¿ã³ã¯ãã¢ã¯ã»ã·ãã«åãæã¡ã¾ãããã¢ã¯ã»ã·ãã«åã¯ã¹ã¯ãªã¼ã³ãªã¼ãã¼ã®ãããªæ¯æ´æè¡ã§ææ¸ãè§£æããã¢ã¯ã»ã·ããªãã£ããªã¼ãçæããã¨ãã«ãã¢ã¯ã»ã¹ããããã®ããã°ã©ã çãªããã¯ãæä¾ãã¾ãããã®ãããæ¯æ´æè¡ãç§»åããã¼ã¸ã³ã³ãã³ãã®æä½ã«ã¢ã¯ã»ã·ããªãã£ããªã¼ã使ç¨ãã¾ãã
ã¢ã¤ã³ã³ãã¿ã³ã«ã¢ã¯ã»ã·ãã«åãä¸ããã«ã¯ã <button> è¦ç´ ã§ãã¿ã³ã®æ©è½ãç°¡æ½ã«èª¬æããããã¹ãæååãæä¾ãã¦ãã ããã
ä¾
<button name="favorite">
<svg fill="black" viewBox="0 0 42 42">
<path
d="M21,1c1.081,0,5.141,12.315,6.201,13.126s13.461,1.053,13.791,2.137 c0.34,1.087-9.561,8.938-9.961,10.252c-0.409,1.307,
3.202,13.769,2.331,14.442c-0.879,0.673-11.05-6.79-12.361-6.79 c-1.311,0-11.481,7.463-12.36,6.79c-0.871-0.674,2.739-13.136,
2.329-14.442c-0.399-1.313-10.3-9.165-9.96-10.252 c0.33-1.084,12.731-1.326,13.791-2.137S19.91,1,21,1z"></path>
</svg>
ãæ°ã«å
¥ãã«è¿½å
</button>
çµæ
ãã¿ã³ã®ããã¹ãããã¢ã¯ã»ã¹å¯è½ãªæ¹æ³ã§è¦è¦çã«é ãããå ´åã¯ãCSS ããããã£ã®çµã¿åããã使ç¨ãã¦ç»é¢ããåé¤ããæ¯æ´æè¡ããã¯è§£æå¯è½ã®ã¾ã¾ã«ãã¾ãã
ãããããã¿ã³ã®ããã¹ããè¦è¦çã«è¦ããããã«ãã¦ããã°ãã¢ã¤ã³ã³ã®æå³ã«æ £ãã¦ããªã人ããã¿ã³ã®ç®çãçè§£ã§ããããã«ãªãã¾ããããã¯ç¹ã«ãæè¡çã«æ £ãã¦ããªã人ããã¢ã¤ã³ã³ãã¿ã³ã使ç¨ããã¢ã¤ã³ã³ã®æåçè§£éãç°ãªã人ã«é©ãã¦ãã¾ãã
大ããã¨è¿æ¥æ§
大ãã
ãã¿ã³ãªã©ã®æä½å¯è½ãªè¦ç´ ã¯ã容æã«ã¢ã¯ãã£ãåããããã¨ãã§ããã ãã®å¤§ããã§æä¾ããããã«ãã¦ãã ãããããã¯ãåããä¸èªç±ãªäººãã¹ã¿ã¤ã©ã¹ãæã®ãããªæ£ç¢ºæ§ã®ä½ãå½¢ã®å ¥åã使ç¨ãã¦ãã人ãªã©ãæ§ã ãªäººã«å½¹ç«ã¡ã¾ãã44Ã44 CSS ãã¯ã»ã«ä»¥ä¸ã®æä½ã®ããã®å¤§ãããæ¨å¥¨ããã¦ãã¾ãã
- Understanding Success Criterion 2.5.5: Target Size | W3C Understanding WCAG 2.1
- Target Size and 2.5.5 | Adrian Roselli
- Quick test: Large touch targets - The A11Y Project
è¿æ¥æ§
ããããã®æä½å¯è½ãªã³ã³ãã³ã â ãã¿ã³ãå«ã â ãäºãã«è¦è¦çã«æ¥è¿ãã¦é ç½®ãããã¨ãã¯ããããéã¦ãããã«ééãç½®ãã¦ãã ãããééãç½®ããã¨ã¯ãåããä¸èªç±ã§èª¤ã£ãæä½å¯è½ãªã³ã³ãã³ããæå¹åãã¦ãã¾ããã¨ããã人ã«ã¨ã£ã¦æçã§ãã
éé㯠margin ãªã©ã® CSS ããããã£ã使ç¨ãã¦ä½æãããã¨ãã§ãã¾ãã
ARIA ç¶æ æ å ±
ãã¿ã³ã®ç¶æ
ãè¨è¿°ããããã«ä½¿ç¨ããæ£ãã ARIA 屿§ã¯ aria-pressed ã§ãããaria-checked ã aria-selected ã§ã¯ããã¾ããã詳ããã¯ã ARIA button ãã¼ã«ã«ã¤ãã¦ã®æ
å ±ãã覧ãã ããã
ãã¿ã³ã®ã¹ã¿ã¤ã«
ãã©ã¼ã«ã¹ãæã¤è¦ç´ ã®ããã©ã«ãã®ãã©ã¼ã«ã¹ãªã³ã°ã¯ä¸æ¸ãããªããã¨ãæã¾ããã§ãããã¿ã³ã¹ã¿ã¤ã«ã䏿¸ããããå ´åãè¦è¦éç¢ã®ããã¦ã¼ã¶ã¼ãèªèã§ããèªç¥è½åã«éãã®ããã¦ã¼ã¶ã¼ãçè§£ã§ããããã«ããã©ã¼ã«ã¹ç¶æ ã®ã³ã³ãã©ã¹ããååã§ãããã¨ãä¿è¨¼ãããã¨ãéè¦ã§ãã
:focus-visible æ¬ä¼¼ã¯ã©ã¹ã使ç¨ããã¨ãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã®ãã¥ã¼ãªã¹ãã£ãã¯ããã©ã¼ã«ã¹ã強調表示ãã¹ãã§ããã¨å¤æããå ´åï¼ãã¨ãã°ã<button> ããã¼ãã¼ãã®ãã©ã¼ã«ã¹ãåãåã£ãå ´åãªã©ï¼ã«ã®ã¿ã :focus ãä¿æããè¦ç´ ã«ã¹ã¿ã¤ã«ãé©ç¨ãããã¨ãã§ãã¾ãã詳細ã«ã¤ãã¦ã¯ã:focus 㨠:focus-visible ãåç
§ãã¦ãã ããã
è²ã®ã³ã³ãã©ã¹ãæ¯ã¯ãããã¹ãåã³èæ¯è²ã®æåº¦ã®å¤ãæ¯è¼ãããã¨ã§æ±ºå®ããã¾ããç¾å¨ã®ã¦ã§ãã³ã³ãã³ãã¢ã¯ã»ã·ããªãã£ã¬ã¤ãã©ã¤ã³ (Web Content Accessibility Guidelines, WCAG) ã«ããã°ãæååã³ã³ãã³ãã§ 4.5:1 以ä¸ã大ããã®æååã§ 3:1 以ä¸ã®ã³ã³ãã©ã¹ãæ¯ãæ±ãããã¦ãã¾ãã (大ããã®æååã¨ã¯ã bold ã® 18.66px 以ä¸ãã¾ã㯠24px 以ä¸ã¨å®ç¾©ããã¦ãã¾ãã)
ã¯ãªãã¯ã¨ãã©ã¼ã«ã¹
<button> ã <input> ã®ãã¿ã³åãã¯ãªãã¯ããã¨ãã«ï¼ããã©ã«ãã§ï¼ãã©ã¼ã«ã¹ãå¾ããã¯ããã©ã¦ã¶ã¼ããã³ OS ã«ããç°ãªãã¾ããå¤ãã®ãã©ã¦ã¶ã¼ã¯ã¯ãªãã¯ããã¦ãããã¿ã³ã«ãã©ã¼ã«ã¹ãä¸ãã¾ãããSafari ã¯è¨è¨ä¸ãããªãã¾ããã
ä¾
>åºæ¬çãªãã¿ã³ã®ä½æ
ãã®ä¾ã§ã¯ãã¯ãªãã¯å¯è½ãªãã¿ã³ã使ãã¾ãã
type="button" 屿§ã«ããããã¿ã³ã«ããã©ã«ãã®åä½ãè¨å®ãããªãããã«ãªãã¾ãã
JavaScript ã commandãcommandfor ãªã©ã®å±æ§ã使ç¨ãããã¨ã§ããã®ãã¿ã³ãæä½å¯è½ã«ãããã¨ãã§ãã¾ãã
<button type="button" name="button">ããã¯ãã¿ã³ã§ã</button>
request-close å¤ã command 屿§ã§ä½¿ç¨
ãã®ä¾ã§ã¯ããã¤ã¢ãã°ãéãããã¨ãã§ãããã©ãããå¶å¾¡ãã2ã¤ã®ã©ã¸ãªãã¿ã³ãããã¾ãã ã¯ãã¾ãã¯ãããã鏿ããéãããã¯ãªãã¯ãã¦ããã¤ã¢ãã°ãéãããã¨ãã¦ã¿ã¦ãã ããã ã¯ãã鏿ãããå ´åããã¤ã¢ãã°ã¯éãããã¾ãããããã鏿ãããå ´åããã¤ã¢ãã°ã¯éããã¾ã¾ã«ãªãã代ããã«ã¡ãã»ã¼ã¸ã表示ããã¾ãã
<button type="button" commandfor="mydialog" command="show-modal">
ãã¤ã¢ãã°ãéã
</button>
<dialog id="mydialog">
<div class="wrapper">
<form>
<fieldset>
<legend>ãªã¯ã¨ã¹ããããå ´åããã®ãã¤ã¢ãã°ãéãããã¨ã許å¯ãã¾ããï¼</legend>
<div>
<input type="radio" id="no" name="close" value="no" checked />
<label for="no">ããã</label>
</div>
<div>
<input type="radio" id="yes" name="close" value="yes" />
<label for="yes">ã¯ã</label>
</div>
</fieldset>
</form>
<button commandfor="mydialog" command="request-close">
éãããªã¯ã¨ã¹ã
</button>
<p class="warning" hidden>ãã®ãã¤ã¢ãã°ãéããã«ã¯ãã¯ããã鏿ãã¦ãã ããã</p>
</div>
</dialog>
const dialog = document.querySelector("dialog");
const radio = document.querySelector("form").elements["close"];
const warning = document.querySelector(".warning");
dialog.addEventListener("cancel", (e) => {
if (!e.cancelable) return;
if (radio.value === "no") {
warning.hidden = false;
e.preventDefault();
} else {
warning.hidden = true;
}
});
ãã¤ã¢ãã°ãéã ãã¿ã³ãæ¼ãã¨ã<dialog> è¦ç´ ã command="show-modal" ã§éãã¾ãã
éãããªã¯ã¨ã¹ã ãã¿ã³ã«ã¯ command="request-close" ãè¨å®ããã¦ãããcommandfor="mydialog" 屿§ã§ãã® <dialog> è¦ç´ ã対象ã«ãã¦ãã¾ããã¯ãªãã¯ãããã¨ã ã¯ãªãã¯ãããã¨ã<dialog> ã«éãããã¨ãã§ãããåãåããã¾ãï¼<dialog> ãå³åº§ã«éãã command="close" 屿§ã¨ã¯ç°ãªãã¾ãï¼ã
ããã¯ã<dialog> ã cancel ã¤ãã³ãã使ç¨ã㦠cancelable ã§ãããã©ããã調ã¹ã¾ãã
ã¤ãã³ãã cancelable ã§ããå ´åãã©ã¸ãªãã¿ã³ã®å¤ã調ã¹ããã¾ãã
yesã«è¨å®ããã¨ããã¤ã¢ãã°ãéãããã¾ããnoã«è¨å®ããã¨ãè¦åã¡ãã»ã¼ã¸ã®hidden屿§ãç¡å¹ã«ãªããpreventDefault()ã¡ã½ãããå¼ã³åºããã¾ããããã«ãããããã©ã«ãã®<dialog>ã«ããã¦ã£ã³ãã¦ãéããåä½ãææ¢ããã¾ãã
ãã¤ã¢ãã°ã® close ã³ãã³ãã§ value 屿§ã使ç¨ãã
ãã®ä¾ã§ã¯ããã¿ã³ã® value 屿§ã« close ã³ãã³ããã¤ãã¦ããã¤ã¢ãã°ã® returnValue ããããã£ã®å¤ãè¨å®ããæ¹æ³ã示ãã¦ãã¾ãã
ãã£ã³ã»ã« ã¾ã㯠åé¤ ãã¿ã³ãã¯ãªãã¯ãããã¨ããã¤ã¢ãã°ãéãããããã® returnValue ããã¿ã³ã® value 屿§ã«è¨å®ããã¾ãã
close ã¤ãã³ãã®ãªã¹ãã¼ã¯ãdialog.returnValue ã調ã¹ãã¦ã¼ã¶ã¼ãã©ã®æä½ã鏿ãããã夿ãããã®çµæãç»é¢ã«ãã°åºåãã¾ãã
HTML
HTML ã§ã¯ã¾ããcommandfor 屿§ã使ç¨ãã¦éãããã®ãã¤ã¢ãã°ãæå®ããã¬ã³ã¼ããåé¤ãã¿ã³ãå®ç¾©ãã¾ãã
ãã¤ã¢ãã°å
ã®ãã£ã³ã»ã«ããã³åé¤ãã¿ã³ã§ã¯ãcommandfor 屿§ã使ç¨ãã¦ãããããç¾å¨ã®ãã¤ã¢ãã°ã«é©ç¨ããããã¨ã示ãã¾ãã
åæã«ãcommand 屿§ã "close" ã«è¨å®ããvalue 屿§ããããã "cancel" ããã³ "delete" ã«è¨å®ãã¾ãããã¿ã³ãã¯ãªãã¯ãããã¨ã鏿ããããã¿ã³ã®å¤ãèªåçã«ãã¤ã¢ãã°ã® returnValue ã«ã³ãã¼ããã¾ãã
<button commandfor="confirm-dialog" command="show-modal">ã¬ã³ã¼ããåé¤</button>
<dialog id="confirm-dialog">
<header>
<h1>ã¬ã³ã¼ããåé¤ãã¾ãã?</h1>
</header>
<p>æ¬å½ã«ããããã§ããï¼ãã®æä½ã¯å
ã«æ»ãã¾ãã</p>
<footer>
<button commandfor="confirm-dialog" command="close" value="cancel">
ãã£ã³ã»ã«
</button>
<button commandfor="confirm-dialog" command="close" value="delete">
åé¤
</button>
</footer>
</dialog>
<pre id="log"></pre>
JavaScript
ãã®ã³ã¼ãã§ã¯ãclose ã¤ãã³ããªã¹ãã¼ã使ç¨ãã¦ããã¤ã¢ãã°ã® returnValue ããã°åºåãã¾ãã
const dialog = document.getElementById("confirm-dialog");
dialog.addEventListener("close", () => {
switch (dialog.returnValue) {
case "cancel":
log("ãã£ã³ã»ã«ãã¯ãªãã¯ããã¾ãã");
break;
case "delete":
log("åé¤ãã¯ãªãã¯ããã¾ãã");
break;
default:
log("éããã¨ãã®å¤: ", dialog.returnValue);
}
});
çµæ
æè¡çæ¦è¦
| ã³ã³ãã³ãã«ãã´ãªã¼ | ããã¼ã³ã³ãã³ãã è¨è¿°ã³ã³ãã³ãã 対話åã³ã³ãã³ãã ãªã¹ãåã ã©ãã«ä»ãå¯è½ã éä¿¡å¯è½ 㪠ãã©ã¼ã é¢é£è¦ç´ ãç¥è¦å¯è½ã³ã³ãã³ã |
|---|---|
| 許å¯ããã¦ããå 容 |
è¨è¿°ã³ã³ãã³ããä½ã対話åã³ã³ãã³ãããã£ã¦ã¯ãªããªãããã® <button> ãã«ã¹ã¿ãã¤ãºå¯è½ãª select è¦ç´ ã®æåã®åã§ããå ´åã0 åã¾ã㯠1 åã® <selectedcontent> è¦ç´ ãå«ããã¨ãã§ããã
|
| ã¿ã°ã®çç¥ | ãªããéå§ã¿ã°ã¨çµäºã¿ã°ã®ä¸¡æ¹ãå¿ é ã§ãã |
| 許å¯ããã¦ãã親è¦ç´ | è¨è¿°ã³ã³ãã³ããåãå ¥ãããã¹ã¦ã®è¦ç´ ã |
| æé»ã® ARIA ãã¼ã« |
button
|
| 許å¯ããã¦ãã ARIA ãã¼ã« |
checkbox, combobox,
link, menuitem,
menuitemcheckbox,
menuitemradio, option,
radio, switch,
tab
|
| DOM ã¤ã³ã¿ã¼ãã§ã¤ã¹ | HTMLButtonElement |
仿§æ¸
| 仿§æ¸ |
|---|
| HTML > # the-button-element > |