@container
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2023å¹´2æ.
* Some parts of this feature may have varying levels of support.
@container 㯠CSS ã®ã¢ããã«ã¼ã«ã§ãã³ã³ããã¼ã³ã³ããã¹ãã«ã¹ã¿ã¤ã«ãé©ç¨ããæ¡ä»¶ä»ãã°ã«ã¼ãã«ã¼ã«ã§ãã
ã¹ã¿ã¤ã«å®£è¨ã¯æ¡ä»¶ã«ãã£ã¦ãã£ã«ã¿ãªã³ã°ãããæ¡ä»¶ãçã®å ´åã«ã³ã³ããã¼ã«é©ç¨ããã¾ãã
ãã®æ¡ä»¶ã¯ãã¯ã¨ãªã¼ãããã³ã³ããã¼ã®ãµã¤ãºã<style-feature>ãã¹ã¯ãã¼ã«ç¶æ
ã®ãããããå¤åããã¨ãã«è©ä¾¡ããã¾ãã
æ¡ä»¶ã«ã¯ãcontainer-name 㨠<container-query> ã®ã©ã¡ããããããã¯ä¸¡æ¹ãæå®ããå¿
è¦ãããã¾ãã
container-name ããããã£ã¯ãã¯ã¨ãªã¼ã³ã³ããã¼ã®ååã®ãªã¹ããæå®ãã¾ãããããã®ååã¯ã対象ã¨ãªãã¯ã¨ãªã¼ã³ã³ããã¼ããã£ã«ã¿ã¼ããããã«ã@container ã«ã¼ã«ã§ä½¿ç¨ãããã¨ãã§ãã¾ãã
<container-query> å
ã®ã³ã³ããã¼æ©è½ã¯ã鏿ãããã³ã³ããã¼ã«å¯¾ãã¦è©ä¾¡ããã¾ãã
<container-name> ãæå®ããã¦ããªãå ´åã<container-query> ã®æ©è½ã¯ãä¸è´ãã container-type ãæã¤ãæãè¿ã親ã®ã¯ã¨ãªã¼ã³ã³ããã¼ã«å¯¾ãã¦è©ä¾¡ããã¾ãã
<container-query>ãæå®ããã¦ããªãå ´åãååä»ãã³ã³ããã¼ã鏿ããã¾ãã
æ§æ
/* <size-query> ä»ã */
@container (width > 400px) {
h2 {
font-size: 1.5em;
}
}
/* ãªãã·ã§ã³ã® <container-name> ä»ã */
@container tall (height > 30rem) {
p {
line-height: 1.6;
}
}
/* <container-name> ã®ã¿ï¼ã¯ã¨ãªã¼ã¯ãªãã·ã§ã³ï¼ */
@container sidebar {
h2 {
background: blue;
}
}
/* <scroll-state> ä»ã */
@container scroll-state(scrollable: top) {
.back-to-top-link {
visibility: visible;
}
}
/* <container-name> ããã³ <scroll-state> ä»ã */
@container sticky-heading scroll-state(stuck: top) {
h2 {
background: purple;
color: white;
}
}
/* åä¸ã®æ¡ä»¶ã§è¤æ°ã®ã¯ã¨ãªã¼ */
@container (width > 400px) and style(--responsive: true) {
h2 {
font-size: 1.5em;
}
}
/* æ¡ä»¶ãªã¹ã */
@container card (width > 400px), style(--responsive: true), scroll-state(stuck: top) {
h2 {
font-size: 1.5em;
}
}
å¤
<container-condition>-
ãªãã·ã§ã³ã®
<container-name>ããã³<container-query>ã æ¡ä»¶ãtrueã®å ´åããã®<stylesheet>ã§å®ç¾©ãããã¹ã¿ã¤ã«ãé©ç¨ããã¾ãã<container-name>çç¥å¯-
ãªãã·ã§ã³ãã¯ã¨ãªã¼ã
trueã¨è©ä¾¡ãããéã«ã¹ã¿ã¤ã«ãé©ç¨ãããã³ã³ããã¼ã®ååãã<ident>ã¨ãã¦æå®ãã¾ãã <container-query>çç¥å¯-
ã³ã³ããã¼ã®ãµã¤ãºã
<style-feature>ãã¹ã¯ãã¼ã«ç¶æ ã®ããããã夿´ãããéã«ãã¯ã¨ãªã¼ã³ã³ããã¼ã«å¯¾ãã¦è©ä¾¡ãããä¸é£ã®ç¹æ§ãæå®ãã¾ãã
ã³ã³ããã¼ã¯ã¨ãªã¼å ã®è«çãã¼ã¯ã¼ã
è«çãã¼ã¯ã¼ãã使ç¨ãã¦ã³ã³ããã¼æ¡ä»¶ãå®ç¾©ãããã¨ãã§ãã¾ãã
and㯠2 ã¤ä»¥ä¸ã®æ¡ä»¶ãçµåãã¾ããor㯠2 ã¤ä»¥ä¸ã®æ¡ä»¶ãçµåãã¾ããnotã¯æ¡ä»¶ãå¦å®ãã¾ããã³ã³ããã¼ã¯ã¨ãªã¼ããã 1 ã¤ã® 'not' æ¡ä»¶ã ãã許ããã¦ãããandã¾ãã¯orãã¼ã¯ã¼ãã¨åæã«ä½¿ç¨ãããã¨ã¯ã§ãã¾ããã
@container (width > 400px) and (height > 400px) {
/* <stylesheet> */
}
@container (width > 400px) or (height > 400px) {
/* <stylesheet> */
}
@container not (width < 400px) {
/* <stylesheet> */
}
ååä»ãã³ã³ããã¼ã³ã³ããã¹ã
ã³ã³ããã¼ã³ã³ããã¹ãã«ã¯ã container-name ããããã£ã使ç¨ãã¦ååãä»ãããã¨ãã§ãã¾ãã
.post {
container-name: sidebar;
container-type: inline-size;
}
ãã®ããã«ä½¿ç¨ãã䏿¬æå®æ§æã¯ container ã§ããã container: <name> / <type> ã¨ããå½¢å¼ã§ããä¾ãã°ãã®ããã«ãã¾ãã
.post {
container: sidebar / inline-size;
}
ã³ã³ããã¼ã¯ã¨ãªã¼ã§ã¯ã container-name ããããã£ã使ç¨ãã¦ãã¯ã¨ãªã¼ã³ã³ããã¼åã¨ä¸è´ããã³ã³ããã¼éåã«ãã£ã«ã¿ãªã³ã°ãã¾ãã
@container sidebar (width > 400px) {
/* <stylesheet> */
}
ä½¿ç¨æ³ãååã®å¶ç´ã®è©³ç´°ã¯ container-name ãã¼ã¸ã§èª¬æãã¦ãã¾ãã
è¨è¿°å
<container-condition> ã¯ã¨ãªã¼ã«ã¯ããµã¤ãºããã³ã¹ã¯ãã¼ã«ç¶æ
ãå
¥ãã¾ãã
ãµã¤ãºã³ã³ããã¼è¨è¿°å
<container-condition> ã«ã¯ã 1 ã¤ä»¥ä¸ã®è«çåã®ãµã¤ãºã¯ã¨ãªã¼ãå«ãããã¨ãã§ããããããã¯æ¬å¼§ã§å²ã¿ã¾ãããµã¤ãºã¯ã¨ãªã¼ã«ã¯ããµã¤ãºè¨è¿°åãå¤ãããã³è¨è¿°åã«å¿ãã¦æ¯è¼æ¼ç®åãå«ã¾ãã¾ããã¯ã¨ãªã¼ã§ã¯ã常ã«ã³ã³ãã³ãããã¯ã¹ãåºæºã¨ãã¦æ¸¬å®ãã¾ããè¤æ°ã®æ¡ä»¶ãå«ããå ´åã®æ§æã¯ã@media ãµã¤ãºæ©è½ã¯ã¨ãªã¼ã®å ´åã¨åãã§ãã
@container (min-width: 400px) {
/* ⦠*/
}
@container (orientation: landscape) and (width > 400px) {
/* ⦠*/
}
@container (15em <= block-size <= 30em) {
/* ⦠*/
}
aspect-ratio-
ã³ã³ããã¼ã®
aspect-ratioã¯ã<ratio>å¤ã¨ãã¦çºçããã³ã³ããã¼ã®é«ãã«å¯¾ããå¹ ã¨ãã¦è¨ç®ããã¾ãã block-size-
ã³ã³ããã¼ã®
block-sizeã<length>å¤ã§è¡¨ãããã®ã§ãã height-
ã³ã³ããã¼ã®é«ãã
<length>å¤ã§è¡¨ç¾ãããã®ã§ãã inline-size-
ã³ã³ããã¼ã®
inline-sizeã<length>å¤ã§è¡¨ãããã®ã§ãã orientation-
ã³ã³ããã¼ã®æ¹åã§ã
landscapeã¾ãã¯portraitã®ã©ã¡ããã§ãã width-
ã³ã³ããã¼ã®å¹ ã
<length>å¤ã§è¡¨ãããã®ã§ãã
ã¹ã¯ãã¼ã«ç¶æ ã³ã³ããã¼è¨è¿°å
ã¹ã¯ãã¼ã«ç¶æ
ã³ã³ããã¼è¨è¿°åã¯ãscroll-state ãã¼ã¯ã¼ãã«ç¶ãæ¬å¼§ã®ã»ããå
ã® <container-condition> å
ã§æå®ãã¾ããä¾ãã°ã
@container scroll-state(scrollable: top) {
/* ⦠*/
}
@container scroll-state(scrolled: block-end) {
/* ⦠*/
}
@container scroll-state(stuck: inline-end) {
/* ⦠*/
}
@container scroll-state(snapped: both) {
/* ⦠*/
}
ã¹ã¯ãã¼ã«ç¶æ ã³ã³ããã¼è¨è¿°åã«å¯¾å¿ãã¦ãããã¼ã¯ã¼ãã«ã¯ãç©çå¤ããã³ããã¼ç¸å¯¾å¤ãå«ã¾ãã¾ãã
scrollable-
ã¹ã¯ãã¼ã«ãã¼ããã©ãã°ãããããã©ãã¯ãããã®ã¸ã§ã¹ãã£ã¼ã使ç¨ãããã¨ãã£ããã¦ã¼ã¶ã¼ã«ããã¹ã¯ãã¼ã«ã«ãã£ã¦ãã³ã³ããã¼ãæå®ããæ¹åã«ã¹ã¯ãã¼ã«ã§ãããã©ãããåãåããã¾ããã¤ã¾ããæå®ããæ¹åã«ã¹ã¯ãã¼ã«ã§ããã³ã³ãã³ããããµãã¦ãããã©ããã§ããæå¹ãª
scrollableå¤ã«ã¯ã次ã®ãã¼ã¯ã¼ããå«ãããã¨ãã§ãã¾ããnone-
ãã®ã³ã³ããã¼ãã¹ã¯ãã¼ã«ã³ã³ããã¼ã§ãªããããã®ä»ã®çç±ã§ã©ã®æ¹åã«ãã¹ã¯ãã¼ã«ã§ããªãå ´åã
top-
ãã®ã³ã³ããã¼ã䏿¹åã«ã¹ã¯ãã¼ã«å¯è½ã§ããå ´åã
right-
ãã®ã³ã³ããã¼ã峿¹åã«ã¹ã¯ãã¼ã«å¯è½ã§ããå ´åã
bottom-
ãã®ã³ã³ããã¼ã䏿¹åã«ã¹ã¯ãã¼ã«å¯è½ã§ããå ´åã
left-
ãã®ã³ã³ããã¼ãå·¦æ¹åã«ã¹ã¯ãã¼ã«å¯è½ã§ããå ´åã
x-
ãã®ã³ã³ããã¼ãå·¦æ¹åã¨å³æ¹åã®ä¸æ¹ã¾ãã¯ä¸¡æ¹ã«æ°´å¹³ã«ã¹ã¯ãã¼ã«å¯è½ã§ããå ´åã
y-
ãã®ã³ã³ããã¼ã䏿¹åã¨ä¸æ¹åã®ä¸æ¹ã¾ãã¯ä¸¡æ¹ã«åç´ã«ã¹ã¯ãã¼ã«å¯è½ã§ããå ´åã
block-start-
ãã®ã³ã³ããã¼ããããã¯ã®å é æ¹åã«ã¹ã¯ãã¼ã«å¯è½ã§ããå ´åã
block-end-
ãã®ã³ã³ããã¼ããããã¯ã®æ«å°¾æ¹åã«ã¹ã¯ãã¼ã«å¯è½ã§ããå ´åã
inline-start-
ãã®ã³ã³ããã¼ãã¤ã³ã©ã¤ã³ã®å é æ¹åã«ã¹ã¯ãã¼ã«å¯è½ã§ããå ´åã
inline-end-
ãã®ã³ã³ããã¼ãã¤ã³ã©ã¤ã³ã®æ«å°¾æ¹åã«ã¹ã¯ãã¼ã«å¯è½ã§ããå ´åã
block-
ãã®ã³ã³ããã¼ããããã¯ã®å é æ¹åã¨æ«å°¾æ¹åã®ä¸æ¹ã¾ãã¯ä¸¡æ¹ã«ã¹ã¯ãã¼ã«å¯è½ã§ããå ´åã
inline-
ãã®ã³ã³ããã¼ãã¤ã³ã©ã¤ã³ã®å é æ¹åã¨æ«å°¾æ¹åã®ä¸æ¹ã¾ãã¯ä¸¡æ¹ã«ã¹ã¯ãã¼ã«å¯è½ã§ããå ´åã
æ¡ä»¶ãæºããã¨ã
@containerãããã¯å ã®ã«ã¼ã«ãã¹ã¯ãã¼ã«ã³ã³ããã¼ã®åå«ã«é©ç¨ããã¾ããæ¹åã«é¢ä¿ãªããã³ã³ããã¼ãã¹ã¯ãã¼ã«å¯è½ãã©ãããè©ä¾¡ããã«ã¯ã
notæ¼ç®åã¨noneå¤ã使ç¨ãã¦ãã ãããcss@container not scroll-state(scrollable: none) { /* ⦠*/ } scrolled-
ã³ã³ããã¼ãæå¾ã«æå®ãããæ¹åã«ã¹ã¯ãã¼ã«ããããã©ããã調ã¹ã¾ããæå¹ãª
scrolledã®å¤ã«ã¯ã以ä¸ã®ãã¼ã¯ã¼ããå«ã¾ãã¾ããnone-
ãã®ã³ã³ããã¼ãã¹ã¯ãã¼ã«ã³ã³ããã¼ã§ãªããããã®ä»ã®çç±ã§ã©ã®æ¹åã«ãã¹ã¯ãã¼ã«ã§ããªãå ´åã
top-
ãã®ã³ã³ããã¼ãæå¾ã«ä¸æ¹åã«ã¹ã¯ãã¼ã«ããå ´åã
right-
ãã®ã³ã³ããã¼ãæå¾ã«å³æ¹åã«ã¹ã¯ãã¼ã«ããå ´åã
bottom-
ãã®ã³ã³ããã¼ãæå¾ã«ä¸æ¹åã«ã¹ã¯ãã¼ã«ããå ´åã
left-
ãã®ã³ã³ããã¼ãæå¾ã«å·¦æ¹åã«ã¹ã¯ãã¼ã«ããå ´åã
x-
ãã®ã³ã³ããã¼ãæå¾ã«å·¦æ¹åã¨å³æ¹åã®ä¸æ¹ã¾ãã¯ä¸¡æ¹ã«æ°´å¹³ã«ã¹ã¯ãã¼ã«ããå ´åã
y-
ãã®ã³ã³ããã¼ãæå¾ã«ä¸æ¹åã¨ä¸æ¹åã®ä¸æ¹ã¾ãã¯ä¸¡æ¹ã«åç´ã«ã¹ã¯ãã¼ã«ããå ´åã
block-start-
ãã®ã³ã³ããã¼ãæå¾ã«ãããã¯ã®å é æ¹åã«ã¹ã¯ãã¼ã«ããå ´åã
block-end-
ãã®ã³ã³ããã¼ãæå¾ã«ãããã¯ã®æ«å°¾æ¹åã«ã¹ã¯ãã¼ã«ããå ´åã
inline-start-
ãã®ã³ã³ããã¼ãæå¾ã«ã¤ã³ã©ã¤ã³ã®å é æ¹åã«ã¹ã¯ãã¼ã«ããå ´åã
inline-end-
ãã®ã³ã³ããã¼ãæå¾ã«ã¤ã³ã©ã¤ã³ã®æ«å°¾æ¹åã«ã¹ã¯ãã¼ã«ããå ´åã
block-
ãã®ã³ã³ããã¼ãæå¾ã«ãããã¯ã®å é æ¹åã¨æ«å°¾æ¹åã®ä¸æ¹ã¾ãã¯ä¸¡æ¹ã«ã¹ã¯ãã¼ã«ããå ´åã
inline-
ãã®ã³ã³ããã¼ãæå¾ã«ã¤ã³ã©ã¤ã³ã®å é æ¹åã¨æ«å°¾æ¹åã®ä¸æ¹ã¾ãã¯ä¸¡æ¹ã«ã¹ã¯ãã¼ã«ããå ´åã
æ¡ä»¶ãæºããã¨ã
@containerãããã¯å ã®ã«ã¼ã«ãã¹ã¯ãã¼ã«ã³ã³ããã¼ã®åå«ã«é©ç¨ããã¾ããæ¹åã«é¢ä¿ãªããã³ã³ããã¼ãã¹ã¯ãã¼ã«ãããã©ãããè©ä¾¡ããã«ã¯ã
noneå¤ãnotæ¼ç®åã§ä½¿ç¨ãã¦ãã ãããcss@container not scroll-state(scrolled: none) { /* ⦠*/ } snapped-
ã³ã³ããã¼ããæå®ãããè»¸ã«æ²¿ã£ã¦ã¹ã¯ãã¼ã«ã¹ãããã³ã³ããã¼ã®ç¥å ã«ã¹ãããããã¦ããããã¾ãã¯ã¹ãããããããã©ãããåãåããã¾ããæå¹ãª
snappedã®å¤ã¨ãã¦ã¯ã次ã®ãã¼ã¯ã¼ããããã¾ããnone-
ã³ã³ããã¼ã¯ããã®è¦ªã¹ã¯ãã¼ã«ã³ã³ããã¼ã®ã¹ã¯ãã¼ã«ã¹ãããã¿ã¼ã²ããã§ã¯ããã¾ããã
snapped: noneã¯ã¨ãªã¼ãå®è£ ãã¦ããå ´åãã¹ã¯ãã¼ã«ã³ã³ããã¼ã®ã¹ãããã¿ã¼ã²ããã§ããã³ã³ããã¼ã«ã¯@containerã¹ã¿ã¤ã«ã¯é©ç¨ããã¾ããããã¹ãããã¿ã¼ã²ããã§ã¯ãªãã³ã³ããã¼ã«ã¯ã¹ã¿ã¤ã«ãé©ç¨ããã¾ãã x-
ãã®ã³ã³ããã¼ã¯ããã®è¦ªã¹ã¯ãã¼ã«ã³ã³ããã¼ã®æ°´å¹³ã¹ã¯ãã¼ã«ã¹ãããã¿ã¼ã²ããã§ããã¤ã¾ãã親ã³ã³ããã¼ã«å¯¾ãã¦æ°´å¹³æ¹åã«ã¹ããããã¾ãã
y-
ãã®ã³ã³ããã¼ã¯ããã®è¦ªã¹ã¯ãã¼ã«ã³ã³ããã¼ã®åç´ã¹ã¯ãã¼ã«ã¹ãããã¿ã¼ã²ããã§ããã¤ã¾ãã親ã³ã³ããã¼ã«å¯¾ãã¦åç´æ¹åã«ã¹ããããã¾ãã
block-
ãã®ã³ã³ããã¼ã¯ããã®è¦ªã¹ã¯ãã¼ã«ã³ã³ããã¼ã®ãããã¯è»¸ã®ã¹ã¯ãã¼ã«ã¹ãããã¿ã¼ã²ããã§ããã¤ã¾ãã親ã³ã³ããã¼ã«å¯¾ãã¦ãããã¯æ¹åã«ã¹ããããã¾ãã
inline-
ãã®ã³ã³ããã¼ã¯ããã®è¦ªã¹ã¯ãã¼ã«ã³ã³ããã¼ã®ã¤ã³ã©ã¤ã³è»¸ã®ã¹ã¯ãã¼ã«ã¹ãããã¿ã¼ã²ããã§ããã¤ã¾ãã親ã³ã³ããã¼ã«å¯¾ãã¦ã¤ã³ã©ã¤ã³æ¹åã«ã¹ããããã¾ãã
both-
ã³ã³ããã¼ã¯ããã®è¦ªã¹ã¯ãã¼ã«ã³ã³ããã¼ã®æ°´å¹³æ¹åããã³åç´æ¹åã®ã¹ã¯ãã¼ã«ã¹ãããã¿ã¼ã²ããã§ããã両æ¹åã«è¦ªã«ã¹ããããã¾ããã³ã³ããã¼ã¯ã水平軸ã¾ãã¯åç´è»¸ã«æ²¿ã£ã¦è¦ªã«ã¹ãããããã ãã§ã¯ä¸è´ãã¾ããã両æ¹ã§ããå¿ è¦ãããã¾ãã
none以å¤ã®snappedã®ã¹ã¯ãã¼ã«ç¶æ ã®ã¯ã¨ãªã¼ã§ã³ã³ããã¼ãè©ä¾¡ããã«ã¯ããã®ã³ã³ããã¼ã¯ãnone以å¤ã®scroll-snap-typeå¤ãæã¤ã¹ã¯ãã¼ã«ã³ã³ããã¼ãç¥å ã¨ããã³ã³ããã¼ã§ãªããã°ãªãã¾ãããsnapped: noneã¯ã¨ãªã¼ã¯ãã¹ã¯ãã¼ã«ã³ã³ããã¼ã®ç¥å ããªãå ´åã§ãä¸è´ãã¾ããè©ä¾¡ã¯ãã¹ã¯ãã¼ã«ã¹ãããã³ã³ããã¼ã§
scrollsnapchangingã¤ãã³ããçºçããã¨è¡ããã¾ããæ¡ä»¶ãæºããã¨ã@containerãããã¯å ã®ã«ã¼ã«ãã³ã³ããã¼ã®åå«ã«é©ç¨ããã¾ããæ¹åã«é¢ä¿ãªããã³ã³ããã¼ãã¹ãããã¿ã¼ã²ããã§ãããã©ãããè©ä¾¡ããã«ã¯ã
notæ¼ç®åã¨ã¨ãã«noneå¤ã使ç¨ãã¾ããcss@container not scroll-state(snapped: none) { /* ⦠*/ } stuck-
positionå¤ãstickyã§ããã³ã³ããã¼ãããã®ã¹ã¯ãã¼ã«ã³ã³ããã¼ã®ç¥å ã®ç«¯ã«åºå®ããã¦ãããã©ãããåãåããã¾ããæå¹ãªstuckã®å¤ã«ã¯ã次ã®ãã¼ã¯ã¼ããããã¾ããnone-
ã³ã³ããã¼ã¯ããã®ã³ã³ããã¼ã®ã©ã®ç«¯ã«ãåºå®ããã¦ãã¾ãããã³ã³ããã¼ã«
position: stickyãè¨å®ããã¦ããªãã¦ããnoneã¯ã¨ãªã¼ã¯ä¸è´ãããã¨ã«æ³¨æãã¦ãã ããã top-
ã³ã³ããã¼ã¯ããã®ã³ã³ããã¼ã®ä¸ç«¯ã«åºå®ããã¦ãã¾ãã
right-
ã³ã³ããã¼ã¯ããã®ã³ã³ããã¼ã®å³ç«¯ã«åºå®ããã¦ãã¾ãã
bottom-
ã³ã³ããã¼ã¯ããã®ã³ã³ããã¼ã®ä¸ç«¯ã«åºå®ããã¦ãã¾ãã
left-
ã³ã³ããã¼ã¯ããã®ã³ã³ããã¼ã®å·¦ç«¯ã«åºå®ããã¦ãã¾ãã
block-start-
ã³ã³ããã¼ã¯ããã®ã³ã³ããã¼ã®ãããã¯æ¹åã®å é ã«åºå®ããã¦ãã¾ãã
block-end-
ã³ã³ããã¼ã¯ããã®ã³ã³ããã¼ã®ãããã¯æ¹åã®æ«å°¾ã«åºå®ããã¦ãã¾ãã
inline-start-
ã³ã³ããã¼ã¯ããã®ã³ã³ããã¼ã®ã¤ã³ã©ã¤ã³æ¹åã®å é ã«åºå®ããã¦ãã¾ãã
inline-end-
ã³ã³ããã¼ã¯ããã®ã³ã³ããã¼ã®ã¤ã³ã©ã¤ã³æ¹åã®æ«å°¾ã«åºå®ããã¦ãã¾ãã
none以å¤ã®stuckã¹ã¯ãã¼ã«ç¶æ ã¯ã¨ãªã¼ã§ã³ã³ããã¼ãè©ä¾¡ããã«ã¯ããã®ã³ã³ããã¼ã«position: stickyãè¨å®ããã¦ãããã¹ã¯ãã¼ã«ã³ã³ããã¼å ã«ããå¿ è¦ãããã¾ããæ¡ä»¶ãæç«ããã¨ã@containerãããã¯å ã®ã«ã¼ã«ãposition: stickyã³ã³ããã¼ã®åå«ã«é©ç¨ããã¾ããå対ã®è»¸ã® 2 ã¤ã®å¤ãåæã«ä¸è´ãããã¨ããããã¾ãã
css@container scroll-state((stuck: top) and (stuck: left)) { /* ⦠*/ }ãã ããå対å´ã®ç«¯ã® 2 ã¤ã®å¤ã¯ãåæã«ä¸è´ãããã¨ã¯ããã¾ããã
css@container scroll-state((stuck: left) and (stuck: right)) { /* ⦠*/ }æ¹åã«é¢ä¿ãªããã³ã³ããã¼ãã¹ã¿ãã¯ãã¦ãããã©ãããè©ä¾¡ããã«ã¯ã
noneå¤ãnotæ¼ç®åã¨ã¨ãã«ä½¿ç¨ãã¾ããcss@container not scroll-state(stuck: none) { /* ⦠*/ }
å ¬å¼å®ç¾©
@container =
@container <container-condition># { <block-contents> }
<container-condition> =
[ <container-name>? <container-query>? ]!
<container-name> =
<custom-ident>
<container-query> =
not <query-in-parens> |
<query-in-parens> [ [ and <query-in-parens> ]* | [ or <query-in-parens> ]* ]
<query-in-parens> =
( <container-query> ) |
( <size-feature> ) |
style( <style-query> ) |
scroll-state( <scroll-state-query> ) |
<general-enclosed>
<style-query> =
not <style-in-parens> |
<style-in-parens> [ [ and <style-in-parens> ]* | [ or <style-in-parens> ]* ] |
<style-feature>
<scroll-state-query> =
not <scroll-state-in-parens> |
<scroll-state-in-parens> [ [ and <scroll-state-in-parens> ]* | [ or <scroll-state-in-parens> ]* ] |
<scroll-state-feature>
<general-enclosed> =
[ <function-token> <any-value>? ) ] |
[ ( <any-value>? ) ]
<style-in-parens> =
( <style-query> ) |
( <style-feature> ) |
<general-enclosed>
<style-feature> =
<style-feature-plain> |
<style-feature-boolean> |
<style-range>
<scroll-state-in-parens> =
( <scroll-state-query> ) |
( <scroll-state-feature> ) |
<general-enclosed>
<style-feature-plain> =
<style-feature-name> : <style-feature-value>
<style-feature-boolean> =
<style-feature-name>
<style-range> =
<style-range-value> <mf-comparison> <style-range-value> |
<style-range-value> <mf-lt> <style-range-value> <mf-lt> <style-range-value> |
<style-range-value> <mf-gt> <style-range-value> <mf-gt> <style-range-value>
<style-range-value> =
<custom-property-name> |
<style-feature-value>
<mf-comparison> =
<mf-lt> |
<mf-gt> |
<mf-eq>
<mf-lt> =
'<' '='?
<mf-gt> =
'>' '='?
<mf-eq> =
'='
ä¾
>ã³ã³ããã¼ã®å¤§ããã«åºã¥ããã¹ã¿ã¤ã«ã®è¨å®
ã¿ã¤ãã«ã¨ããã¹ããæã¤ã«ã¼ãé¨åã®æ¬¡ã®ä¾ãèãã¦ã¿ã¾ãããã
<div class="post">
<div class="card">
<h2>ã«ã¼ãã®ã¿ã¤ãã«</h2>
<p>ã«ã¼ãã®ã³ã³ãã³ã</p>
</div>
</div>
ã³ã³ããã¼ã³ã³ããã¹ã㯠container-type ããããã£ã使ç¨ãã¦ä½æãããã¨ãã§ãã¾ãããã®ç¨éã§ã¯ .post ã¯ã©ã¹ã® inline-size å¤ã使ç¨ãã¾ãã
ããã¦ã @container ã¢ããã«ã¼ã«ã使ç¨ãããã¨ã§ã .card ã¯ã©ã¹ã®è¦ç´ ã«ã 650px ããçãã³ã³ããã¼å
ã§ã¹ã¿ã¤ã«ãé©ç¨ãããã¨ãã§ãã¾ãã
/* ã¤ã³ã©ã¤ã³ãµã¤ãºã«åºã¥ãã³ã³ããã¼ã³ã³ããã¹ã */
.post {
container-type: inline-size;
}
/* ã³ã³ããã¼ã 650px ãããçãã£ãå ´åã«ã¹ã¿ã¤ã«ãé©ç¨ */
@container (width < 650px) {
.card {
width: 50%;
background-color: lightgray;
font-size: 1em;
}
}
ååä»ãã³ã³ããã¼ã³ã³ããã¹ãã®ä½æ
ã¿ã¤ãã«ã¨ããã¹ããæã¤ã«ã¼ãé¨åã§ããæ¬¡ã® HTML ä¾ããã£ãã¨ãã¾ãã
<div class="post">
<div class="card">
<h2>ã«ã¼ãã®ã¿ã¤ãã«</h2>
<p>ã«ã¼ãã®ã³ã³ãã³ã</p>
</div>
</div>
ã¾ãã container-type ããã³ container-name ããããã£ãç¨ãã¦ã³ã³ããã¼ã³ã³ããã¹ãã使ãã¾ãã
ãã®å®£è¨ã®ä¸æ¬æå®æ§æã¯ container ãã¼ã¸ã§èª¬æãã¦ãã¾ãã
.post {
container-type: inline-size;
container-name: summary;
}
次ã«ãã³ã³ããã¼ã¯ã¨ãªã¼ã«ååã追å ãã¦ããã®ã³ã³ããã¼ã対象ã¨ãã¾ãã
@container summary (width >= 400px) {
.card {
font-size: 1.5em;
}
}
å ¥ãåã®ã³ã³ããã¼ã¯ã¨ãªã¼
åä¸ã®ã³ã³ããã¼ã¯ã¨ãªã¼ã§è¤æ°ã®ã³ã³ããã¼ã対象ã¨ãããã¨ã¯ã§ãã¾ããã åã广ãæã¤ã³ã³ããã¼ã¯ã¨ãªã¼ãå ¥ãåã«ãããã¨ã¯å¯è½ã§ãã
以ä¸ã¯ã summary ã¨ããååã®ã³ã³ããã¼ã 400px ãããå¹
ãåºãããã¤ç¥å
ã« 800px ãããå¹
ã®åºãã³ã³ããã¼ãããå ´åã«ã宣è¨ãããã¹ã¿ã¤ã«ãé©ç¨ããã¯ã¨ãªã¼ã§ãã
@container summary (width > 400px) {
@container (width > 800px) {
/* <stylesheet> */
}
}
ã³ã³ããã¼ã¹ã¿ã¤ã«ã¯ã¨ãªã¼
ã³ã³ããã¼ã¯ã¨ãªã¼ã¯ã対象ã®ã³ã³ããã¼è¦ç´ ã®ã¹ã¿ã¤ã«ãè¨ç®ãã¦è©ä¾¡ãããã¨ãã§ãã¾ããã³ã³ããã¼ã¹ã¿ã¤ã«ã¯ã¨ãªã¼ã¯ã1 ã¤ä»¥ä¸ã® style() 颿°è¨æ³ã使ç¨ãã @container ã¯ã¨ãªã¼ã§ãã è«çå¤ã®æ§æã¨ãã¹ã¿ã¤ã«æ©è½ãã¹ã¿ã¤ã«ã¯ã¨ãªã¼ã«çµåãããã¸ãã¯ã¯ãCSS æ©è½ã¯ã¨ãªã¼ ã¨åãã§ãã
@container style(<style-feature>),
not style(<style-feature>),
style(<style-feature>) and style(<style-feature>),
style(<style-feature>) or style(<style-feature>) {
/* <stylesheet> */
}
ããããã® style() ã®å¼æ°ã¯ãåä¸ã® <style-feature> ã§ãã <style-feature> ã¯ãæå¹ãª CSS 宣è¨ãCSS ããããã£ã<custom-property-name> ã®ããããã§ãã
@container style(--themeBackground),
not style(background-color: red),
style(color: green) and style(background-color: transparent),
style(--themeColor: blue) or style(--themeColor: purple) {
/* <stylesheet> */
}
å¤ã®ãªãã¹ã¿ã¤ã«ç¹æ§ã¯ãæå®ãããããããã£ã®åæå¤ã¨è¨ç®å¤ãç°ãªãå ´åãçã¨è©ä¾¡ããã¾ãã
style() 颿°ã®å¼æ°ã¨ãã¦æ¸¡ãã <style-feature> ã宣è¨ã§ããå ´åãã¹ã¿ã¤ã«ã¯ã¨ãªã¼ã¯ã宣è¨ã®å¤ãã¯ã¨ãªã¼å¯¾è±¡ã®ã³ã³ããã¼ã®ãã®ããããã£ã®è¨ç®å¤ã¨åãã§ããã°çã¨è©ä¾¡ããã¾ãã ããã§ãªãå ´åã¯ãå½ã¨è©ä¾¡ããã¾ãã
以ä¸ã®ã³ã³ããã¼ã¯ã¨ãªã¼ã¯ãã³ã³ããã¼è¦ç´ ã® --accent-color ã®è¨ç®å¤ã blue ãã©ããã調ã¹ã¾ãã
@container style(--accent-color: blue) {
/* <stylesheet> */
}
ã¡ã¢:
ã«ã¹ã¿ã ããããã£ã blue ã¨ããå¤ãæã¤å ´åããã®ããããã£ã @property ã§è²ã¨ãã¦å®ç¾©ããã¦ããªãéããåçã® 16 é²ã³ã¼ã #0000ff ã¯ä¸è´ãã¾ããã
å奿å®ããããã£ãç
§ä¼ããã¹ã¿ã¤ã«ã®æ©è½ã¯ã¨ãªã¼ã¯ãè¨ç®ãããå¤ãåããããã£ã§ä¸è´ããå ´åã¯çã¨ãªããä¸è´ããªãå ´åã¯å½ã¨ãªãã¾ããä¾ãã°ã @container style(border: 2px solid red) ã¯ããã®çç¸®å½¢ãæ§æãã 12 åã®å奿å®ããããã£ï¼border-bottom-style ãªã©ï¼ããã¹ã¦çã§ããã°çã«ãªãã¾ãã
ãªãã!importantã¯ã¹ã¿ã¤ã«ã¯ã¨ãªï¼å
ã§ä½¿ç¨ã§ãã¾ãããç¡è¦ããã¾ãã
/* !important ã¯æå¹ã ãã广ããªã */
@container style(--themeColor: purple !important) {
/* <ã¹ã¿ã¤ã«ã·ã¼ã> */
}
ã°ãã¼ãã«ãª revert 㨠revert-layer 㯠<style-feature> ã®å¤ã¨ãã¦ã¯ä¸æ£ãªãããã³ã³ããã¼ã¹ã¿ã¤ã«ã¯ã¨ãªã¼ã¯å½ã«ãªãã¾ãã
ã¹ã¯ãã¼ã«ç¶æ ã¯ã¨ãªã¼
ã¹ã¯ãã¼ã«ç¶æ ã¯ã¨ãªã¼ã®ä¾ã®æé ã追ã£ã¦èª¬æã«ã¤ãã¦ã¯ãã³ã³ããã¼ã¹ã¯ãã¼ã«ç¶æ ã¯ã¨ãªã¼ã®ä½¿ç¨ãã覧ãã ããã
仿§æ¸
| Specification |
|---|
| CSS Conditional Rules Module Level 5> # container-type> |
| CSS Anchor Positioning Module Level 2> # container-rule-anchored> |