CSS anchor() 颿°
Baseline
2026
Newly available
Since January 2026, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
anchor() 㯠CSS ã®é¢æ°ã§ãã¢ã³ã«ã¼ä½ç½®æå®è¦ç´ ã®ã¤ã³ã»ããããããã£å¤å
ã§ä½¿ç¨ãããã¨ãã§ããé¢é£ä»ããããã¢ã³ã«ã¼è¦ç´ ã®ç«¯ã®ä½ç½®ã«å¯¾ããé·ãã®å¤ãè¿ãã¾ãã
æ§æ
/* æ¹åã¨ãã¼ã»ã³ãå¤ */
top: anchor(bottom);
top: anchor(50%);
top: calc(anchor(bottom) + 10px)
inset-block-end: anchor(start);
/* ååä»ãã¢ã³ã«ã¼ã®æ¹å */
top: anchor(--my-anchor bottom);
inset-block-end: anchor(--my-anchor start);
/* 代æ¿ä»ãååä»ãã¢ã³ã«ã¼ã®æ¹å */
top: anchor(--my-anchor bottom, 50%);
inset-block-end: anchor(--my-anchor start, 200px);
left: calc(anchor(--my-anchor right, 0%) + 10px);
弿°
anchor() 颿°ã®æ§æã¯æ¬¡ã®éãã§ãã
anchor(<anchor-name> <anchor-side>, <length-percentage>)
弿°ã¯æ¬¡ã®éãã§ãã
<anchor-name>çç¥å¯-
ãã®è¦ç´ ã®ç«¯ã«ç¸å¯¾çã«é ç½®ãããã¢ã³ã«ã¼è¦ç´ ã®
anchor-nameããããã£ã®å¤ã§ããããã¯<dashed-ident>å¤ã§ããçç¥ãããå ´åã¯ããã®è¦ç´ ã®æ¢å®ã®ã¢ã³ã«ã¼ã§ãããã¯ãã®è¦ç´ ã®position-anchorããããã£ã§åç §ããã¦ãããã®ãã¾ãã¯ãã®è¦ç´ ã«é¢é£ä»ãããã HTML ã®anchor屿§ã使ç¨ããã¾ããã¡ã¢:
<anchor-name>ãanchor()颿°å ã§æå®ãã¦ããè¦ç´ ã¨ã¢ã³ã«ã¼ãé¢é£ä»ãããã¨ã¯ã§ããããã®ã¢ã³ã«ã¼ã«å¯¾ããè¦ç´ ã®ä½ç½®æå®ã®ã¿ã¨ãªãã¾ããé¢é£ä»ãã使ããã«ã¯ãCSS ã®position-anchorããããã£ã¾ã㯠HTML ã®anchor屿§ãå¿ è¦ã§ãã <anchor-side>-
ã¢ã³ã«ã¼ã®è¾ºãã¾ãã¯è¦ç´ ãä½ç½®æå®ããã
startã®è¾ºããã®ç¸å¯¾è·é¢ãæå®ãã¾ããanchor()ãè¨å®ããéã«ãã¤ã³ã»ããããããã£ã¨äºææ§ã®ãªãç©çå¤ã¾ãã¯è«çå¤ã使ç¨ãããå ´åã代æ¿å¤ã使ç¨ããã¾ãã æå¹ãªå¤ã¨ãã¦ã¯ã次ã®ãã®ãããã¾ããtop-
ãã®ã¢ã³ã«ã¼è¦ç´ ã®ä¸ç«¯ã§ãã
right-
ãã®ã¢ã³ã«ã¼è¦ç´ ã®å³ç«¯ã§ãã
bottom-
ãã®ã¢ã³ã«ã¼è¦ç´ ã®ä¸ç«¯ã§ãã
left-
ãã®ã¢ã³ã«ã¼è¦ç´ ã®å·¦ç«¯ã§ãã
inside-
ã¤ã³ã»ããããããã£ã¨åãå´ã®ç«¯ã§ãã
outside-
ã¤ã³ã»ããããããã£ã¨å対å´ã®ç«¯ã§ãã
start-
ã¢ã³ã«ã¼è¦ç´ ã®å å«ãããã¯ã®ããã®
anchor()颿°ãè¨å®ããã¦ããã¤ã³ã»ããããããã£ã®è»¸ã®è«ççãªå é å´ã§ãã end-
ã¢ã³ã«ã¼è¦ç´ ã®å å«ãããã¯ã®ããã®
anchor()颿°ãè¨å®ããã¦ããã¤ã³ã»ããããããã£ã®è»¸ã®è«ççãªæ«å°¾å´ã§ãã self-start-
ã¢ã³ã«ã¼è¦ç´ ã®ã³ã³ãã³ãã®ããã®
anchor()颿°ãè¨å®ããã¦ããã¤ã³ã»ããããããã£ã®è»¸ã®è«ççãªå é å´ã§ãã self-end-
ã¢ã³ã«ã¼è¦ç´ ã®ã³ã³ãã³ãã®ããã®
anchor()颿°ãè¨å®ããã¦ããã¤ã³ã»ããããããã£ã®è»¸ã®è«ççãªæ«å°¾å´ã§ãã center-
ãã®
anchor()颿°ãè¨å®ããã¦ããã¤ã³ã»ããããããã£ã®è»¸ã®ä¸å¤®ã§ãã <percentage>-
ãã®
anchor()颿°ãè¨å®ããã¦ããã¤ã³ã»ããããããã£ã®è»¸ã®å é ããã®è·é¢ããã¼ã»ã³ãå¤ã§æå®ãã¾ãã
<length-percentage>çç¥å¯-
anchor()颿°ãæå¹ã§ãªãå ´åã«ã颿°ã解決ãã¹ã代æ¿å¤ãæå®ãã¾ãã
è¿å¤
<length> å¤ãè¿ãã¾ãã
解説
anchor() 颿°ã«ãããã¢ã³ã«ã¼è¦ç´ ã®è¾ºã«é¢é£ããè¦ç´ ã®ä½ç½®æå®ããããã¨ãã§ãã¾ããããã¯ã絶対ä½ç½®æå®ã¾ãã¯åºå®ä½ç½®æå®è¦ç´ ã«è¨å®ãããã¤ã³ã»ããããããã£å¤ã§ã®ã¿æå¹ã§ãã
ãã㯠<length> å¤ã§ãã¤ã³ã»ããå¤ã§æå®ãããã¢ã³ã«ã¼é
ç½®è¦ç´ å´ã¨ã鏿ããã <anchor-side> å¤ã§æå®ãããã¢ã³ã«ã¼è¦ç´ å´ã¨ã®éã®è·é¢ãæå®ããå¤ãè¿ãã¾ãã <length> ãè¿ããããé·ãã®å¤ãåãå
¥ããä»ã® CSS 颿°å
ãä¾ãã° calc()ãclamp() ãªã©ã§ä½¿ç¨ãããã¨ãã§ãã¾ãã
<anchor-name> ã§æå®ãããååãã¤ããã¢ã³ã«ã¼ãåå¨ããªãå ´åãã¾ãã¯ãä½ç½®æå®è¦ç´ ã«ï¼position-anchor ããããã£ãä»ãã¦ï¼é¢é£ä»ããããã¢ã³ã«ã¼ããªãå ´åãæåã®å¼æ°ã¯ä¸æ£ãªãã®ã¨è¦ãªãããå©ç¨ã§ããå ´åã¯ã代æ¿ã® <length-percentage> å¤ã使ç¨ããã¾ããä¾ãã°ãä½ç½®æå®è¦ç´ ã« top: anchor(bottom, 50px) ãæå®ããã¦ãããã®ã®ããã®è¦ç´ ã«é¢é£ä»ããããã¢ã³ã«ã¼ããªãã£ãå ´åã代æ¿å¤ã使ç¨ãããããã top 㯠50px ã¨ããè¨ç®å¤ã«ãªãã¾ãã
ã¢ã³ã«ã¼æ©è½ããã³ä½¿ç¨æ¹æ³ã®è©³ç´°ã«ã¤ãã¦ã¯ã CSS ã¢ã³ã«ã¼ä½ç½®æå®ã¢ã¸ã¥ã¼ã«ã®ã©ã³ãã£ã³ã°ãã¼ã¸ãããã³CSS ã¢ã³ã«ã¼ä½ç½®æå®ã®ä½¿ç¨ã¬ã¤ããã覧ãã ããã
anchor() 颿°å¤ãåãå
¥ããããããã£
CSS ã®ã¤ã³ã»ããããããã£ã®ãã¡ãå¤é¨åã¨ã㦠anchor() 颿°ãåãå
¥ããã®ã¯æ¬¡ã®ãããªãã®ãããã¾ãã
topleftbottomrightinset䏿¬æå®inset-block-startinset-block-endinset-block䏿¬æå®inset-inline-startinset-inline-endinset-inline䏿¬æå®
ã¤ã³ã»ããããããã£ã¨ <anchor-side> ã®å¤ã®äºææ§
ã¤ã³ã»ããããããã£å¤ã®ä¸ã§ anchor() 颿°ã使ç¨ããå ´åãanchor() 颿°ã®ä¸ã§æå®ãã <anchor-side> 弿°ã¯ããã®ã¤ã³ã»ããããããã£ãæå±ãã軸ã¨äºææ§ã®ãããã®ã§ãªããã°ãªãã¾ããã
ã¤ã¾ãããã®ããããã£ã <anchor-side> ã¨åã軸æ¹åã§ããå ´åãç©çç㪠<anchor-side> å¤ãç©ççãªã¤ã³ã»ããããããã£ã®å¤å
ã§ä½¿ç¨ãããã¨ãã§ãã¾ããè¨ãæããã°ãtop 㨠bottom ã®è¾ºã¯ left 㨠right ã®ããããã£å¤å
ã§ã¯æå¹ã§ã¯ãªããã¾ããleft 㨠right ã®è¾ºã¯ top 㨠bottom ã®ããããã£å¤å
ã§ã¯æå¹ã§ã¯ããã¾ãããä¾ãã°ãtop: anchor(bottom) ã¯ã©ã¡ããåç´å¤ãªã®ã§åé¡ããã¾ããããtop: anchor(left) 㯠left ãæ°´å¹³å¤ãªã®ã§ç¡å¹ã§ãã top: anchor(left, 50px) ãæå®ããå ´åã代æ¿å¤ã使ç¨ããããããtop ã®è¨ç®å¤ã¯ 50px ã¨ãªãã¾ãã代æ¿å¤ãåå¨ããªãå ´åãã¤ã³ã»ããããããã£ã¯ãauto ã«è¨å®ããã¦ãããã®ããã«åä½ãã¾ãã
è«çç㪠<anchor-side> å¤ã¯ãè«ççãªã¤ã³ã»ããããããã£ã§ãç©ççãªã¤ã³ã»ããããããã£ã§ã使ç¨ãããã¨ãã§ãã¾ããè«çç㪠<anchor-side> å¤ã¯ãããããã£ãè«ççãç¸å¯¾çãã«é¢ããããã¤ã³ã»ããããããã£ã«é¢é£ãã軸ã«å¯¾ããç¸å¯¾çãªå¤ã«ãªãã¾ããä¾ãã°ãtop: anchor(start)ãtop: anchor(self-end)ãinset-block-start: anchor(end)ãinset-inline-end: anchor(self-start) ã¯ãã¹ã¦ãã¾ãåä½ãã¾ãã
è«ççãªã¤ã³ã»ããããããã£å¤å
ã§ç©çç㪠<anchor-side> 弿°ã使ç¨ããã¨ã話ãè¤éã«ãªãã¾ããç©ççãªè¾ºã¯ãç¾å¨ã®æ¸åæ¹åã«ããã¦ã¤ã³ã»ããããããã£ãé¢é£ãã軸ã¨ä¸è´ããªããã°ãªããªãããã§ããä¾ã示ãã¾ãã
- 横æ¸ãã®å ´åããããã¯ã®æ¹åã¯ä¸ããä¸ãªã®ã§ã
inset-block-end: anchor(bottom)ã¯åä½ãã¾ãããinset-block-end: anchor(left)ã¯åä½ãã¾ãããinset-block-end: anchor(left, 50px)ãè¨å®ããã¨ãè¨ç®ãããå¤ã¯50pxã¨ãªããä½ç½®æå®è¦ç´ ã¯ãè¨å®ãããpositionå¤ã«å¿ãã¦ãæãè¿ãä½ç½®æå®ãããç¥å è¦ç´ ã¾ãã¯ãã¥ã¼ãã¼ãã®ãããã¯ã®æ«å°¾ï¼ä¸ï¼ãã50pxã®ä½ç½®ã«é ç½®ããã¾ãã - 縦æ¸ãã®å ´åããããã¯ã®æ¹åã¯å³ããå·¦ã¾ãã¯å·¦ããå³ã§ããããã
inset-block-end: anchor(left)ã¯åä½ãã¾ãããinset-block-end: anchor(top)ã¯åä½ãã¾ãããinset-block-end: anchor(top, 50px)ãè¨å®ãããå ´åããã®è¨ç®å¤ã¯50pxã¨ãªããä½ç½®æå®è¦ç´ ã¯ãè¨å®ãããpositionå¤ã«å¿ãã¦ãæãè¿ãä½ç½®æå®ãããç¥å è¦ç´ ã¾ãã¯ãã¥ã¼ãã¼ãã®ãããã¯ã®æ«å°¾ï¼å·¦ãå³ã®ã©ã¡ããã¯ãæ¸åæ¹åã«ããã¾ãï¼ãã50pxã®ä½ç½®ã«é ç½®ããã¾ãã
ãããã®å¤ã«ããæ··ä¹±ãé¿ãããããè«ççãªã¤ã³ã»ããããããã£ã«ã¯è«çç㪠<anchor-side> å¤ããç©ççãªã¤ã³ã»ããããããã£ã«ã¯ç©çç㪠<anchor-side> å¤ã使ç¨ãããã¨ããå§ããã¾ãã è«ççãªå¤ã¯å½éåã«æçãªãããå¯è½ãªéãè«ççãªå¤ã使ç¨ãã¾ãããã
center ããã³ <percentage> ã®å¤ã¯ããã¹ã¦ã®è«ççããã³ç©ççãªã¤ã³ã»ããããããã£å
ã® anchor() 颿°å
ã§æå¹ã§ãã
以ä¸ã®è¡¨ã¯ãã¤ã³ã»ããããããã£ã¨ããããã¨äºææ§ã®ãã <anchor-side> 弿°ã®å¤ãä¸è¦§è¡¨ç¤ºãã¦ãã¾ãã æ²è¼ããã¦ããã®ã¯å奿å®ããããã£ã®ã¿ã§ãããããã®ããããã£å¤ã¯ã䏿¬æå®ããããã£ã®å¤ãæ§æãããã®ã§ãã
| ã¤ã³ã»ãããããã㣠| äºææ§ã®ãã <anchor-side> ã®å¤ |
|---|---|
| ãã¹ã¦ | center |
| ãã¹ã¦ | <percentage> |
top ããã³ bottom |
top, bottom, start, end, self-start, self-end |
left ããã³ right |
left, right, start, end, self-start, self-end |
inset-block-start ããã³ inset-block-end |
start, end, self-start, self-end横æ¸ãã§ã¯ top ããã³ bottom縦æ¸ãã§ã¯ left ããã³ right |
inset-inline-start ããã³ inset-inline-end |
start, end, self-start, self-end横æ¸ãã§ã¯ left ããã³ right縦æ¸ãã§ã¯ top ããã³ bottom |
anchor() ãããããªã¼ãã¼ã®é
ç½®ã«ä½¿ç¨
anchor() ã使ç¨ãã¦ããããªã¼ãã¼ã®ä½ç½®æå®ãè¡ãéã¯ãããããªã¼ãã¼ã®ããã©ã«ãã®ã¹ã¿ã¤ã«ï¼è±èªï¼ããæå³ããé
ç½®ã¨ç«¶åãããã¨ãããã¾ãã主ãªåå 㯠margin ããã³ inset ã®ããã©ã«ãã¹ã¿ã¤ã«ã§ããããããããªã»ãããããã¨ããå§ããã¾ãã
.positionedPopover {
margin: 0;
inset: auto;
}
CSS 使¥é¨ä¼ã§ã¯ããã®åé¿çãé¿ããæ¹æ³ã«ã¤ãã¦æ¤è¨ãã¦ãã¾ãã
anchor() ã calc() ã®ä¸ã§ä½¿ç¨
anchor() 颿°ãæ¢å®ã®ã¢ã³ã«ã¼ã®è¾ºãåç
§ããå ´åãå¿
è¦ã«å¿ãã¦ããã¼ã¸ã³ (margin) ãå«ãããã¨ãã§ããã¢ã³ã«ã¼ã¨ä½ç½®æå®ãããè¦ç´ ã®ç«¯ã®éã«ç©ºéãè¨ãããã¨ãã§ãã¾ãã ãããã¯ãanchor() 颿°ã calc() 颿°å
ã«è¨è¼ãã¦ã空éã追å ãããã¨ãã§ãã¾ãã
ãã®ä¾ã§ã¯ãä½ç½®æå®ãããè¦ç´ ã®æ£ãã辺ãã¢ã³ã«ã¼è¦ç´ ã®å·¦è¾ºã«æãããã®å¾ã«ãã¼ã¸ã³ã追å ãã¦è¾ºã®éã«ç©ºéãä½ãã¾ãã
.positionedElement {
right: anchor(left);
margin-left: 10px;
}
ãã®ä¾ã§ã¯ãä½ç½®æå®ãããè¦ç´ ã®è«çãããã¯ã®æ«å°¾ããã¢ã³ã«ã¼è¦ç´ ã®è«çãããã¯ã®å é ä½ç½®ãã 10px ã®è·é¢ã«ç½®ããã¾ãã
.positionedElement {
inset-block-end: calc(anchor(start) + 10px);
}
è¤æ°ã®ã¢ã³ã«ã¼ã«ç¸å¯¾çãªè¦ç´ ã®ä½ç½®æå®
åãè¦ç´ ä¸ã®ç°ãªã <anchor-name> å¤ãç°ãªãã¤ã³ã»ããããããã£ã® anchor() 颿°å
ã«æå®ãããã¨ã§ãè¤æ°ã®ã¢ã³ã«ã¼ã«å¯¾ãã¦è¦ç´ ãç¸å¯¾çã«é
ç½®ãããã¨ãã§ãã¾ãï¼ä¸è¨ã®è¤æ°ã®ã¢ã³ã«ã¼ã«å¯¾ãã¦ç¸å¯¾çã«é
ç½®ãããè¦ç´ ãåç
§ï¼ã ããã¯ãä½ç½®æå®ãããè¦ç´ ã®è§ã§ãµã¤ãºå¤æ´ã«ä½¿ç¨ã§ãããã©ãã°ãã³ãã«ã使ãããªã©ãæç¨ãªæ©è½ã使ããããã«ä½¿ç¨ã§ãã¾ãã
ä½ç½®æå®è¦ç´ ã¯ãè¤æ°ã®ã¢ã³ã«ã¼è¦ç´ ã«å¯¾ãã¦ç¸å¯¾çã«ä½ç½®ã¥ãããã¨ãã§ãã¾ããããã®è¦ç´ ã¯ãposition-anchor ããããã£ï¼ã¾ã㯠HTML ã® anchor 屿§ï¼ã§å®ç¾©ãããåä¸ã®ã¢ã³ã«ã¼ã¨é¢é£ä»ãããããã®ã¨ãªãã¾ããããã¯ããã¼ã¸ãã¹ã¯ãã¼ã«ããéã«ããã®è¦ç´ ãã¹ã¯ãã¼ã«ããã¢ã³ã«ã¼ã§ããã¾ããè¦ç´ ãæ¡ä»¶ä»ãã§é表示ã«ãªãã¿ã¤ãã³ã°ãå¶å¾¡ããããã«ä½¿ç¨ãããã¨ãã§ãã¾ãã
形弿æ³
<anchor()> =
anchor( <anchor-name>? &&
<anchor-side> , <length-percentage>? )
<anchor-name> =
<dashed-ident>
<anchor-side> =
inside |
outside |
top |
left |
right |
bottom |
start |
end |
self-start |
self-end |
<percentage> |
center
<length-percentage> =
<length> |
<percentage>
ä¾
>ä¸è¬çãªä½¿ç¨æ³
ãã®ä¾ã§ã¯ã anchor() 颿°ã使ç¨ãã¦ãã¢ã³ã«ã¼ã§ä½ç½®æå®ãããè¦ç´ ã®é«ããã¢ã³ã«ã¼ã®é«ãã«è¨å®ãã¾ããä¸ç«¯ã¨ä¸ç«¯ãã¢ã³ã«ã¼ã®ä¸ç«¯ã¨ä¸ç«¯ã«è¨å®ãããã¨ã§ãé«ããè¨å®ãã¾ããæ¬¡ã«ãcalc() 颿°å
ã§ anchor() 颿°ã使ç¨ãã¦ãã¢ã³ã«ã¼ã§ä½ç½®æå®ãããè¦ç´ ãã¢ã³ã«ã¼ãããããã¾ãã
HTML
ã¢ã³ã«ã¼ã¨ãã¦è¨å®ãã <div> è¦ç´ ã¨ããã®ã¢ã³ã«ã¼ããç¸å¯¾çã«ä½ç½®æå®ãã <p> è¦ç´ ãè¨ç½®ãã¾ãã
<div class="anchor">âï¸</div>
<p class="positionedElement">ããã¯ä½ç½®æå®è¦ç´ ã§ãã</p>
CSS
ã¢ã³ã«ã¼è¦ç´ ã® anchor-name å¤ããä½ç½®æå®è¦ç´ ã® position-anchor ããããã£ã®å¤ã¨ãã¦è¨å®ããè¦ç´ ãé¢é£ä»ãã¾ããæ¬¡ã«ãã¢ã³ã«ã¼è¦ç´ ã« 3 ã¤ã®ã¤ã³ã»ããããããã£ãè¨å®ãã¾ããæåã® 2 ã¤ã®ããããã£ã§ã¯ãè¦ç´ ã®ä¸ç«¯ãã¢ã³ã«ã¼ã®ä¸ç«¯ã¨æããä¸ç«¯ãã¢ã³ã«ã¼ã®ä¸ç«¯ã¨æãã¾ãã 3 ã¤ç®ã®ã¤ã³ã»ããããããã£ã§ã¯ã anchor() 颿°ã calc() 颿°å
ã§ä½¿ç¨ãã¦ããã®è¦ç´ ã®å·¦ç«¯ãã¢ã³ã«ã¼ã®å³ç«¯ãã 10px ã®ä½ç½®ã«ä½ç½®æå®ãã¾ãã
.anchor {
anchor-name: --infobox;
background: palegoldenrod;
font-size: 3em;
width: fit-content;
border: 1px solid goldenrod;
}
.positionedElement {
position: absolute;
position-anchor: --infobox;
margin: 0;
top: anchor(top);
left: calc(anchor(right) + 10px);
bottom: anchor(bottom);
background-color: olive;
border: 1px solid darkolivegreen;
}
çµæ
æ§ã 㪠anchor-side å¤ã®æ¯è¼
ãã®ä¾ã§ã¯ãanchor()颿°ã使ç¨ãã¦å®ç¾©ãããtopããã³leftããããã£ãä»ãã¦ãè¦ç´ ãã¢ã³ã«ã¼ã«å¯¾ãã¦ç¸å¯¾çã«ä½ç½®æå®ããããã¨ã確èªã§ãã¾ãã ã¾ãã 2 ã¤ã®ãããããã¦ã³ã¡ãã¥ã¼ãå«ã¾ãã¦ããã anchor() 颿°å
ã§ <anchor-side> å¤ã夿´ãããã¨ãã§ãã¾ããããã«ããããããã®å¤ãã©ã®ãããªå¹æããããããã確èªãããã¨ãã§ãã¾ãã
HTML
2 ã¤ã® <div> è¦ç´ ãæå®ãã¾ãã 1 ã¤ã¯ã¯ã©ã¹ã anchorããã 1 ã¤ã¯ã¯ã©ã¹ã infobox ã§ããããã«ãããããããæå³éãã«ã¢ã³ã«ã¼è¦ç´ ã¨ä½ç½®æå®è¦ç´ ãé¢é£ä»ãããã¾ãã
ã¾ãã 2 ã¤ã® <div> è¦ç´ ã®å¨ãã«ããã¤ãã®ãã£ã©ã¼ããã¹ããè¨è¼ãã¦ã <body> ã®é«ããé«ããã¦ãã¹ã¯ãã¼ã«ããããã«ãã¦ãã¾ãããã®ä¾ã§ã¯ããããããã¦ã³ã¡ãã¥ã¼ã使ãã 2 ã¤ã® <select> è¦ç´ ãè¨ç½®ãã¦ãããããã«ãããä½ç½®æå®è¦ç´ ãé
ç½®ããéã«ããã¾ãã¾ãª <anchor-side> å¤ã鏿ãããã¨ãã§ãã¾ããããã§ã¯ã説æãç°¡æ½ã«ããããã«ããã£ã©ã¼ããã¹ã㨠<select> è¦ç´ ãé表示ã«ãã¦ãã¾ãã
<div class="anchor">âï¸</div>
<div class="infobox">
<p>ããã¯æ
å ±ããã¯ã¹ã§ãã</p>
</div>
CSS
anchor ã® <div> ãã¢ã³ã«ã¼è¦ç´ ã¨ãã¦å®£è¨ããããã«ã anchor-name ããããã£ã«ãã£ã¦ã¢ã³ã«ã¼åãè¨å®ãã¾ããæ¬¡ã«ã position-anchor ããããã£ã«åãå¤ãè¨å®ãããã¨ã§ãä½ç½®æå®ãããè¦ç´ ã¨é¢é£ä»ãã¾ãã top: anchor(--my-anchor bottom) ã¯ãæ
å ±ããã¯ã¹ã®ä¸ç«¯ãã¢ã³ã«ã¼ã®ä¸ç«¯ã«æãã¦é
ç½®ãã¾ãã䏿¹ã left: anchor(right) ã¯ãæ
å ±ããã¯ã¹ã®å·¦ç«¯ãã¢ã³ã«ã¼ã®å³ç«¯ã«æãã¦é
ç½®ãã¾ããããã¯ããããããã¦ã³ã¡ãã¥ã¼ããç°ãªãå¤ã鏿ãããå ´åã«ä¸æ¸ããããåæä½ç½®ãæå®ãã¾ãã
.anchor {
anchor-name: --my-anchor;
}
.infobox {
position: fixed;
position-anchor: --my-anchor;
top: anchor(--my-anchor bottom);
left: anchor(right);
}
JavaScript
æ°ãã <anchor-side> å¤ã鏿ãããéã«çºçãã change ã¤ãã³ããå¾
ã¡åããã鏿ãããå¤ããæ
å ±ããã¯ã¹ã®é¢é£ããã¤ã³ã»ããããããã£ï¼top ã¾ã㯠leftï¼ã®å¤å
ã® anchor() 颿°ã® <anchor-side> ã¨ãã¦è¨å®ãã¾ãã
const infobox = document.querySelector(".infobox");
const topSelect = document.querySelector("#top-anchor-side");
const leftSelect = document.querySelector("#left-anchor-side");
topSelect.addEventListener("change", (e) => {
const anchorSide = e.target.value;
infobox.style.top = `anchor(--my-anchor ${anchorSide})`;
});
leftSelect.addEventListener("change", (e) => {
const anchorSide = e.target.value;
infobox.style.left = `anchor(${anchorSide})`;
});
çµæ
ãããããã¦ã³ã¡ãã¥ã¼ãããã¾ãã¾ãªå¤ãæå®ãã¦ãæ å ±ããã¯ã¹ã®ä½ç½®æå®ã«ã©ã®ãããªå½±é¿ããããã確èªãã¦ãã ããã
è¤æ°ã®ã¢ã³ã«ã¼ã«å¯¾ãã¦ç¸å¯¾çã«é ç½®ãããè¦ç´
ä¾ãã°ã 2 ã¤ã®ç°ãªãã¢ã³ã«ã¼ã«å¯¾ãã¦è¦ç´ ãç¸å¯¾çã«ä½ç½®æå®ããã¢ã³ã«ã¼ã§ä½ç½®æå®ãããè¦ç´ ã®å·¦ä¸ã¨å³ä¸ã®ä½ç½®ãè¨å®ãããã¨ãã§ãã¾ãã ã¢ã³ã«ã¼ã¯ããã¼ãã¼ãã®ã³ã³ããã¼ã«ã使ç¨ãã¦ç§»åããããä½ç½®æå®ãããè¦ç´ ããã©ãã°ãã¦ãµã¤ãºã夿´ããããããã¨ãã§ãã¾ãã
HTML
å
¨é¨ã§ 3 ã¤ã® <div> è¦ç´ ãè¨ç½®ãã¾ããæåã® 2 ã¤ã¯ã¯ã©ã¹ã anchor ã§ãããã¢ã³ã«ã¼ã¨ãã¦å®ç¾©ããã¾ããããããã«åå¥ã® id ãæã£ã¦ãããç°ãªãä½ç½®æå®æ
å ±ã¨ãã¦ä½¿ç¨ããã¾ããæå¾ã® <div> ã¯ã¯ã©ã¹ã infobox ã§ãããä½ç½®æå®è¦ç´ ã¨ãã¦å®ç¾©ããã¾ãã tabindex 屿§ãè¨è¼ãã¦ããã¼ãã¼ããã©ã¼ã«ã¹ãåãåããããã«ãã¾ãã
<div id="anchor1" class="anchor" tabindex="0">âï¸1</div>
<div id="anchor2" class="anchor" tabindex="0">âï¸2</div>
<div class="infobox">
<p>ããã¯æ
å ±ããã¯ã¹ã§ãã</p>
</div>
CSS
ã¢ã³ã«ã¼ã«ã¯ããããç°ãªã anchor-name ã®å¤ã¨ãã position ã®å¤ã absolute ã¨ããç°ãªãã¤ã³ã»ããå¤ãè¨å®ãããã¨ã§ãã¢ã³ã«ã¼ãé·æ¹å½¢ã«é
ç½®ãã¾ãã
.anchor {
position: absolute;
}
#anchor1 {
anchor-name: --my-anchor1;
top: 50px;
left: 100px;
}
#anchor2 {
anchor-name: --my-anchor2;
top: 200px;
left: 350px;
}
ã¢ã³ã«ã¼ä½ç½®æå®ãããè¦ç´ ã¯ã position ã fixed ã«è¨å®ãã position-anchor ããããã£ã«ãã£ã¦ 1 ã¤ã®ã¢ã³ã«ã¼ã«é¢é£ä»ãããã¦ãã¾ãããã®ã¤ã³ã»ããããããã£ã«è¨å®ããã anchor() 颿°ã« 2 ã¤ã®ç°ãªã <anchor-name> å¤ãå«ã¾ãã¦ãããã¨ã§ã 2 ã¤ã®ã¢ã³ã«ã¼ã«é¢é£ãã¦ä½ç½®æå®ããã¾ãããã®å ´åã <percentage> å¤ã <anchor-side> 弿°ã«ä½¿ç¨ãã颿°ãè¨å®ããã¤ã³ã»ããããããã£ã®è»¸ã®å
é ããã®è·é¢ãæå®ãã¾ãã
.infobox {
position-anchor: --my-anchor1;
position: fixed;
top: anchor(--my-anchor1 100%);
left: anchor(--my-anchor1 100%);
bottom: anchor(--my-anchor2 0%);
right: anchor(--my-anchor2 0%);
}
çµæ
ä½ç½®æå®ãããè¦ç´ ã¯ã両æ¹ã®ã¢ã³ã«ã¼è¦ç´ ã«å¯¾ãã¦ç¸å¯¾çã«ä½ç½®æå®ããã¾ãã ãã¦ã¹ã¾ãã¯ã¿ããã¼ã§ãããããã©ãã°ããWãAãSãD ãã¼ã使ç¨ãã¦ãããããä¸ä¸å·¦å³ã«ç§»åãã¾ãã ãã®æä½ã«ããããããã®ä½ç½®ãã©ã®ããã«å¤åãããã®çµæã¨ãã¦ä½ç½®æå®ãããè¦ç´ ã®é åãã©ã®ããã«å¤åãããã確ããã¦ãã ããããã¹ã¦ã®è¦ç´ ã®ä½ç½®ãç¶æãããæ§åã確èªããã«ã¯ãã¹ã¯ãã¼ã«ãã¦ãã ããã
ã¡ã¢: ãã®ä¾ã¯æ¦å¿µã®å®è¨¼ã§ãããå®éç¨ã³ã¼ãã¨ãã¦æå³éãã«åä½ãããã¨ãä¿è¨¼ãããã®ã§ã¯ããã¾ãããä¾ãã°ãã¢ã³ã«ã¼ãæ°´å¹³ã¾ãã¯åç´ã«ãªãããã«ç§»åããããã¨ããã¨ããã®ä¾ã¯åä½ããªããªãã¾ãã
仿§æ¸
| Specification |
|---|
| CSS Anchor Positioning Module Level 1> # anchor-pos> |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
position-anchorposition-areaanchor-size()颿°- CSS ã¢ã³ã«ã¼ä½ç½®æå®ã®ä½¿ç¨ã¬ã¤ã
- ãªã¼ãã¼ããã¼æã®ä»£æ¿ãªãã·ã§ã³ã¨æ¡ä»¶ä»ãé表示ã¬ã¤ã
- CSS ã¢ã³ã«ã¼ä½ç½®æå®ã¢ã¸ã¥ã¼ã«