@position-try
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.
@position-try 㯠CSS ã®ã¢ããã«ã¼ã«ã§ãã¢ã³ã«ã¼ä½ç½®æå®ãããè¦ç´ ã®ä½ç½®æå®ã¨é
ç½®ãå®ç¾©ããããã«ä½¿ç¨ãããã¨ãã§ãã¾ããç¬èªã®ä½ç½®æå®è©¦è¡ãã©ã¼ã«ããã¯ãªãã·ã§ã³ãå®ç¾©ããããã«ä½¿ç¨ããã¾ããã¢ã³ã«ã¼è¦ç´ ã«ã¯ãposition-try-fallbacks ããããã£ã¾ã㯠position-try 䏿¬æå®ãä»ãã¦ã1 ã¤ä»¥ä¸ã®ä½ç½®æå®ã®ä»£æ¿ãªãã·ã§ã³ã»ãããé©ç¨ã§ãã¾ããä½ç½®æå®ãããè¦ç´ ãããã®å
å«ãããã¯ã¾ãã¯ãã¥ã¼ãã¼ããããªã¼ãã¼ããã¼ãå§ããä½ç½®ã«ç§»åãããã¨ããã©ã¦ã¶ã¼ã¯ä½ç½®æå®ãããè¦ç´ ãå®å
¨ã«ç»é¢å
ã«åããæåã®ä½ç½®æå®ã®ä»£æ¿ãªãã·ã§ã³ã鏿ãã¾ãã
ããããã®ä½ç½®ãªãã·ã§ã³ã¯ <dashed-ident> ã§åä»ããããã¤ã³ã»ããä½ç½®ããã¼ã¸ã³ããµã¤ãºãèªå·±é
ç½®ãªã©ã®æ
å ±ãå®ç¾©ãã宣è¨ãæå®ããè¨è¿°åãªã¹ããå«ã¿ã¾ãã<dashed-ident> ã¯ãposition-try-fallbacks ããããã£ããã³ position-try 䏿¬æå®ã«ããã¦ã«ã¹ã¿ã ä½ç½®ãªãã·ã§ã³ãåç
§ããããã«ä½¿ç¨ããã¾ãã
ã¢ã³ã«ã¼æ©è½ã®è©³ç´°æ å ±ã¨ä½ç½®è©¦è¡ä»£æ¿æ©è½ã®ä½¿ç¨æ¹æ³ã«ã¤ãã¦ã¯ãCSS ã¢ã³ã«ã¼ä½ç½®æå®ã¢ã¸ã¥ã¼ã«ããã³CSS ã¢ã³ã«ã¼ä½ç½®æå®ã®ä½¿ç¨æ¹æ³ã¬ã¤ããåç §ãã¦ãã ããã
æ§æ
@position-try --try-option-name {
descriptor-list
}
ã¡ã¢:
--try-option-name ã¯ãã«ã¹ã¿ã ä½ç½®æå®ãªãã·ã§ã³ã®èå¥åãæå®ãã <dashed-ident> ã§ããããã«ããããã®ä»£æ¿ãªãã·ã§ã³ã position-try-fallbacks ãªã¹ãã«è¿½å ãããã¨ãã§ãã¾ãã
è¨è¿°å
è¨è¿°åã¯ãã«ã¹ã¿ã ä½ç½®æå®ãªãã·ã§ã³ã®åä½ãå®ç¾©ããããããã£å¤ãæå®ãã¾ããã¤ã¾ããä½ç½®æå®è¦ç´ ãé ç½®ãããå ´æã決å®ãã¾ãã
position-anchor-
position-anchorããããã£ã®å¤ãæå®ããä½ç½®æå®è¦ç´ ãåºå®ãããã¢ã³ã«ã¼è¦ç´ ãå®ç¾©ãã¾ããããã¯ã<dashed-ident>ã§ã¢ã³ã«ã¼è¦ç´ ã®anchor-nameããããã£ã®å¤ã¨çããå¤ãæå®ãããã¨ã§è¡ããã¾ãã position-area-
ã¢ã³ã«ã¼ä½ç½®æå®è¦ç´ ã®ä½ç½®ãã¢ã³ã«ã¼ã«å¯¾ããç¸å¯¾ä½ç½®ã§å®ç¾©ãã
position-areaããããã£ã®å¤ãæå®ãã¾ãã - ã¤ã³ã»ããããããã£è¨è¿°å
-
anchor()颿°ã®å¤ãæå®ããã¢ã³ã«ã¼ä½ç½®æå®è¦ç´ ã®ç«¯ã®ä½ç½®ããã¢ã³ã«ã¼è¦ç´ ã®ç«¯ã«å¯¾ããç¸å¯¾ä½ç½®ã§å®ç¾©ãã¾ããã¤ã³ã»ããããããã£è¨è¿°åã¯ã以ä¸ã®ããããã£ã表ãããã«è¨å®ã§ãã¾ãã - ãã¼ã¸ã³ããããã£è¨è¿°å
-
ã¢ã³ã«ã¼ä½ç½®æå®ãããè¦ç´ ã«è¨å®ããããã¼ã¸ã³ãæå®ãã¾ãããã¼ã¸ã³ããããã£è¨è¿°åã¯ã以ä¸ã®ããããã£ã表ãããã«è¨å®ã§ãã¾ãã
- ãµã¤ãºããããã£è¨è¿°å
-
anchor-size()颿°ã®å¤ãæå®ããã¢ã³ã«ã¼è¦ç´ ã®ãµã¤ãºã«å¯¾ããã¢ã³ã«ã¼ä½ç½®æå®è¦ç´ ã®ãµã¤ãºãå®ç¾©ãã¾ãã以ä¸ã®ããããã£ã表ããµã¤ãºæå®ããããã£è¨è¿°åãè¨å®ã§ãã¾ãã - èªå·±é ç½®ããããã£è¨è¿°å
-
anchor-centerå¤ãæå®ãã¦ãã¢ã³ã«ã¼ä½ç½®æå®è¦ç´ ãããããã¯æ¹åã¾ãã¯ã¤ã³ã©ã¤ã³æ¹åã«ããã¦ãã¢ã³ã«ã¼è¦ç´ ã®ä¸å¿ã«å¯¾ãã¦é ç½®ãã¾ããalign-selfããã³justify-selfè¨è¿°åã¯anchor-centerå¤ãå°ããã¨ãã§ãã¾ãã
ã¡ã¢:
ã«ã¹ã¿ã ä½ç½®ãªãã·ã§ã³ãè¦ç´ ã«é©ç¨ãããã¨ã@position-try ã¢ããã«ã¼ã«è¨è¿°åã§å®ç¾©ãããããããã£å¤ã¯ãæ¨æºç㪠CSS ããããã£ãä»ãã¦è¦ç´ ã«è¨å®ãããå¤ãããåªå
ããã¾ãã
形弿æ³
@position-try =
@position-try <dashed-ident> { <declaration-list> }
ä¾
>ã«ã¹ã¿ã ä½ç½®æå®ãªãã·ã§ã³ã®ä½¿ãæ¹
ãã®ä¾ã§ã¯ãã¢ã³ã«ã¼è¦ç´ ã¨ä½ç½®æå®è¦ç´ ãå®ç¾©ãã4 ã¤ã®ååä»ãã«ã¹ã¿ã ä½ç½®æå®ã®è©¦è¡ä»£æ¿ãªãã·ã§ã³ãçæãã¾ãããããã®ãªãã·ã§ã³ã¯ä½ç½®æå®è¦ç´ ã«é©ç¨ãããã¢ã³ã«ã¼è¦ç´ ããã¥ã¼ãã¼ãå ã®ã©ãã«ãã£ã¦ãããã®ã³ã³ãã³ãã常ã«ç¢ºå®ã«è¡¨ç¤ºãããããã«ãã¾ãã
HTML
ããã§ã¯ 2 ã¤ã® <div> è¦ç´ ãè¨ç½®ãããããã¢ã³ã«ã¼ã¨ã¢ã³ã«ã¼ä½ç½®æå®è¦ç´ ã¨ãªãã¾ãã
<div class="anchor">âï¸</div>
<div class="infobox">
<p>ããã¯æ
å ±ããã¯ã¹ã§ãã</p>
</div>
CSS
ã¾ã <body> è¦ç´ ãã¨ã¦ã大ããã¹ã¿ã¤ã«è¨å®ããã¢ã³ã«ã¼è¦ç´ ã¨ä½ç½®æå®è¦ç´ ããã¥ã¼ãã¼ãå
ã§æ°´å¹³æ¹åã¨åç´æ¹åã®ä¸¡æ¹ã«ã¹ã¯ãã¼ã«å¯è½ã«ãã¾ãã
body {
width: 1500px;
height: 500px;
}
ã¢ã³ã«ã¼ã«ã¯ anchor-name ãæå®ãããposition å¤ã¨ã㦠absolute ãè¨å®ããã¾ããæ¬¡ã«ãtop 㨠left ã®å¤ã使ç¨ãã¦ãåæã® <body> ã¬ã³ããªã³ã°ã®ä¸å¤®ä»è¿ã«é
ç½®ãã¾ãã
.anchor {
anchor-name: --my-anchor;
position: absolute;
top: 100px;
left: 350px;
}
次ã«ã@position-try ã¢ããã«ã¼ã«ã使ç¨ãã¦ã4ã¤ã®ç¬èªã®ä½ç½®ãªãã·ã§ã³ãå®ç¾©ãã¾ãããããããèå¥ãããã®ç®çãè¨è¿°ãããããããã <dashed-ident> ã«ããååãä»ãã¾ããããããã®ãªãã·ã§ã³ã¯ãä½ç½®æå®è¦ç´ ãã¢ã³ã«ã¼è¦ç´ ã®å¨å²ã®ç¹å®ã®ä½ç½®ã«é
ç½®ããä½ç½®æå®è¦ç´ ã¨ãã®ã¢ã³ã«ã¼è¦ç´ ã®éã«é©å㪠10px ã®ãã¼ã¸ã³ãè¨å®ãã¾ããä½ç½®æå®æ¹æ³ã¯æ§ã
ãªææ³ã§å¦çãããå©ç¨ã§ããç°ãªããã¯ããã¯ã示ãããã§ãã
- æåã¨æå¾ã®ä½ç½®ãªãã·ã§ã³ã¯
position-areaã使ç¨ãã¦ãã¾ãã - 2 çªç®ã®ä½ç½®ãªãã·ã§ã³ã¯
topã§anchor()å¤ã使ç¨ããjustify-self: anchor-centerãç¨ãã¦ãä½ç½®æå®è¦ç´ ãã¢ã³ã«ã¼ã«å¯¾ãã¦ã¤ã³ã©ã¤ã³æ¹åã«ä¸å¤®æããã¾ãã - 3 çªç®ã®ä½ç½®ãªãã·ã§ã³ã§ã¯ã
leftã«anchor()å¤ã使ç¨ãããããcalc()颿°ã§å²ãã§10pxã®ç©ºéã追å ãã¦ãã¾ãï¼ä»ã®ãªãã·ã§ã³ã®ããã«marginã§ééã使ããã®ã§ã¯ãªãï¼ããã®å¾ãalign-self: anchor-centerã使ç¨ãã¦ãä½ç½®æå®è¦ç´ ããããã¯æ¹åã«ããã¦ã¢ã³ã«ã¼ã«å¯¾ãã¦ä¸å¤®æãã«ãã¾ãã
æå¾ã«ãå·¦å³ã®ä½ç½®æå®ãªãã·ã§ã³ã®å ´åã¯ãwidth ãããçãæå®ãã¾ãã
@position-try --custom-left {
position-area: left;
width: 100px;
margin-right: 10px;
}
@position-try --custom-bottom {
top: anchor(bottom);
justify-self: anchor-center;
margin-top: 10px;
position-area: none;
}
@position-try --custom-right {
left: calc(anchor(right) + 10px);
align-self: anchor-center;
width: 100px;
position-area: none;
}
@position-try --custom-bottom-right {
position-area: bottom right;
margin: 10px 0 0 10px;
}
æ
å ±ããã¯ã¹ã«ã¯åºå®ä½ç½®æå®ãæå®ãããposition-anchor ã§ã¢ã³ã«ã¼åã® anchor-name ãåç
§ãã¦ä¸¡è
ãé¢é£ä»ããããã« position-area ãç¨ãã¦ã¢ã³ã«ã¼ã®ä¸ç«¯ã«åºå®ãã¾ããåæã«åºå®å¹
ã® width ã¨ããããã®ä¸æ¹åã®ãã¼ã¸ã³ margin ãè¨å®ãã¾ããã«ã¹ã¿ã ä½ç½®æå®ãªãã·ã§ã³ã¯ position-try-fallbacks ããããã£ã§åç
§ãããã¢ã³ã«ã¼ããã¥ã¼ãã¼ãã®ç«¯ã«è¿ã¥ããéã«ä½ç½®æå®è¦ç´ ãããµãããã¹ã¯ãã¼ã«ã§è¡¨ç¤ºç¯å²å¤ã«ãªã£ããããã®ãé²ãã¾ãã
.infobox {
position: fixed;
position-anchor: --my-anchor;
position-area: top;
width: 200px;
margin-bottom: 10px;
position-try-fallbacks:
--custom-left, --custom-bottom, --custom-right, --custom-bottom-right;
}
çµæ
ãã¼ã¸ãã¹ã¯ãã¼ã«ããã¨ãã¢ã³ã«ã¼ããã¥ã¼ãã¼ãã®ç°ãªã端ã«è¿ã¥ãã«ã¤ãã¦ãä½ç½®æå®è¦ç´ ã®é ç½®ãå¤åãããã¨ã«æ°ã¥ãã§ããããããã¯ãç°ãªã代æ¿é ç½®ãªãã·ã§ã³ãé©ç¨ãããããã§ãã
ãããã®ãã¸ã·ã§ã³ãªãã·ã§ã³ãã©ã®ããã«æ©è½ãããã詳ãã説æãã¾ãããã
- ã¾ããããã©ã«ãã®ä½ç½®ã¯
position-area: topã§å®ç¾©ããã¦ãããã¨ã«æ³¨æãã¦ãã ãããæ å ±ããã¯ã¹ãã©ã®æ¹åã«ããã¼ã¸ããã¯ã¿åºãã¦ããªãå ´åãæ å ±ããã¯ã¹ã¯ã¢ã³ã«ã¼ã®ä¸ã«é ç½®ãããposition-try-fallbacksããããã£ã§è¨å®ãããä½ç½®ã®ä»£æ¿ãªãã·ã§ã³ã¯ç¡è¦ããã¾ããã¾ããæ å ±ããã¯ã¹ã«ã¯åºå®å¹ ã¨ä¸ãã¼ã¸ã³ãè¨å®ããã¦ããç¹ã«ã注æãã¦ãã ããããããã®å¤ã¯ãç°ãªãä½ç½®ã®ä»£æ¿ãªãã·ã§ã³ãé©ç¨ãããã«ã¤ãã¦å¤åãã¾ãã - æ
å ±ããã¯ã¹ããªã¼ãã¼ããã¼ãå§ããå ´åããã©ã¦ã¶ã¼ã¯ã¾ã
--custom-leftã®ä½ç½®ã試è¡ãã¾ããããã«ããposition-area: leftã使ç¨ãã¦æ å ±ããã¯ã¹ãã¢ã³ã«ã¼ã®å·¦å´ã«ç§»åãããã¼ã¸ã³ã調æ´ããã¨åæã«ãæ å ±ããã¯ã¹ã®å¹ ã夿´ãã¾ãã - 次ã«ããã©ã¦ã¶ã¼ã¯
--custom-bottomä½ç½®ã試è¡ãã¾ããããã¯position-areaã§ã¯ãªãtopã¨justify-selfã使ç¨ãã¦æ å ±ããã¯ã¹ãã¢ã³ã«ã¼ã®ä¸é¨ã«ç§»åããé©åãªãã¼ã¸ã³ãè¨å®ãã¾ããwidthè¨è¿°åãè¨è¼ãã¦ããªããããæ å ±ããã¯ã¹ã¯widthããããã£ã§è¨å®ãããããã©ã«ãå¹200pxã«æ»ãã¾ãã - ãã©ã¦ã¶ã¼ã¯æ¬¡ã«
--custom-rightä½ç½®ã試è¡ãã¾ããããã¯--custom-leftä½ç½®ã¨ã»ã¼åæ§ã«åä½ããåãwidthè¨è¿°åå¤ãé©ç¨ããã¾ãããã ããposition-areaã§ã¯ãªãleftã¨align-selfã使ç¨ãã¦ä½ç½®æå®è¦ç´ ãé ç½®ãã¾ããã¾ããleftå¤ãcalc()颿°ã§ã©ãããããã®å é¨ã§10pxãå ç®ãã¦ç©ºéãçæãã¦ãã¾ããããã¯marginã使ç¨ãã代ããã«å®æ½ãã¦ãã¾ãã - ä»ã®è©¦è¡ä»£æ¿ãªãã·ã§ã³ã®ãããããä½ç½®æå®è¦ç´ ã®ãªã¼ãã¼ããã¼ã忢ããããã¨ã«æåããªãå ´åããã©ã¦ã¶ã¼ã¯æçµææ®µã¨ãã¦
--custom-bottom-rightä½ç½®ã試è¡ãã¾ããããã¯position-area: bottom rightã使ç¨ãã¦ãä½ç½®æå®è¦ç´ ãã¢ã³ã«ã¼ã®å³ä¸ã«é ç½®ãã¾ãã
ä½ç½®ãªãã·ã§ã³ãé©ç¨ãããã¨ããã®å¤ã¯ä½ç½®æå®è¦ç´ ã«è¨å®ãããåæå¤ã䏿¸ããã¾ããä¾ãã°ãä½ç½®æå®è¦ç´ ã«åæè¨å®ããã width 㯠200px ã§ããã--custom-right ä½ç½®ãªãã·ã§ã³ãé©ç¨ãããã¨ããã®å¹
㯠100px ã«è¨å®ããã¾ãã
å ´åã«ãã£ã¦ã¯ãåæå¤ãç¡å¹åããããã«ç¬èªã®ä½ç½®ãªãã·ã§ã³å
ã§å¤ãè¨å®ããå¿
è¦ãããå ´åãããã¾ãã--custom-bottom ããã³ --custom-right ãªãã·ã§ã³ã¯ãä½ç½®æå®è¦ç´ ãé
ç½®ããããã« inset ããããã£ã¨ *-self: anchor-center å¤ã使ç¨ãã¾ãããã®ãããããããã®å ´åã§ position-area: none ãè¨å®ãããã¨ã§ãååè¨å®ããã position-area å¤ãé¤å»ãã¾ãããããå®è¡ããªãã£ãå ´åãåæè¨å®ã® position-area: top å¤ãå¼ãç¶ãæå¹ã¨ãªããä»ã®ä½ç½®æå®æ
å ±ã¨å¹²æ¸ãã¾ãã
仿§æ¸
| Specification |
|---|
| CSS Anchor Positioning Module Level 1> # at-ruledef-position-try> |