CSS anchor-size() 颿°
Baseline
2026
æè¿å©ç¨å¯è½
2026å¹´1æä»¥éããã®æ©è½ã¯ææ°ã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã³ãã©ã¦ã¶ã¼ã§åä½ãã¾ããå¤ã端æ«ããã©ã¦ã¶ã¼ã§ã¯åä½ããªããã¨ãããã¾ãã
Want more browser support for this feature? Tell us why.
anchor-size() 㯠CSS ã®é¢æ°ã§ãã¢ã³ã«ã¼ä½ç½®æå®è¦ç´ ã®ãµã¤ãºãä½ç½®ããã¼ã¸ã³ããã¢ã³ã«ã¼è¦ç´ ã®ãµã¤ãºã«å¯¾ãã¦ç¸å¯¾çã«è¨å®ãããã¨ãã§ãã¾ããããã¯ãã¿ã¼ã²ããã¨ãªãã¢ã³ã«ã¼è¦ç´ ã®æå®ããã辺㮠<length> ãè¿ãã¾ããanchor-size() ã¯ãã¢ã³ã«ã¼ä½ç½®æå®è¦ç´ ã®ãµã¤ãºæå®ãã¤ã³ã»ããããã¼ã¸ã³ããããã£ã®å¤å
ã§ä½¿ç¨ãããå ´åã«ã®ã¿æå¹ã§ãã
ã¢ã³ã«ã¼æ©è½ã®è©³ç´°ã¨ä½¿ç¨æ¹æ³ã«ã¤ãã¦ã¯ãCSS ã¢ã³ã«ã¼ä½ç½®æå®ã¢ã¸ã¥ã¼ã«ããã³CSS ã¢ã³ã«ã¼ä½ç½®æå®ã®ä½¿ç¨æ¹æ³ã¬ã¤ããåç §ãã¦ãã ããã
æ§æ
/* 弿°ãªã */
anchor-size()
/* ã¢ã³ã«ã¼ãµã¤ãºå¼æ° */
anchor-size(width);
anchor-size(block);
anchor-size(self-inline);
/* anchor-name ããã³ anchor-side */
width: anchor-size(--my-anchor width);
block-size: anchor-size(--my-anchor block);
/* æå®ãããã¢ã³ã«ã¼ã®å´ã«å¯¾ããç¸å¯¾ãµã¤ãºè¨å®ï¼ä»£æ¿å¤ã¤ãï¼ */
width: anchor-size(--my-anchor width, 50%);
block-size: anchor-size(--my-anchor block, 200px);
/* ã¢ã³ã«ã¼å´ã«å¯¾ããä½ç½®æå® */
left: anchor-size(width);
inset-inline-end: anchor-size(--my-anchor height, 100px);
/* ã¢ã³ã«ã¼ç«¯ããè¦ããã¼ã¸ã³ã®è¨å® */
margin-left: calc(anchor-size(width) / 4);
margin-block-start: anchor-size(--my-anchor self-block, 20px);
弿°
anchor-size() 颿°ã®æ§æã¯æ¬¡ã®éãã§ãã
anchor-size(<anchor-name> <anchor-size>, <length-percentage>)
弿°ã¯æ¬¡ã®éãã§ãã
<anchor-name>çç¥å¯-
è¦ç´ ã®ãµã¤ãºãä½ç½®ãã¾ãã¯ãã¼ã¸ã³ãç¸å¯¾çã«è¨å®ãããã¢ã³ã«ã¼è¦ç´ ã®
anchor-nameããããã£å¤ãããã¯<dashed-ident>å¤ã§ããçç¥ãããå ´åãè¦ç´ ã®ããã©ã«ãã¢ã³ã«ã¼ã使ç¨ããã¾ããã¡ã¢:
<anchor-name>ãanchor-size()颿°å ã§æå®ãã¦ããè¦ç´ ãã¢ã³ã«ã¼ã«é¢é£ä»ãããåºå®ãããããããã§ã¯ããã¾ãããããã¯åã«ãè¦ç´ ã®ããããã£å¤ãã©ã®ã¢ã³ã«ã¼ãåºæºã«è¨å®ãã¹ãããå®ç¾©ããã ãã§ãã <anchor-size>çç¥å¯-
æå®ãããè¦ç´ ã®ããããã£å¤ãç¸å¯¾çã«è¨å®ãããã¢ã³ã«ã¼è¦ç´ ã®å´é¢ãæå®ãã¾ããæå¹ãªå¤ã¯ä»¥ä¸ã®éãã§ãã
width-
ã¢ã³ã«ã¼è¦ç´ ã®å¹ ã§ãã
height-
ã¢ã³ã«ã¼è¦ç´ ã®é«ãã§ãã
block-
ã¢ã³ã«ã¼è¦ç´ ã®å å«ãããã¯ã®ãããã¯æ¹åã«ãããé·ãã
inline-
ã¢ã³ã«ã¼è¦ç´ ã®ã¤ã³ã©ã¤ã³æ¹åã«ãããå å«ãããã¯ã®é·ãã
self-block-
ã¢ã³ã«ã¼è¦ç´ ã®ãããã¯æ¹åã®é·ãã
self-inline-
ã¢ã³ã«ã¼è¦ç´ ã®ã¤ã³ã©ã¤ã³æ¹åã®é·ãã
ã¡ã¢: ãã®å¼æ°ãçç¥ãããå ´åã軸ã®å¯¸æ³ã¯ããã©ã«ãã§ã颿°ãå«ã¾ããããããã£ã®è»¸ã«å¯¾å¿ãã
<anchor-size>ãã¼ã¯ã¼ãã«è¨å®ããã¾ããä¾ãã°ãwidth: anchor-size();ã¯width: anchor-size(width);ã¨åçã§ãã <length-percentage>çç¥å¯-
è¦ç´ ã絶対æå®ã¾ãã¯åºå®ä½ç½®æå®ã§ãªãå ´åãã¾ãã¯ã¢ã³ã«ã¼è¦ç´ ãåå¨ããªãå ´åã«ä»£æ¿å¤ã¨ãã¦ä½¿ç¨ãããµã¤ãºãæå®ãã¾ãã代æ¿å¤ã使ç¨ãããã¹ãç¶æ³ã§ãã®å¼æ°ãçç¥ãããå ´åã宣è¨ã¯ç¡å¹ã¨ãªãã¾ãã
ã¡ã¢:
ä½ç½®æå®è¦ç´ ã®ããããã£å¤ãè¨å®ããåºæºã¨ãªãã¢ã³ã«ã¼å¯¸æ³ã¯ãè¨å®ãããµã¤ãºå¤ã¨åã軸ä¸ã«åå¨ããå¿
è¦ã¯ããã¾ãããä¾ãã°ãwidth: anchor-size(height) ã¯æå¹ã§ãã
è¿å¤
<length> å¤ãè¿ãã¾ãã
解説
anchor-size() 颿°ã¯ãä½ç½®æå®ãããè¦ç´ ã®ãµã¤ãºãä½ç½®ããã¼ã¸ã³å¤ãã¢ã³ã«ã¼è¦ç´ ã®å¯¸æ³ã§è¡¨ç¾ãããã¨ãå¯è½ã«ãã¾ãããã®é¢æ°ã¯ãä½ç½®æå®ãããè¦ç´ ã®ããããã£å¤ãç¸å¯¾çã«è¨å®ãããç¹å®ã®ã¢ã³ã«ã¼è¦ç´ ã®å¯¸æ³ã表ã <length> å¤ãè¿ãã¾ããã¢ã³ã«ã¼ä½ç½®æå®ãããè¦ç´ ã«è¨å®ããããµã¤ãºãã¤ã³ã»ããããã¼ã¸ã³ããããã£ã®æå¹ãªå¤ã¨ãªãã¾ãã
è¿ãããé·ãã¯ãã¢ã³ã«ã¼è¦ç´ ã¾ãã¯ãã®å
å«ãããã¯ã®åç´æ¹åã¾ãã¯æ°´å¹³æ¹åã®ãµã¤ãºã§ãã使ç¨ããã寸æ³ã¯<anchor-size>弿°ã«ãã£ã¦å®ç¾©ããã¾ãããã®å¼æ°ãçç¥ãããå ´åã使ç¨ããã寸æ³ã¯ããµã¤ãºãä½ç½®ãã¾ãã¯ãã¼ã¸ã³ããããã£ãè¨å®ããã¦ãã軸ã«ä¸è´ãã¾ãã
width: anchor-size()ã¯width: anchor-size(width)ã¨åçã§ããtop: anchor-size()ã¯top: anchor-size(height)ã¨åçã§ããmargin-inline-end: anchor-size()ã¯margin-inline-end: anchor-size(self-inline)ã¨åçã§ããã¾ããmargin-inline-end: anchor-size()ã¯æ¨ªæ¸ãæã«ã¯margin-inline-end: anchor-size(width)ã¨åçã§ããã縦æ¸ãæã«ã¯margin-inline-end: anchor-size(height)ã¨åçã§ãã
寸æ³ã®é·ãã®åºæºã¨ãªãã¢ã³ã«ã¼è¦ç´ ã¯ã<anchor-name> 弿°ã§æå®ããã anchor-name ãæã¤è¦ç´ ã§ããè¤æ°ã®è¦ç´ ãåãã¢ã³ã«ã¼åãæã¤å ´åãDOM é åºã§ãã®ã¢ã³ã«ã¼åãæã¤æå¾ã®è¦ç´ ã使ç¨ããã¾ãã
颿°å¼ã³åºãã« <anchor-name> 弿°ãå«ã¾ãã¦ããªãå ´åãè¦ç´ ã®ããã©ã«ãã¢ã³ã«ã¼ã使ç¨ããã¾ããããã¯ããã®position-anchorããããã£ã§åç
§ãããããanchor HTML屿§ã«ãã£ã¦è¦ç´ ã«é¢é£ä»ãããããã®ã§ãã
<anchor-name> 弿°ãå«ã¾ãã¦ããããã®ã¢ã³ã«ã¼åã«ä¸è´ããè¦ç´ ãåå¨ããªãå ´åã代æ¿å¤ã使ç¨ããã¾ãã代æ¿å¤ãå«ã¾ãã¦ããªãå ´åã宣è¨ã¯ç¡è¦ããã¾ããä¾ãã°ãé
ç½®ãããè¦ç´ ã« width: anchor-size(--foo width, 50px); height: anchor-size(--foo width); ãæå®ããã¦ããããDOM å
ã« --foo ã¨ããååã®ã¢ã³ã«ã¼ãåå¨ããªãå ´åãwidth 㯠50px ã¨ãªããheight 宣è¨ã¯å¹æãããã¾ããã
è¦ç´ ã« anchor-size() å¤ãè¨å®ããããµã¤ãºãä½ç½®ããã¼ã¸ã³ããããã£ãããå ´åã§ãããã®è¦ç´ ãã¢ã³ã«ã¼é
ç½®è¦ç´ ã§ãªãå ´åï¼position ããããã£ã absolute ã¾ã㯠fixed ã«è¨å®ããã¦ããªããããã㯠position-anchor ããããã£ãä»ãã¦é¢é£ä»ããããã¢ã³ã«ã¼ãæããªãå ´åï¼ãå©ç¨å¯è½ãªä»£æ¿å¤ã使ç¨ããã¾ãã代æ¿å¤ãåå¨ããªãå ´åã宣è¨ã¯ç¡è¦ããã¾ãã
ä¾ãã°ãä½ç½®æå®ãããè¦ç´ ã« width: anchor-size(width, 50px); ãæå®ããã¦ããããã¢ã³ã«ã¼ãé¢é£ä»ãããã¦ããªãå ´åã代æ¿å¤ã使ç¨ããããããwidth ã®è¨ç®å¤ã¯ 50px ã¨ãªãã¾ãã
ã¢ã³ã«ã¼æ©è½ã®è©³ç´°ã¨ä½¿ç¨æ¹æ³ã«ã¤ãã¦ã¯ãCSS ã¢ã³ã«ã¼ä½ç½®æå®ã¢ã¸ã¥ã¼ã«ããã³ CSS ã¢ã³ã«ã¼ä½ç½®æå®ã®ä½¿ç¨æ¹æ³ã¬ã¤ããåç §ãã¦ãã ããã
anchor-size() 颿°å¤ãåãå
¥ããããããã£
anchor-size() 颿°ãå¤ã¨ãã¦åãå
¥ããããããã£ã«ã¯ã以ä¸ã®ãã®ãããã¾ãã
- ãµã¤ãºæå®ããããã£:
- ã¤ã³ã»ããããããã£:
bottomleftrighttopinset䏿¬æå®inset-block䏿¬æå®inset-block-endinset-block-startinset-inline䏿¬æå®inset-inline-endinset-inline-start
- ãã¼ã¸ã³ããããã£:
margin䏿¬æå®margin-bottommargin-leftmargin-rightmargin-topmargin-block䏿¬æå®margin-block-endmargin-block-startmargin-inline䏿¬æå®margin-inline-endmargin-inline-start
calc() å
ã§ã® anchor-size() ã®ä½¿ç¨
anchor-size() 颿°ã®ä¸ã§æããã使ãããç¨éã¯ãããã©ã«ãã®ã¢ã³ã«ã¼ã®ãµã¤ãºãåç
§ãããã¨ã§ããä»ã«ããanchor-size() 颿°ã calc() 颿°å
ã§ä½¿ç¨ãããã¨ã§ãä½ç½®æå®è¦ç´ ã«é©ç¨ããããµã¤ãºã夿´ã§ãã¾ãã
ä¾ãã°ã次ã®ã«ã¼ã«ã¯ä½ç½®æå®è¦ç´ ã®å¹ ããããã©ã«ãã®ã¢ã³ã«ã¼è¦ç´ ã®å¹ ã¨åããµã¤ãºã«ãã¾ãã
.positionedElem {
width: anchor-size(width);
}
次ã®ã«ã¼ã«ã¯ãä½ç½®æå®è¦ç´ ã®ã¤ã³ã©ã¤ã³ãµã¤ãºãã¢ã³ã«ã¼è¦ç´ ã®ã¤ã³ã©ã¤ã³ãµã¤ãºã® 4 åã«è¨å®ãã¾ããä¹ç®ã¯ calc() 颿°å
ã§å®è¡ããã¾ãã
.positionedElem {
inline-size: calc(anchor-size(self-inline) * 4);
}
形弿æ³
<anchor-size()> =
anchor-size( [ <anchor-name> || <anchor-size> ]? , <length-percentage>? )
<anchor-name> =
<dashed-ident>
<anchor-size> =
width |
height |
block |
inline |
self-block |
self-inline
<length-percentage> =
<length> |
<percentage>
ä¾
>åºæ¬ç㪠anchor-size() ã®ä½¿ãæ¹
ãã®ä¾ã§ã¯ã2 ã¤ã®è¦ç´ ãã¢ã³ã«ã¼ãåºæºã«ä½ç½®æå®ããanchor-size() 颿°ã使ç¨ãã¦ãµã¤ãºãè¨å®ãã¦ãã¾ãã
HTML
3 ã¤ã® <div> è¦ç´ ã1 ã¤ã® anchor è¦ç´ ãããã³ã¢ã³ã«ã¼è¦ç´ ã«å¯¾ãã¦ç¸å¯¾é
ç½®ãã 2 ã¤ã® infobox è¦ç´ ãæå®ãã¾ããã¾ãã<body> ã®é«ããã¹ã¯ãã¼ã«ãå¿
è¦ã«ãªãç¨åº¦ã«ãããããåãè¾¼ã¿ããã¹ãããã¦ãã¾ãããããã¯ç°¡æ½ããèæ
®ãã¦é表示ã«ãã¦ãã¾ãã
<div class="anchor">âï¸</div>
<div class="infobox" id="infobox1">
<p>This is the first infobox.</p>
</div>
<div class="infobox" id="infobox2">
<p>This is the second infobox.</p>
</div>
CSS
anchor ã® <div> ãã¢ã³ã«ã¼è¦ç´ ã¨ãã¦å®£è¨ããã«ã¯ãanchor-name ãä»ä¸ãã¾ããposition ããããã£ã fixed ã«è¨å®ããä½ç½®æå®è¦ç´ ã¯ãposition-anchor ããããã£ãä»ãã¦ã¢ã³ã«ã¼è¦ç´ ã«é¢é£ä»ãããã¾ããã¾ããã¢ã³ã«ã¼ã«ã¯çµ¶å¯¾ç㪠height 㨠width ãè¨å®ãããã©ã¦ã¶ã¼éçºè
ãã¼ã«ãªã©ã§ä½ç½®æå®è¦ç´ ã®ãµã¤ãºã確èªããéã®åºæºç¹ã¨ãã¾ãã
.anchor {
anchor-name: --my-anchor;
width: 100px;
height: 50px;
}
.infobox {
position-anchor: --my-anchor;
position: fixed;
}
ä½ç½®æå®è¦ç´ ã«å¯¾ãã¦ãããã¤ãã®æç¢ºãªããããã£å¤ãè¨å®ãã¾ãã
- ä½ç½®æå®è¦ç´ ã¯ã¢ã³ã«ã¼ã«åºå®ãããç°ãªã
position-areaå¤ã«ãã£ã¦ã¢ã³ã«ã¼è¦ç´ ã®å¨å²ã®ç°ãªãå ´æã«é ç½®ããã¾ãã - æåã®æ
å ±ããã¯ã¹ã®
heightã¯ã¢ã³ã«ã¼è¦ç´ ã¨åãé«ãã«è¨å®ããã¦ãã¾ãã®ã§ãanchor-size(height)ã¯ã¢ã³ã«ã¼è¦ç´ ã®é«ããè¿ãã¾ããè¦ç´ ã®widthã¯ãanchor-size()颿°ãcalc()颿°å ã§ä½¿ç¨ããã¢ã³ã«ã¼è¦ç´ ã®å¹ ã® 2 åã«è¨å®ããã¾ããanchor-size(width)ã§ã¢ã³ã«ã¼è¦ç´ ã®å¹ ãåå¾ããããã 2 åãã¾ãã - 2 ã¤ç®ã®æ
å ±ããã¯ã¹ã®
heightã¯ãã¢ã³ã«ã¼è¦ç´ ã®é«ãã®80%ã«è¨å®ããã¦ãããåæ§ã®ææ³ãç¨ãããã¦ãã¾ãã - ãã¼ã¸ã³å¤ã¯ãã¢ã³ã«ã¼è¦ç´ ããæå®ãããè·é¢ã確ä¿ããããã«è¨è¼ããã¦ãã¾ãã
#infobox1 {
position-area: right;
height: anchor-size(height);
width: calc(anchor-size(width) * 2);
margin-left: 5px;
}
#infobox2 {
position-area: top span-right;
height: calc(anchor-size(height) / 1.25);
margin-bottom: 5px;
}
çµæ
ãã©ã¦ã¶ã¼ã®ãã¼ã«ã使ç¨ãã¦ãä½ç½®æå®ãããè¦ç´ ãæ¤æ»ãã¦ãã ãããæåã®æ
å ±ããã¯ã¹ã¯é«ã 50pxãå¹
200pxã§ã2 ã¤ç®ã®æ
å ±ããã¯ã¹ã¯é«ã 40pxãå¹
ã¯ããã©ã«ãã§ max-content ã¨ãªãã¾ãã
ä½ç½®æå®ã¨ãã¼ã¸ã³ã®ä¾
anchor-size() ã®ä½ç½®ã¨ãã¼ã¸ã³ã®ä¾ãåç
§ãã¦ãã ããã
仿§æ¸
| 仿§æ¸ |
|---|
| CSS Anchor Positioning Module Level 1 > # anchor-size-fn > |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
anchor-nameposition-anchoranchor()颿°- CSS ã¢ã³ã«ã¼ä½ç½®æå®ã®ä½¿ç¨
- CSS ã¢ã³ã«ã¼ä½ç½®æå®ã¢ã¸ã¥ã¼ã«