ããããªã¼ãã¼ API ã¯ãä»ã®ãã¼ã¸ã³ã³ãã³ãã®ä¸ã«è¡¨ç¤ºããããããªã¼ãã¼ã³ã³ãã³ãã表示ããããã®ãæ¨æºçãªãä¸è²«æ§ã®ãããæè»ãªä»çµã¿ãéçºè ã«æä¾ãã¾ããããããªã¼ãã¼ã³ã³ãã³ãã¯ãHTML 屿§ãç¨ãã¦å®£è¨çã«ãã¾ã㯠JavaScript ãç¨ãã¦å¶å¾¡ãããã¨ãã§ãã¾ãããã®è¨äºã§ã¯ããã®æ©è½ã®ãã¹ã¦ã使ç¨ããããã®è©³ç´°ãªã¬ã¤ããæä¾ãã¾ãã
宣è¨çãªããããªã¼ãã¼ã®ä½ææãåç´ãªå½¢ã§ã¯ãããããªã¼ãã¼ã®ã³ã³ãã³ããå«ã HTML è¦ç´ ã« popover
屿§ã追å ããã°ãããããªã¼ãã¼ã使ããã¾ããã¾ããããããªã¼ãã¼ã¨ãã®ã³ã³ããã¼ã«ãé¢é£ä»ããããã« id
ãå¿
è¦ã§ãã
<div id="mypopover" popover>ããããªã¼ãã¼ã³ã³ãã³ã</div>
ã¡ã¢: å¤ãªãã§ popover
屿§ã追å ããã¨ã popover="auto"
ãè¨å®ããã®ã¨åãã«ãªãã¾ãã
ãã®å±æ§ã追å ããã¨ãdisplay: none
ããã®è¦ç´ ã«è¨å®ãããã¨ã§ããã¼ã¸èªã¿è¾¼ã¿æã«é表示ã«ãããã¨ãã§ãã¾ããããããªã¼ãã¼ã®è¡¨ç¤ºã»é表示ãåãæ¿ããã«ã¯ãããã¤ãã®å¶å¾¡ãã¿ã³ã追å ããå¿
è¦ãããã¾ãã<button>
ï¼ã¾ã㯠<input>
ã® type="button"
ï¼ã« popovertarget
屿§ããå¶å¾¡ããããããªã¼ãã¼ã® ID ãå¤ã¨ãã¦è¨å®ãããã¨ãããã¨ã«ãããããããªã¼ãã¼å¶å¾¡ãã¿ã³ã«è¨å®ãããã¨ãã§ãã¾ãã
<button popovertarget="mypopover">Toggle the popover</button>
<div id="mypopover" popover>Popover content</div>
æ¢å®ã§ã¯ããã¿ã³ã¯ãã°ã«ãã¿ã³ã«ãªã£ã¦ãã¾ããç¹°ãè¿ãæ¼ãã¨ãããããªã¼ãã¼ã®è¡¨ç¤ºã¨é表示ãåãæ¿ããã¾ãã
ãã®åä½ã夿´ãããå ´åã¯ã popovertargetaction
屿§ã使ç¨ãã¾ã - ãã㯠"hide"
ã"show"
ã"toggle"
ã®ä½ããã®å¤ãåãã¾ããä¾ãã°ã表示ãã¿ã³ã¨é表示ãã¿ã³ãå¥åã«ä½æããã«ã¯ã次ã®ããã«ãã¾ãã
<button popovertarget="mypopover" popovertargetaction="show">
Show popover
</button>
<button popovertarget="mypopover" popovertargetaction="hide">
Hide popover
</button>
<div id="mypopover" popover>Popover content</div>
åºæ¬çãªå®£è¨çããããªã¼ãã¼ã®ä¾ï¼ã½ã¼ã¹ï¼ã§ãä¸è¨ã®ã³ã¼ãçãã©ã®ããã«è¦ãããã確èªã§ãã¾ãã
ã¡ã¢: popovertargetaction
屿§ãçç¥ãããã¨ãå¶å¾¡ãã¿ã³ã§å®è¡ãããæ¢å®ã®ã¢ã¯ã·ã§ã³ã¯ "toggle"
ã«ãªãã¾ãã
ããããªã¼ãã¼ã表示ãããã¨ãdisplay: none
ãåé¤ããã¦æä¸ä½ã¬ã¤ã¤ã¼ã«é
ç½®ãããä»ã®ãã¹ã¦ã®ãã¼ã¸ã®ã³ã³ãã³ãã®ä¸ã«ç½®ãããããã«ãªãã¾ãã
ä¸è¨ã®ããã«ãããããªã¼ãã¼è¦ç´ ã« popover
ã¾ã㯠popover="auto"
ãè¨å®ããã¦ããå ´åããã®è¦ç´ ã¯èªåç¶æ
(auto state) ã§ããã¨è¨ãã¾ããèªåç¶æ
ã«ã¤ãã¦æ³¨æãã¹ãéè¦ãªåä½ã 2 ã¤ããã¾ãã
ã¡ã¢: popover="auto"
ããããªã¼ãã¼ã¯ãææ¸å
ã®ä»ã®è¦ç´ ã§ HTMLDialogElement.showModal()
ã Element.requestFullscreen()
ã®å¼ã³åºããæåããå ´åã«ãéãã¾ãããããããããã®ã¡ã½ããã表示ããã¦ããããããªã¼ãã¼ã«å¯¾ãã¦å¼ã³åºãã¨å¤±æãããã¨ã«çæãã¦ãã ãããããããç¾å¨è¡¨ç¤ºããã¦ããªã popover
屿§ãæã¤è¦ç´ ã«å¯¾ãã¦ãããã®ã¡ã½ãããå¼ã³åºããã¨ã¯ã§ãã¾ãã
èªåç¶æ ã¯ãä¸åº¦ã«åä¸ã®ããããªã¼ãã¼ã ãã示ãããå ´åã«æçãªæ©è½ã§ãã表示ããããã¥ã¼ããªã¢ã«ã® UI ã¡ãã»ã¼ã¸ãè¤æ°ãããã表示ãä¹±éã«ãªã£ã¦æ··ä¹±ããã®ãé¿ãããå ´åããæ°ããç¶æ ãååã®ç¶æ ã䏿¸ããããããªã¹ãã¼ã¿ã¹ã¡ãã»ã¼ã¸ã表示ããå ´åãªã©ã«å©ç¨ã§ãã¾ãã
ä¸è¨ã®ãããªåä½ã¯ãè¤æ°ã®èªåããããªã¼ãã¼ã®ä¾ï¼ã½ã¼ã¹ï¼ã§å®éã«è¦ããã¨ãã§ãã¾ããããããªã¼ãã¼ã表示ããå¾ã«ç°¡åã«è§£é¤ãã¦ã¿ã¦ãåæã«ä¸¡æ¹ã表示ãããã¨ããã¨ãã«ã©ããªãããè¦ã¦ã¿ã¾ãããã
æåã®ããããªã¼ãã¼ç¶æ ã®ä½¿ç¨èªåç¶æ
ã®ã»ãã«ãæåç¶æ
ããããããã¯ããããªã¼ãã¼è¦ç´ ã« popover="manual"
ãè¨å®ãããã¨ã§è¨å®ãããã¨ãã§ãã¾ãã
<div id="mypopover" popover="manual">Popover content</div>
ãã®ç¶æ ã§ã¯ã次ã®ããã«ãªãã¾ãã
ãã®åä½ã¯ãè¤æ°ã®æåããããªã¼ãã¼ã®ä¾ï¼ã½ã¼ã¹ï¼ã§ç¢ºèªãããã¨ãã§ãã¾ãã
JavaScript ã§ããããªã¼ãã¼ã表示JavaScript API ã使ç¨ãã¦ããããªã¼ãã¼ãå¶å¾¡ãããã¨ãã§ãã¾ãã
HTMLElement.popover
ããããã£ã使ç¨ãã¦ãpopover
屿§ãåå¾ãããè¨å®ããããããã¨ãã§ãã¾ããããã使ç¨ã㦠JavaScript ã§ããããªã¼ãã¼ã使ãããã¨ãã§ããæ©è½æ¤åºã«ãå©ç¨ã§ãã¾ããä¾ãã°ãã®ããã«ãªãã¾ãã
function supportsPopover() {
return HTMLElement.prototype.hasOwnProperty("popover");
}
åæ§ã«ã
HTMLButtonElement.popoverTargetElement
㨠HTMLInputElement.popoverTargetElement
㯠popovertarget
屿§ã«ç¸å½ããããããªã¼ãã¼ã«å¯¾ããå¶å¾¡ãã¿ã³ã®è¨å®ãè¡ããã¨ãã§ãã¾ãããããããã£å¤ã¨ãã¦ã¯å¶å¾¡ãã¹ãããããªã¼ãã¼ã® DOM è¦ç´ ã®åç
§ãåãã¾ããHTMLButtonElement.popoverTargetAction
㨠HTMLInputElement.popoverTargetAction
㯠HTML 㮠popovertargetaction
ã°ãã¼ãã«å±æ§ã«ç¸å½ããå¶å¾¡ãã¿ã³ãããããã¢ã¯ã·ã§ã³ãæå®ãããã¨ãã§ããããã«ãã¾ãããã® 3 ã¤ãçµã¿åãããã¨ã次ã®ããã«ããããªã¼ãã¼ã¨ãã®å¶å¾¡ãã¿ã³ãããã°ã©ã çã«è¨å®ãããã¨ãã§ãã¾ãã
const popover = document.getElementById("mypopover");
const toggleBtn = document.getElementById("toggleBtn");
const keyboardHelpPara = document.getElementById("keyboard-help-para");
const popoverSupported = supportsPopover();
if (popoverSupported) {
popover.popover = "auto";
toggleBtn.popoverTargetElement = popover;
toggleBtn.popoverTargetAction = "toggle";
} else {
toggleBtn.style.display = "none";
}
ã¾ãã表示ã»é表示ãå¶å¾¡ããããã«ããã¤ãã®ã¡ã½ãããããã¾ãã
HTMLElement.showPopover()
ã§ããããªã¼ãã¼ã表示ãã¾ããHTMLElement.hidePopover()
ã§ããããªã¼ãã¼ãé表示ã«ãã¾ããHTMLElement.togglePopover()
ã§ããããªã¼ãã¼ããã°ã«åãæ¿ããã¾ããä¾ãã°ããã¿ã³ãã¯ãªãã¯ãããããã¼ãã¼ãã®ç¹å®ã®ãã¼ãæ¼ããããããã¨ã§ãããããªã¼ãã¼ã®ãªã³/ãªãã®åãæ¿ããæ¯æ´ããæ©è½ãæä¾ãããå ´åãããã¾ããæåã®ãã®ã¯å®£è¨çã«å®ç¾ã§ãã¾ãããä¸ã«ç¤ºããããã« JavaScript ã使ç¨ãã¦å®ç¾ãããã¨ãã§ãã¾ãã
2 ã¤ç®ã«ã¤ãã¦ã¯ãããããªã¼ãã¼ãéãããã®ãã¼ã¨éããããã®ãã¼ã® 2 ã¤ãããã°ã©ã ããã¤ãã³ããã³ãã©ã¼ã使ãããã¨ãã§ãã¾ãã
document.addEventListener("keydown", (event) => {
if (event.key === "h") {
if (popover.matches(":popover-open")) {
popover.hidePopover();
}
}
if (event.key === "s") {
if (!popover.matches(":popover-open")) {
popover.showPopover();
}
}
});
ãã®ä¾ã§ã¯ãElement.matches()
ã使ç¨ãã¦ãããããªã¼ãã¼ãç¾å¨è¡¨ç¤ºããã¦ãããã©ãããããã°ã©ã ã§èª¿ã¹ã¦ãã¾ãã:popover-open
æ¬ä¼¼ã¯ã©ã¹ã¯ãç¾å¨è¡¨ç¤ºããã¦ããããããªã¼ãã¼ã ãã«ä¸è´ãã¾ããããã¯ããã§ã«è¡¨ç¤ºããã¦ããããããªã¼ãã¼ã表示ãããã¨ãããããã§ã«é表示ã«ãªã£ã¦ããããããªã¼ãã¼ãé表示ã«ãããã¨ããã¨ãã«çºçããã¨ã©ã¼ãé¿ããããã«éè¦ã§ãã
å¥ã®æ¹æ³ã¨ãã¦ã次ã®ããã«åä¸ã®ãã¼ã§ããããªã¼ãã¼ã®è¡¨ç¤ºã¨é表示ãããã°ã©ã ãããã¨ãã§ãã¾ãã
document.addEventListener("keydown", (event) => {
if (event.key === "h") {
popover.togglePopover();
}
});
JavaScript ã®ããããªã¼ãã¼ã®ããããã£ãæ©è½æ¤åºã`togglePopover()' ã¡ã½ããã®åä½ã¯ããã°ã«ãã«ã UI ã®ä¾ï¼ã½ã¼ã¹ï¼ãã覧ãã ããã
ã¿ã¤ãã¼ã«ããããããªã¼ãã¼ã®èªåè§£é¤ããä¸ã¤ãJavaScript ã§ãããããã¿ã¼ã³ããä¸å®ã®æå»ãçµéããã¨èªåçã«ããããªã¼ãã¼ãè§£é¤ãããã¨ã§ããä¾ãã°ãä¸åº¦ã«è¤æ°ã®ã¢ã¯ã·ã§ã³ï¼ä¾ãã°è¤æ°ã®ãã¡ã¤ã«ã®ã¢ãããã¼ããªã©ï¼ããããããããã®ã¢ã¯ã·ã§ã³ãæåã¾ãã¯å¤±æããã¨ãã«éç¥ã示ãããã¼ã¹ããéç¥ã®ã·ã¹ãã ã使ãããå ´åãããã¾ãããã®å ´åãæåããããªã¼ãã¼ã使ç¨ãã¦ãè¤æ°ã®ã¢ã¯ã·ã§ã³ãåæã«ç¤ºããsetTimeout()
ã使ç¨ãã¦è§£é¤ã§ããããã«ãããã¨ãã¾ãããã®ãããªããããªã¼ãã¼ãå¦çãã颿°ã¯æ¬¡ã®ãããªãã®ã§ãã
function makeToast(result) {
const popover = document.createElement("article");
popover.popover = "manual";
popover.classList.add("toast");
popover.classList.add("newest");
let msg;
if (result === "success") {
msg = "Action was successful!";
popover.classList.add("success");
successCount++;
} else if (result === "failure") {
msg = "Action failed!";
popover.classList.add("failure");
failCount++;
} else {
return;
}
popover.textContent = msg;
document.body.appendChild(popover);
popover.showPopover();
updateCounter();
setTimeout(() => {
popover.hidePopover();
popover.remove();
}, 4000);
}
ã¾ããbeforetoggle
ã¤ãã³ãã使ç¨ãã¦ãããããªã¼ãã¼ã表示ããããé表示ã«ãªã£ããããå¾ã«ç¶ãåä½ãããããã¨ãã§ãã¾ãããã®ä¾ã§ã¯ãmoveToastsUp()
颿°ãå®è¡ãã¦ãæ°ãããã¼ã¹ããç¾ãããã³ã«ããã¼ã¹ãããã¹ã¦ç»é¢ã®å
å´ã¸ç§»åãã¦ãå ´æã確ä¿ããããã«ãã¦ãã¾ãã
popover.addEventListener("toggle", (event) => {
if (event.newState === "open") {
moveToastsUp();
}
});
function moveToastsUp() {
const toasts = document.querySelectorAll(".toast");
toasts.forEach((toast) => {
if (toast.classList.contains("newest")) {
toast.style.bottom = `5px`;
toast.classList.remove("newest");
} else {
const prevValue = toast.style.bottom.replace("px", "");
const newValue = parseInt(prevValue) + 50;
toast.style.bottom = `${newValue}px`;
}
});
}
ä¸è¨ã®ä¾ã®ã¹ãããããå®éã«ä½¿ããã¦ããæ§åã¯ããã¼ã¹ãããããªã¼ãã¼ã®ä¾ï¼ã½ã¼ã¹ï¼ãã覧ãã ãããã¾ãã説æã®ããã®ã³ã¡ã³ããå å®ãã¦ãã¾ãã
å ¥ãåã®ããããªã¼ãã¼è¤æ°ã®ãªã¼ãããããªã¼ãã¼ãä¸åº¦ã«è¡¨ç¤ºããªãã¨ããã«ã¼ã«ã«ã¯ãä¾å¤ãããã¾ããäºãã«å ¥ãåã«ãªã£ã¦ããå ´åã§ãããããã®å ´åãè¤æ°ã®ããããªã¼ãã¼ã¯ãäºãã®é¢ä¿ãããåæã«éããã¨ã許å¯ããã¾ãããã®ãã¿ã¼ã³ã¯ãå ¥ãåå¼ããããªã¼ãã¼ã¡ãã¥ã¼ã®ãããªç¨éã«å½¹ç«ã¡ã¾ãã
å ¥ãåã®ããããªã¼ãã¼ã使ããæ¹æ³ã¯ã3 ã¤ããã¾ãã
DOM ã§ã®ç´æ¥ã®åå«ã«ãã
<div popover>
親
<div popover>å</div>
</div>
è¦ç´ ãå¼ã³åºã/å¶å¾¡
<div popover>
親
<button popovertarget="foo">ãã¡ããã¯ãªãã¯</button>
</div>
<div popover id="foo">å</div>
anchor
屿§ã«ãã
<div popover id="foo">親</div>
<div popover anchor="foo">å</div>
ä¾ã°ãå ¥ãåã¡ãã¥ã¼ã®ä¾ï¼ã½ã¼ã¹ï¼ãåç §ãã¦ãã ããããã¦ã¹ããã¼ãã¼ãã®æä½ã§ãµãããããªã¼ãã¼ãé©åã«è¡¨ç¤ºã»é表示ãåãæ¿ãããããã¾ããã©ã¡ããã®ãªãã·ã§ã³ã鏿ãããã¨ãã«ä¸¡æ¹ã®ã¡ãã¥ã¼ãé表示ã«ããããã«ãããã¤ãã®ã¤ãã³ããã³ãã©ã¼ã使ç¨ããã¦ãããã¨ããããã¾ããSPA ãè¤æ°ãã¼ã¸ã®ã¦ã§ããµã¤ãã§ã¯ãæ°ããã³ã³ãã³ãã®èªã¿è¾¼ã¿ãã©ã®ããã«å¦çãããã«ãã£ã¦ããããã®ãã¡ã®ããã¤ãã¯å¿ è¦ãªãããããã¾ãããããã®ãã¢ã§ã¯èª¬æã®ããã«å«ãã¦ãã¾ãã
ããããªã¼ãã¼ã®ã¹ã¿ã¤ã«ä»ãããããªã¼ãã¼ API ã¯ã注ç®ã«å¤ããããã¤ãã®é¢é£ãã CSS æ©è½ãå©ç¨å¯è½ã§ããã
å®éã®ããããªã¼ãã¼ã®ã¹ã¿ã¤ã«è¨å®ã§ã¯ãåç´ãªå±æ§ã»ã¬ã¯ã¿ã¼ ([popover]
) ã§ãã¹ã¦ã®ããããªã¼ãã¼ã鏿ããããæ°ããæ¬ä¼¼ã¯ã©ã¹ã:popover-open
ã使ç¨ãã¦éãããã®ããããªã¼ãã¼ã鏿ãããã¨ãå¯è½ã§ãã
è¨äºã®å§ãã«ãªã³ã¯ããæåã® 2ã3 ã®ä¾ãè¦ã¦ãããããªã¼ãã¼ããã¥ã¼ãã¼ãã®ä¸å¤®ã«ç¾ãã¦ãããã¨ã«æ°ã¥ããããããã¾ãããããã¯æ¢å®ã®ã¹ã¿ã¤ã«è¨å®ã§ãããUA ã¹ã¿ã¤ã«ã·ã¼ãã§ãã®ããã«å®ç¾ããã¦ãã¾ãã
[popover] {
position: fixed;
inset: 0;
width: fit-content;
height: fit-content;
margin: auto;
border: solid;
padding: 0.25em;
overflow: auto;
color: CanvasText;
background-color: Canvas;
}
æ¢å®ã®ã¹ã¿ã¤ã«è¨å®ã䏿¸ããã¦ããã¥ã¼ãã¼ãä¸ã®ä»ã®å ´æã«ããããªã¼ãã¼ãç¾ããããã«ããã«ã¯ãä¸è¨ã®ã¹ã¿ã¤ã«ã次ã®ããã«ä¸æ¸ãããå¿ è¦ãããã¾ãã
:popover-open {
width: 200px;
height: 100px;
position: absolute;
inset: unset;
bottom: 5px;
right: 5px;
margin: 0;
}
ããããªã¼ãã¼ã®ä½ç½®æå®ã®ä¾ï¼ã½ã¼ã¹ï¼ã§ããã®ç¬ç«ããä¾ãè¦ããã¨ãã§ãã¾ãã
::backdrop
æ¬ä¼¼è¦ç´ ã¯ãæä¸ä½ã¬ã¤ã¤ã¼ã«ããããããªã¼ãã¼è¦ç´ ã®ããå¾ãã«é
ç½®ãããå
¨ç»é¢è¦ç´ ã§ãå¿
è¦ã«å¿ãã¦ããããªã¼ãã¼ã®å¾ãã®ãã¼ã¸ã³ã³ãã³ãã«å¹æã追å ãããã¨ãã§ããããã«ãã¾ããä¾ ãã°ãã¦ã¼ã¶ã¼ã®æ³¨æãããããªã¼ãã¼ã«éä¸ãããããã«ãããããªã¼ãã¼ã®å¾ãã®ã³ã³ãã³ããã¼ããããå ´åãããã¾ãã
::backdrop {
backdrop-filter: blur(3px);
}
ãããã©ã®ããã«æç»ããããã¨ããèãã«ã¤ãã¦ã¯ãããããªã¼ãã¼ã®èæ¯ãã¼ããä¾ï¼sourceï¼ãåç §ãã¦ãã ããã
ããããªã¼ãã¼ã®ã¢ãã¡ã¼ã·ã§ã³ããããªã¼ãã¼ã¯æä¸ä½ã¬ã¤ã¤ã¼ã¨ã¢ã¯ã»ã·ããªãã£ããªã¼ããé¤å»ãããã追å ããããããã ãã§ãªããé表示æã«ã¯ display: none;
ã表示æã«ã¯ display: block;
ã«è¨å®ããã¾ãããããã£ã¦ãããããªã¼ãã¼ãã¢ãã¡ã¼ã·ã§ã³ãããã«ã¯ã display
ããããã£ãã¢ãã¡ã¼ã·ã§ã³å¯è½ã«ããå¿
è¦ãããã¾ãã対å¿ãã¦ãããã©ã¦ã¶ã¼ã§ã¯ãdisplay
ã颿£ã¢ãã¡ã¼ã·ã§ã³åã®å¤å½¢ã§ã¢ãã¡ã¼ã·ã§ã³ããã¾ããå
·ä½çã«ã¯ããã©ã¦ã¶ã¼ã¯ã¢ãã¡ã¼ã·ã§ã³ã®åçæéå
¨ä½ã«ããã£ã¦ã³ã³ãã³ãã表示ãããããã«ã none
㨠display
ã®ä»ã®å¤ãåãæ¿ãã¾ããä¾ãã°ã次ã®ããã«ãªãã¾ãã
display
ã none
ãã block
ï¼ã¾ãã¯ä»ã®è¡¨ç¤ºå¯è½ãª display
å¤ï¼ã«ã¢ãã¡ã¼ã·ã§ã³ãããå ´åãå¤ã¯ã¢ãã¡ã¼ã·ã§ã³æéã® 0%
ã§ block
ã«åãæ¿ããããã£ã¨è¡¨ç¤ºããã¾ããdisplay
ã block
ï¼ã¾ãã¯ä»ã®è¡¨ç¤ºå¯è½ãª display
å¤ï¼ãã none
ã«ã¢ãã¡ã¼ã·ã§ã³ãããå ´åãå¤ã¯ã¢ãã¡ã¼ã·ã§ã³æéã® 100%
ã§ none
ã«åãæ¿ããããã£ã¨è¡¨ç¤ºããã¾ããã¡ã¢: CSS ãã©ã³ã¸ã·ã§ã³ã使ç¨ãã¦ã¢ãã¡ã¼ã·ã§ã³ãè¡ãå ´åãä¸è¨ã®åä½ãæå¹ã«ããã«ã¯ transition-behavior: allow-discrete
ãè¨å®ããå¿
è¦ãããã¾ãã CSS ã¢ãã¡ã¼ã·ã§ã³ã§ã¢ãã¡ã¼ã·ã§ã³ãããå ´åãæ¢å®ã§ã¯ä¸è¨ã®åä½ãå©ç¨ã§ãã¾ãã
CSSã®ãã©ã³ã¸ã·ã§ã³ã§ããããªã¼ãã¼ãã¢ãã¡ã¼ã·ã§ã³ãããå ´åã以ä¸ã®æ©è½ãå¿ è¦ã§ãã
@starting-style
ã¢ããã«ã¼ã«
ããããªã¼ãã¼ãæåã«è¡¨ç¤ºãããã¨ãã«ãã©ã³ã¸ã·ã§ã³ãããããããããªã¼ãã¼ã«è¨å®ããããããã£ã®éå§å¤ã®ã»ãããæä¾ãã¾ããããã¯äºæããªãåä½ãé¿ããããã«å¿
è¦ã§ããæ¢å®ã§ã¯ã CSS ã®ãã©ã³ã¸ã·ã§ã³ã¯å¯è¦è¦ç´ ã§ããããã£ãããå¤ããå¥ã®å¤ã«å¤æ´ãããã¨ãã®ã¿çºçãã¾ããè¦ç´ ã®æåã®ã¹ã¿ã¤ã«æ´æ°æã display
åã none
ããå¥ã®åã«å¤æ´ãããã¨ãã«ã¯çºçãã¾ããã
display
ããããã£
ãã©ã³ã¸ã·ã§ã³ã®ãªã¹ãã« display
ã追å ãã¦ãããããªã¼ãã¼ããã©ã³ã¸ã·ã§ã³ã®åçæéã®éãdisplay: block
ï¼ã¾ãã¯ä»ã®è¡¨ç¤ºå¯è½ãª display
å¤ï¼ã¨ãã¦æ®ããä»ã®ãã©ã³ã¸ã·ã§ã³ã確å®ã«è¡¨ç¤ºãããããã«ãã¾ãã
overlay
ããããã£
ãã©ã³ã¸ã·ã§ã³ã®ãªã¹ãã« overlay
ãè¨è¿°ãã¦ãæä¸ä½ã¬ã¤ã¤ã¼ããã®ããããªã¼ãã¼ã®é¤å»ããã©ã³ã¸ã·ã§ã³ãå®å
¨ã«å®äºããã¾ã§ç¢ºå®ã«å»¶æãããã©ã³ã¸ã·ã§ã³ã確å®ã«è¡¨ç¤ºãããããã«ãã¾ãã
transition-behavior
ããããã£
transition-behavior:allow-discrete
ã display
㨠overlay
ã®ãã©ã³ã¸ã·ã§ã³ï¼ã¾ãã¯ä¸æ¬æå®ã® transition
ï¼ã«è¨å®ããæ¢å®ã§ã¯ã¢ãã¡ã¼ã·ã§ã³ä¸å¯è½ãªããã 2 ã¤ã®ããããã£ã®é¢æ£ãã©ã³ã¸ã·ã§ã³ãæå¹ã«ãã¾ãã
ãã®ä¾ãã©ã®ããã«è¦ãããã®ããè¦ã¦ããã¾ãããã
HTMLãã® HTML ã§ã¯ã <div>
è¦ç´ ãããããªã¼ãã¼ã«ãªããããã°ãã¼ãã«å±æ§ã® popover
ã§å®£è¨ããã¦ããã <button>
è¦ç´ ãããããªã¼ãã¼ã®è¡¨ç¤ºã³ã³ããã¼ã«ã¨ãã¦æå®ããã¦ãã¾ãã
<button popovertarget="mypopover">ããããªã¼ãã¼ã表示</button>
<div popover="auto" id="mypopover">ããããªã¼ãã¼ã§ããã¢ãã¡ã¼ã·ã§ã³ãã¾ãã</div>
CSS
ãã©ã³ã¸ã·ã§ã³ããããããããªã¼ãã¼ã®ããããã£ã¯ã opacity
㨠transform
ã® 2 ã¤ã§ããããããªã¼ãã¼ãæ°´å¹³æ¹åã«æ¡å¤§ã¾ãã¯ç¸®å°ããªãããã§ã¼ãã¤ã³ã¾ãã¯ãã§ã¼ãã¢ã¦ãããããã«ãã¾ãããããå®ç¾ããããã«ããããã®ããããã£ã®éå§ç¶æ
ãããããªã¼ãã¼è¦ç´ ã®éè¡¨ç¤ºç¶æ
ï¼[popover]
屿§ã»ã¬ã¯ã¿ã¼ã§é¸æï¼ã«è¨å®ããçµäºç¶æ
ãããããªã¼ãã¼ã®è¡¨ç¤ºç¶æ
ï¼:popover-open
æ¬ä¼¼ã¯ã©ã¹ã§é¸æï¼ã«è¨å®ãã¾ããã¾ãã transition
ããããã£ã使ç¨ãã¦ãããããªã¼ãã¼ã表示ããããé表示ã«ãªã£ããããã¨ãã«ã¢ãã¡ã¼ã·ã§ã³ããããããã£ã¨ã¢ãã¡ã¼ã·ã§ã³ã®åçæéãå®ç¾©ãã¾ãã
html {
font-family: Arial, Helvetica, sans-serif;
}
/* ããããªã¼ãã¼èªä½ã®ãã©ã³ã¸ã·ã§ã³ */
[popover]:popover-open {
opacity: 1;
transform: scaleX(1);
}
[popover] {
font-size: 1.2rem;
padding: 10px;
/* æ¶æ»
ã¢ãã¡ã¼ã·ã§ã³ã®æçµç¶æ
*/
opacity: 0;
transform: scaleX(0);
transition:
opacity 0.7s,
transform 0.7s,
overlay 0.7s allow-discrete,
display 0.7s allow-discrete;
/* transition: all 0.7s allow-discrete;
ã¨åç */
}
/* 詳細度ãåããªã®ã§ã广ãå¾ãã«ã¯ [popover]:popover-open ã«ã¼ã«ã®
å¾ã§ãªããã°ãªããªãã */
@starting-style {
[popover]:popover-open {
opacity: 0;
transform: scaleX(0);
}
}
/* ããããªã¼ãã¼ã®èæ¯ã®ãã©ã³ã¸ã·ã§ã³ */
[popover]::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;
ã¨åç */
}
[popover]:popover-open::backdrop {
background-color: rgb(0 0 0 / 25%);
}
/* å
¥ãåã»ã¬ã¯ã¿ã¼ (&) ã¯æ¬ä¼¼è¦ç´ ã表ããã¨ãã§ããªãã®ã§ã
ãã®åºç¾ã¹ã¿ã¤ã«ã«ã¼ã«ã¯å
¥ãåã«ã§ããªã */
@starting-style {
[popover]:popover-open::backdrop {
background-color: rgb(0 0 0 / 0%);
}
}
åã«èª¬æããã¨ãããæ¬¡ã®ãã¨ãè¡ãå¿ è¦ãããã¾ãã
transition
ã @starting-style
ãããã¯å
ã«è¨å®ãã¾ããdisplay
ã追å ããããããªã¼ãã¼ã®åºç¾ã»æ¶æ»
ã¢ãã¡ã¼ã·ã§ã³ãéãã¦ãã¢ãã¡ã¼ã·ã§ã³ããè¦ç´ ãè¦ããï¼display: block
ã«è¨å®ããï¼ããã«ãã¾ãããããããªããã°ãçµäºã¢ãã¡ã¼ã·ã§ã³ã¯è¡¨ç¤ºããã¾ãããçµæçã«ãããããªã¼ãã¼ã¯ãã æ¶ãã¦ãã¾ãã¾ããoverlay
ã追å ããã¢ãã¡ã¼ã·ã§ã³ãå®äºããã¾ã§æä¸ä½ã¬ã¤ã¤ã¼ããã®è¦ç´ ã®é¤å»ãå»¶æãããããã«ãã¾ãããã®å¹æã¯ããã®ãããªåºæ¬çãªã¢ãã¡ã¼ã·ã§ã³ã§ã¯æ°ã«ãªããªãããããã¾ããããããè¤éãªã±ã¼ã¹ã§ã¯ããã®ããããã£ãçç¥ããã¨ããã©ã³ã¸ã·ã§ã³ã®å®äºåã«è¦ç´ ããªã¼ãã¼ã¬ã¤ããé¤å»ããã¦ãã¾ãå¯è½æ§ãããã¾ããallow-discrete
ãè¨å®ãã颿£ãã©ã³ã¸ã·ã§ã³ãã§ããããã«ãã¾ããã¾ããéãããã®ããããªã¼ãã¼ã®èå¾ã«ç¾ãã ::backdrop
ã«ãã©ã³ã¸ã·ã§ã³ãè¨è¿°åãæããªãã¢ãã¡ã¼ã·ã§ã³ãæå®ãã¦ãããã¨ã«æ³¨æãã¦ãã ããã
ãã®ã³ã¼ãã¯æ¬¡ã®ããã«è¡¨ç¤ºããã¾ãã
ã¡ã¢: ããããªã¼ãã¼ã¯è¡¨ç¤ºããããã³ã« display: none
ãã display: block
ã«å¤ããã®ã§ãé
ç®ããã©ã³ã¸ã·ã§ã³ãããã³ã« @starting-style
ã¹ã¿ã¤ã«ãã [popover]:popover-open
ã¹ã¿ã¤ã«ã«ãã©ã³ã¸ã·ã§ã³ãã¾ããããããªã¼ãã¼ãéããããã¨ãã [popover]:popover-open
ç¶æ
ããæ¢å®ã® [popover]
ç¶æ
ã«ãã©ã³ã¸ã·ã§ã³ãã¾ãã
ãã®ãããªå ´åãåºç¾æã¨æ¶æ» æã®ã¹ã¿ã¤ã«è¨å®ãç°ãªãå½¢ã«ãããã¨ãå¯è½ã§ãããã®ãã¨ã®è¨¼æã«ã¤ãã¦ã¯ãéå§ã¹ã¿ã¤ã«ã使ç¨ããå ´åã®ãã¢ã®ä¾ãåç §ãã¦ãã ããã
ããããªã¼ãã¼ã®ãã¼ãã¬ã¼ã ã¢ãã¡ã¼ã·ã§ã³CSSãã¼ãã¬ã¼ã ã¢ãã¡ã¼ã·ã§ã³ã§ããããªã¼ãã¼ãã¢ãã¡ã¼ã·ã§ã³ãããå ´åãããã¤ã注æãã¹ãéããããã¾ãã
@starting-style
ãæä¾ããã®ã§ã¯ãªãããã¼ãã¬ã¼ã ã« "to" 㨠"from" ã® display
å¤ãè¨è¿°ãã¾ããallow-discrete
ã«ç¸å½ãããã®ã¯ããã¾ãããoverlay
ãè¨å®ããå¿
è¦ãããã¾ãããdisplay
ã¢ãã¡ã¼ã·ã§ã³ã¯ããããªã¼ãã¼ã®è¡¨ç¤ºããé表示ã¾ã§ã®ã¢ãã¡ã¼ã·ã§ã³ãå¦çãã¾ããä¾ãåç §ãã¦ãã ããã
HTMLHTML ã«ã¯ãããããªã¼ãã¼ã¨ãã¦å®£è¨ããã <div>
è¦ç´ ã¨ãããããªã¼ãã¼ã®è¡¨ç¤ºã³ã³ããã¼ã«ã¨ãã¦æå®ããã <button>
è¦ç´ ãããã¾ãã
<button popovertarget="mypopover">ããããªã¼ãã¼ã表示</button>
<div popover="auto" id="mypopover">ããããªã¼ãã¼ã§ããã¢ãã¡ã¼ã·ã§ã³ãã¾ãã</div>
CSS
å¿ è¦ãªåºç¾ã¢ãã¡ã¼ã·ã§ã³ã¨æ¶æ» ã¢ãã¡ã¼ã·ã§ã³ãæå®ãããã¼ãã¬ã¼ã ãå®ç¾©ããèæ¯ã¯åºç¾ã¢ãã¡ã¼ã·ã§ã³ã®ã¿ãå®ç¾©ãã¾ããèæ¯ããã§ã¼ãã¢ã¦ãããã¢ãã¡ã¼ã·ã§ã³ã¯ä¸å¯è½ã§ãããã¨ã«æ³¨æãã¦ãã ãã - èæ¯ã¯ããããªã¼ãã¼ãéããããã¨ãã« DOM ããå³åº§ã«é¤å»ããããããã¢ãã¡ã¼ã·ã§ã³ãããã®ã¯ããã¾ããã
html {
font-family: Arial, Helvetica, sans-serif;
}
[popover] {
font-size: 1.2rem;
padding: 10px;
animation: fade-out 0.7s ease-out;
}
[popover]:popover-open {
animation: fade-in 0.7s ease-out;
}
[popover]:popover-open::backdrop {
animation: backdrop-fade-in 0.7s ease-out forwards;
}
/* ã¢ãã¡ã¼ã·ã§ã³ã®ãã¼ãã¬ã¼ã */
@keyframes fade-in {
0% {
opacity: 0;
transform: scaleX(0);
}
100% {
opacity: 1;
transform: scaleX(1);
}
}
@keyframes fade-out {
0% {
opacity: 1;
transform: scaleX(1);
/* display ã¯ã¢ãã¡ã¼ã·ã§ã³ãçµäºããã¾ã§ããããªã¼ãã¼ã
表示ãç¶ããããã«å¿
è¦ */
display: block;
}
100% {
opacity: 0;
transform: scaleX(0);
/* display: none ã¯ããã§ã¯å¿
é ã§ã¯ãªããéããããããªã¼ãã¼ã®
æ¢å®å¤ã§ããããããã ããããã§ã¯åä½ãæç¢ºåããããã«å
¥ãã¦ãã */
display: none;
}
}
@keyframes backdrop-fade-in {
0% {
background-color: rgb(0 0 0 / 0%);
}
100% {
background-color: rgb(0 0 0 / 25%);
}
}
çµæ
ãã®ã³ã¼ãã¯æ¬¡ã®ããã«è¡¨ç¤ºããã¾ãã
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