ãªãµã¤ãºãªãã¶ã¼ãã¼ API
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2020å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
ãªãµã¤ãºãªãã¶ã¼ãã¼ API ã¯è¦ç´ ã®ãµã¤ãºå¤åãç£è¦ããå¤åãããã³ã«ãªãã¶ã¼ãã¼ã«å ±åã§ãããå®è¡å¯è½ãªæ¹æ³ãæä¾ãã¾ãã
æ¦å¿µã¨ä½¿ãæ¹
è¦ç´ ã®ãµã¤ãºã®å¤åãæ¤åºããæ¹æ³ (ããã®ã»ãã®ææ³) ã¯ããããããã¾ãããããã¾ã§ã®å®è£ ã¯ããã¯çã§èå¼±ãªãã¨ãããããã¾ããã
ä¾ãã°ã ã¡ãã£ã¢ã¯ã¨ãªã¼ / window.matchMedia ã¯ãã¥ã¼ãã¼ãã®ãµã¤ãºã®å¤åãæ¤åºããã¨ãã«ç¹å®ã®ç®æã«å¯¾ãã¦ã¬ã¤ã¢ã¦ãæ´æ°ãè¡ãå ´åã«æé©ã§ããããããç¹å®ã®è¦ç´ ã®ãµã¤ãºã®å¤æ´ãæ¤åºãããå ´åã¯ã©ãããã°ããã§ããããï¼
ãã®åé¡ã解決ããããã«ããµã¤ãºã®å¤åãæ¤åºããããè¦ç´ ã示åããé©åãªã¤ãã³ã ( Window: resize ã¤ãã³ã ãªã©) ã§ç£è¦ãã Element.getBoundingClientRect ã Window.getComputedStyle ãªã©ã使ç¨ãã¦è¦ç´ ã®æ°ãããµã¤ãºããã®ä»ã®ç¹å¾´ãæ¢ãåºãæ¹æ³ãèãããã¾ãã
ãã®ãããªæ¹æ³ã§ã¯ãéãããã¦ã¼ã¹ã±ã¼ã¹ã§ããæ©è½ãããããã©ã¼ãã³ã¹é¢ã§ãæªå½±é¿ããã (ä¸è¨ã®ã¡ã½ãããé£ç¶çã«å¼ã³åºãã¨å¤§ããªããã©ã¼ãã³ã¹ä½ä¸ã«ã¤ãªãã) ããã©ã¦ã¶ã¼ã®ã¦ã¤ã³ãã¦ãµã¤ãºãå¤ãããªãã¨æ©è½ããªããã¨ãå¤ãå¾åãããã¾ãã
Resize Observer API ã§ã¯ããã®ãããªåé¡ã«å¯¾ãã解決çãæä¾ããä»ãè¦ç´ ã®å 容ããã¼ãã¼ããã¯ã¹ã®ãµã¤ãºã®å¤åã¾ã§ãç°¡åã«ç£è¦ããå®è¡ã§ããããã«ãã¾ããããã¯ã¦ã§ããã©ãããã©ã¼ã ã§ãã°ãã°è°è«ããã¦ãã è¦ç´ ã¯ã¨ãªã¼ ã®æ¬ å¦ã«å¯¾ãã解決çã¨ãã¦æä¾ãã¾ãã
ä½¿ãæ¹ã¯ç°¡åã§ãããã©ã¼ãã³ã¹ãªãã¶ã¼ãã¼ã交差ãªãã¶ã¼ãã¼ãªã©ãä»ã®ãªãã¶ã¼ãã¼ã¨ã»ã¨ãã©åãã§ããæ°ãã ResizeObserver ãªãã¸ã§ã¯ãã ResizeObserver() ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ä½æã§ãã¾ãã ResizeObserver.observe() ã§ç¹å®ã®è¦ç´ ã®ãµã¤ãºã®å¤æ´ãæ¤åºããããã«ãã¾ããã³ã¼ã«ããã¯é¢æ°ã¯ã³ã³ã¹ãã©ã¯ã¿ã¼ã®ä¸ã§è¨å®ããè¦ç´ ã®ãµã¤ãºãå¤ãããã³ã«æ¯åå®è¡ãããå¤åå¾ã®ãµã¤ãºãéãã¦èªç±ã«å®è¡ã§ããããã«ãªãã¾ãã
ã¤ã³ã¿ã¼ãã§ã¤ã¹
ResizeObserver-
æ°ãããªãã¶ã¼ãã¼ãç»é²ããè¦ç´ ã®ç£è¦ãéå§ãããã¯åæ¢ããæ©è½ãæä¾ãã¾ãã
ResizeObserverEntry-
ãµã¤ãºãå¤åãããåä¸ã®è¦ç´ ãè¨è¿°ããè¦ç´ ã¨ãã®æ°ãããµã¤ãºãèå¥ãã¾ãã
ä¾
GitHub ãªãã¸ããªã¼ã§ã¯ãããã¤ãç°¡åãªå®è£ ä¾ãããã¾ãã
- resize-observer-border-radius.html (ã½ã¼ã¹): ãã¥ã¼ãã¼ããµã¤ãºã«å¿ãã¦ãã¼ã»ã³ãå²åã®ãµã¤ãºã§è¡¨ç¤ºãããç·è²ã®ããã¯ã¹ã®ç°¡åãªå®è£
ä¾ããã¥ã¼ãã¼ããµã¤ãºãå¤åããã¨ãããã¯ã¹ã®è§ä¸¸ãããã¯ã¹ã®ãµã¤ãºã«å¿ãã¦å¤åãã¾ããããã
border-radiusã使ç¨ãã¦ãã¼ã»ã³ãå²åã§å®è£ ãããã¨ãã§ãã¾ãããè¦è¦ãããããªæ¥åå½¢ã®è§ä¸¸ãã§ãã¦ãã¾ãã¾ããä¸è¨ã®è§£æ±ºçã§ã¯ãããã¯ã¹ã®ãµã¤ãºã«å¿ãã¦ãµã¤ãºãå¤ããããããªè§ä¸¸ã表示ã§ãã¾ãã - resize-observer-text.html (ã½ã¼ã¹): ããã§ã¯ãã¹ã©ã¤ãã¼ã§èª¿æ´ããã¨å
é¨ã®
divè¦ç´ ã®ãµã¤ãºãå¤åãããªãµã¤ãºãªãã¶ã¼ãã¼ãéãã¦ãããã¼ã¨æç« ã®font-sizeã夿´ãã¾ããããã¯ãã¥ã¼ãã¼ãã¨ã¯é¢ä¿ãªãã¦ããè¦ç´ ã®ãµã¤ãºå¤æ´ãæ¤åºãã¦å®è¡ã§ãããã¨ã示ãã¦ãã¾ãã
é常ãã³ã¼ãã¯æ¬¡ã®ãããªãã¿ã¼ã³ã«å¾ãã¾ã (resize-observer-border-radius.html ããã®å¼ç¨)ã
const resizeObserver = new ResizeObserver((entries) => {
const calcBorderRadius = (size1, size2) =>
`${Math.min(100, size1 / 10 + size2 / 10)}px`;
for (const entry of entries) {
if (entry.borderBoxSize) {
entry.target.style.borderRadius = calcBorderRadius(
entry.borderBoxSize[0].inlineSize,
entry.borderBoxSize[0].blockSize,
);
} else {
entry.target.style.borderRadius = calcBorderRadius(
entry.contentRect.width,
entry.contentRect.height,
);
}
}
});
resizeObserver.observe(document.querySelector("div"));
仿§æ¸
| 仿§æ¸ |
|---|
| Resize Observer > # resize-observer-interface > |