CSSContainerRule
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.
CSSContainerRule ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯ãåä¸ã® CSS ã® @container ã«ã¼ã«ã表ãã¾ãã
ãã®åã®ãªãã¸ã§ã¯ãã使ç¨ãã¦ã @container ã®ã¯ã¨ãªã¼æ¡ä»¶ã¨ãã³ã³ããã¼åãå®ç¾©ããã¦ããå ´åã¯ã³ã³ããã¼åãåå¾ãããã¨ãã§ãã¾ãã
ãªããã³ã³ããã¼åã¨ã¯ã¨ãªã¼ãåããã¦ãæ¡ä»¶ããã¹ãããå®ç¾©ãã CSSConditionRule.conditionText ã使ç¨ãã¦åå¾ãããã¨ãã§ãã¾ãã
ã¤ã³ã¹ã¿ã³ã¹ããããã£
ç¥å
ã§ãã CSSConditionRule, CSSGroupingRule, CSSRule ããç¶æ¿ããããããã£ãããã¾ãã
CSSContainerRule.containerNameèªåå°ç¨-
@containerã®ååã表ãæååãã¾ãã¯ç©ºæååãè¿ãã¾ãã CSSContainerRule.containerQueryèªåå°ç¨-
é¢é£ãã
@containerã®ã¹ã¿ã¤ã«ãé©ç¨ããããã©ãããæ±ºå®ããããã«è©ä¾¡ãããæ©è½ã¾ãã¯ãã³ã³ããã¼æ¡ä»¶ãã®è¨å®ã表ãæååãè¿ãã¾ãã
ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã
åºæã®ã¡ã½ããã¯ããã¾ãããç¥å
ã§ãã CSSConditionRule, CSSGroupingRule, CSSRule ããç¶æ¿ããã¡ã½ãããããã¾ãã
ä¾
>ç¡åã®ã³ã³ããã¼ã«ã¼ã«
ä¸è¨ã®ä¾ã§ã¯ãç¡åã® @container ã«ã¼ã«ãå®ç¾©ããé¢é£ãã CSSContainerRule ã®ããããã£ã表示ãã¾ãã
CSS 㯠@container ã®ä¾ã³ã³ããã¼ã®å¤§ããã«åºã¥ããã¹ã¿ã¤ã«ã®è¨å®ã¨åãã§ãã
ã³ã¼ãã®æåã®é¨åã§ã¯ãã³ã³ããã¼ã«ã¼ã«ã®ããããã£ããã°åºåããããã®ãªã¹ãã¨ãããããã£ã®è¿½å ãç°¡åã«ããããã® JavaScript ã® log() ã¡ã½ããã使ãã¦ãã¾ãã
<div id="log">
<h2>ãã°</h2>
<ul></ul>
<hr />
</div>
// ãã°ãªã¹ãã¸ã®åç
§ãæ ¼ç´
const logList = document.querySelector("#log ul");
// åºç¤ã½ã¼ã¹ãããã¼ã¿ããã°åºåãã颿°
function log(result) {
const listItem = document.createElement("li");
listItem.textContent = result;
logList.appendChild(listItem);
}
æåã® HTML 㯠post ã«å«ã¾ãã card (<div>) ã® HTML ãå®ç¾©ãã¾ãã
<div class="post">
<div class="card">
<h2>ã«ã¼ãã¿ã¤ãã«</h2>
<p>ã«ã¼ãã®å
容</p>
</div>
</div>
ãã®ä¾ã® CSS ã以ä¸ã«ç¤ºãã¾ãã
対å¿ãã @container ã®ä¾ã§è¨è¿°ããã¦ããããã«ãã³ã³ããã¼è¦ç´ ã® CSS ã¯ã³ã³ããã¼ã®åãæå®ãã¾ãã
ããã¦ã @container ã¯ãå¹
ã 650px æªæºã®å ´åãæ°ããå¹
ããã©ã³ããµã¤ãºãèæ¯è²ãã«ã¼ãã«é©ç¨ãã¾ãã
<style id="example-styles">
/* ã¤ã³ã©ã¤ã³ãµã¤ãºã«åºã¥ãã³ã³ããã¼ã³ã³ããã¹ã */
.post {
container-type: inline-size;
}
/* ã³ã³ããã¼ã®å¹
ã 650px ããçãå ´åã«ã¹ã¿ã¤ã«ãè¨å® */
@container (width < 650px) {
.card {
width: 50%;
background-color: gray;
font-size: 1em;
}
}
</style>
ä¸è¨ã®ã³ã¼ãã§ã¯ãä¾ã«é¢é£ä»ãããã¦ãã HTMLStyleElement ã id ã使ç¨ãã¦åå¾ãããã® sheet ããããã£ã使ç¨ã㦠StyleSheet ãåå¾ãã¦ãã¾ãã
StyleSheet ãããã·ã¼ãã«è¿½å ãã cssRules ã®è¨å®ãåå¾ãã¾ãã
ä¸è¨ã® 2 ã¤ç®ã®ã«ã¼ã«ã¨ã㦠@container ã追å ããã®ã§ãé¢é£ãã CSSContainerRule ã«ã¯ cssRules ã® 2 ã¤ç®ã®é
ç®ãã¤ã³ããã¯ã¹ "1" ã使ç¨ãã¦ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ãã
æå¾ã«ãcontainerNameãcontainerQueryãconditionTextï¼ç¶æ¿ï¼ããããã£ããã°åºåãã¾ãã
const exampleStylesheet = document.getElementById("example-styles").sheet;
const exampleRules = exampleStylesheet.cssRules;
const containerRule = exampleRules[1]; // ã³ã³ããã¼ã«ã¼ã«ã表ã CSSContainerRule
log(`CSSContainerRule.containerName: "${containerRule.containerName}"`);
log(`CSSContainerRule.containerQuery: "${containerRule.containerQuery}"`);
log(`CSSContainerRule.conditionText: "${containerRule.conditionText}"`);
ã¡ã¢:
ãã®ä¾ã®ã¹ã¿ã¤ã«ã¯ãã³ã¼ããæ£ããã·ã¼ããæ¢ããããããã«ã id ãæã¤ã¤ã³ã©ã¤ã³ HTML ã® style è¦ç´ ã§å®ç¾©ãã¦ãã¾ãã
ã¾ããé·ããã¤ã³ããã¯ã¹ã«ãã¦ï¼ä¾ãã° document.styleSheets[document.styleSheets.length-1]ï¼ææ¸ããåä¾ã®æ£ããã·ã¼ããæ¢ããã¨ãã§ãã¾ãããããããã¨åä¾ã®æ£ããã·ã¼ããåä½ããã®ãè¤éã«ãªãã¾ãã
åºåä¾ã¯ä¸è¨ã®éãã§ãã
ãã°ã®ã»ã¯ã·ã§ã³ã«ã¯ containerName ã¨ããæååãæ²è¼ããã¦ãã¾ãããããã¯ååãå®ç¾©ãã¦ããªãã®ã§ç©ºæååã§ãã
containerQuery 㨠conditionText ã®æååããã°åºåãã¦ãã¾ãããååãå®ç¾©ãã¦ããªãã®ã§åãå¤ãããã¾ãã
ãã¼ã¸ã®å¹
ã 650px ã«é·ç§»ããã¨ãã«ã¼ãã¯èæ¯ã夿´ããå¿
è¦ãããã¾ãã
ååä»ãã³ã³ããã¼ã®ã«ã¼ã«
ä¸è¨ã®ä¾ã§ã¯ãååä»ã @container ã«ã¼ã«ãå®ç¾©ããé¢é£ãã CSSContainerRule ã®ããããã£ã表示ãã¦ãã¾ãã
CSS 㯠@container ã®ä¾ãååä»ãã³ã³ããã¼ã³ã³ããã¹ãã®ä½æã«ãããã®ã¨ã¨ã¦ãããä¼¼ã¦ãã¾ãã
æåã« post ã®ä¸ã® card (<div>) ã® HTML ãå®ç¾©ãã¾ãï¼ãã®ä¾ã§ã¯ãã°åºåã³ã¼ãã表示ãã¦ãã¾ãããï¼
<div class="post">
<div class="card">
<h2>ã«ã¼ãã¿ã¤ãã«</h2>
<p>ã«ã¼ãã®å
容</p>
</div>
</div>
@container ã§è¨è¿°ããã¦ããããã«ãã³ã³ããã¼è¦ç´ ã® CSS ã¯ã³ã³ããã¼ã®åãæå®ããã³ã³ããã¼ã®ååãæå®ãããã¨ãã§ãã¾ãã
ã«ã¼ãã«ã¯æ¢å®ã®ãã©ã³ããµã¤ãºãããããæå°å¹
ã 700px ãè¶
ããå ´åã sidebar ã¨ããååã® @container ã§ä¸æ¸ãããã¾ãã
<style id="example-styles">
.post {
container-type: inline-size;
container-name: sidebar;
}
/* ã«ã¼ãã¿ã¤ãã«ã®æ¢å®ã®è¦åºãã¹ã¿ã¤ã« */
.card h2 {
font-size: 1em;
}
@container sidebar (min-width: 700px) {
.card {
font-size: 2em;
}
}
</style>
ã·ã¼ãã¨ã«ã¼ã«ãåå¾ããã³ã¼ãã¯ååã®ä¾ã¨ã»ã¨ãã©åãã§ãã
å¯ä¸ã®éãã¯ããã®ä¾ã§ã¯ 3 ã¤ã® CSS ã«ã¼ã«ãããã®ã§ãé¢é£ãã CSSContainerRule ãåå¾ããããã« cssRules ã® 3 ã¤ç®ã®é
ç®ãåå¾ãããã¨ã§ãã
const exampleStylesheet = document.getElementById("example-styles").sheet;
const exampleRules = exampleStylesheet.cssRules;
const containerRule = exampleRules[2]; // ã³ã³ããã¼ã«ã¼ã«ã表ã CSSContainerRule
log(`CSSContainerRule.containerName: "${containerRule.containerName}"`);
log(`CSSContainerRule.containerQuery: "${containerRule.containerQuery}"`);
log(`CSSContainerRule.conditionText: "${containerRule.conditionText}"`);
åºåä¾ã¯ä¸è¨ã®éãã§ãã
ãã°åºåããé¨åã«ã¯ containerName 㨠containerQuery ã®æååãæ²è¼ããã¦ãã¾ãã
conditionText ããã°åºåãããããã 2 ã¤ã®æååã®çµååã示ãã¾ãã
ãã¼ã¸ã®å¹
ã 700px ãè¶
ããã¨ãã«ã¼ãé¨åã®ã¿ã¤ãã«ã¯ 2 åã®å¤§ããã«ãªãã¯ãã§ãã
仿§æ¸
| Specification |
|---|
| CSS Conditional Rules Module Level 5 > # the-csscontainerrule-interface > |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
- CSS ã®
container-name,container-type,container䏿¬æå®ãããã㣠- CSS ã³ã³ããã¼ã¢ã¸ã¥ã¼ã«
- ã³ã³ããã¼ã¯ã¨ãªã¼
- ã³ã³ããã¼ã®ãµã¤ãºããã³ã¹ã¿ã¤ã«ã¯ã¨ãªã¼ã®ä½¿ç¨