content-visibility
åºçº¿
2024
*
æè¿å¯ç¨
èª September 2024 èµ·ï¼æ¤ç¹æ§å·²å¨ææ°æµè§å¨ä¸å¾å°æ¯æãä½å¨è¾æ§çè®¾å¤ææµè§å¨ä¸å¯è½æ æ³è¿è¡ã
* æ¤ç¹æ§çæäºé¨åçæ¯æç¨åº¦å¯è½ææä¸åã
å®éªæ§: è¿æ¯ä¸é¡¹å®éªæ§ææ¯
å¨å°å
¶ç¨äºç产ä¹åï¼è¯·ä»ç»æ£æ¥æµè§å¨å
¼å®¹æ§è¡¨æ ¼ã
CSS 屿§ content-visibility æ§å¶å
ç´ æ¯å¦æ¸²æå
¶å
容ï¼ä»¥åæ½å ä¸ç»å¼ºå±éï¼ç±æ¤å
è®¸ç¨æ·ä»£çææºä¼å¨ä¸éè¦æ¶çç¥å¤§ççå¸å±å渲æå·¥ä½ãæ¤å±æ§ä½¿ç¨æ·ä»£çå¾ä»¥å¨ä¸éè¦æ¶è·³è¿å
ç´ çæ¸²æå·¥ä½ï¼å
æ¬å¸å±åç»å¶ï¼ââç±æ¤ä½¿é¡µé¢çåå§å è½½ææ¾åå¿«ã
夿³¨ï¼å¯¹äºè®¾ç½®äº content-visibility: auto çä»»æå
ç´ ï¼å¨å
¶æ¸²æå·¥ä½å¼å§æä¸åè¢«è·³è¿æ¶å°è§¦å contentvisibilityautostatechange äºä»¶ãæ¤äºä»¶ä¸ºåºç¨ä»£ç å¨ä¸éè¦æ¶å¼å§æåæ¢æ¸²æè¿ç¨ï¼å¦å¨ <canvas> ä¸ç»ç»ï¼æä¾äºä¾¿å©ï¼è¿èè约äºå¤çè½åã
è¯æ³
/* å
³é®è¯å¼ */
content-visibility: visible;
content-visibility: hidden;
content-visibility: auto;
/* å
¨å±å¼ */
content-visibility: inherit;
content-visibility: initial;
content-visibility: revert;
content-visibility: revert-layer;
content-visibility: unset;
åå¼
visible-
æ ææãå ç´ å å®¹ç §å¸¸è¿è¡å¸å±å渲æã
-
å ç´ è·³è¿å ¶å 容ã被跳è¿çå å®¹å¿ é¡»ä¸å¯è¢«ä¾å¦é¡µå æ¥æ¾å tab é®é¡ºåºå¯¼èªçç¨æ·ä»£çç¹æ§è®¿é®ï¼äº¦ä¸å¯è¢«é䏿è·å¾ç¦ç¹ãæ¤å¼ç±»ä¼¼äºä¸ºå 容èµäº
display: noneã auto-
å ç´ å¯ç¨å¸å±å±éãæ ·å¼å±éåç»å¶å±éãè¥å ç´ ä¸ä¸ç¨æ·ç¸å ³ï¼åå ç´ è¿è·³è¿å ¶å 容ãä¸
hiddenä¸åçæ¯ï¼è¢«è·³è¿çå å®¹å¿ é¡»ä»å¯ç §å¸¸è¢«ä¾å¦é¡µå æ¥æ¾å tab é®é¡ºåºå¯¼èªçç¨æ·ä»£çç¹æ§è®¿é®ï¼ä¸å¿ é¡»ç §å¸¸å¯è·å¾ç¦ç¹æè¢«éä¸ã
å½¢å¼å®ä¹
| åå§å¼ | visible |
|---|---|
| éç¨å ç´ | å¯åºç¨å°ºå¯¸å±éçå ç´ |
| æ¯å¦æ¯ç»§æ¿å±æ§ | å¦ |
| 计ç®å¼ | as specified |
| å¨ç»ç±»å | Discrete behavior except when animating to or from hidden is visible for the entire duration |
å½¢å¼è¯æ³
content-visibility =
visible |
auto |
hidden
æ éç¢èè
content-visibility: auto 屿§ä¸çå±å¤å
容ä»å¨ææ¡£å¯¹è±¡æ¨¡ååæ éç¢æ ä¸ãç±æ¤å
è®¸å¨æ¹å页颿§è½æ¶ä¸è´é¢å½±åæ éç¢æ§ã
å 为å±å¤å
å®¹çæ ·å¼ä¸è¢«æ¸²æï¼è¢«ç¹æç¨ display: none æ visibility: hidden éèçå
ç´ ä»å°åºç°å¨æ éç¢æ ä¸ãè¥ä¸æ³è®©å
ç´ åºç°å¨æ éç¢æ ä¸ï¼è¯·ç¨ aria-hidden="true"ã
示ä¾
>ä½¿ç¨ auto åå°é¿é¡µé¢ç渲æå¼é
ä¸å示ä¾å±ç¤ºäºä½¿ç¨ content-visibility: auto è·³è¿å±å¤ç« èçç»å¶å渲æãå½æä¸ªç« èï¼sectionï¼å¨è§å£å¤æ¶ï¼å
¶å
容ç»å¶è¢«è·³è¿ï¼ç´è³ç« èé è¿è§å£ï¼ç±æ¤æå©äºé¡µé¢å è½½å交äºã
HTML
<section>
<!-- æ¯èçå
容â¦â¦ -->
</section>
<section>
<!-- æ¯èçå
容â¦â¦ -->
</section>
<section>
<!-- æ¯èçå
容â¦â¦ -->
</section>
<!-- ⦠-->
CSS
contain-intrinsic-size 屿§ä¸ºæ¯ä¸ª section å
ç´ çé«åº¦å宽度添å äº 500px çé»è®¤å°ºå¯¸ãç« èå¨è¢«æ¸²æåï¼å³ä½¿è¢«æ»å¨å°è§å£å¤ä¹å°ä¿æå
¶æ¸²æçåºæå°ºå¯¸ã
section {
content-visibility: auto;
contain-intrinsic-size: auto 500px;
}
ä½¿ç¨ hidden 管çå¯è§æ§
ä¸å示ä¾å±ç¤ºäºå¦ä½ç¨ Javascript 管çå
容å¯è§æ§ãä½¿ç¨ content-visibility: hidden; ä»£æ¿ display: none; å¨å
容被éèæ¶ä¿çäºå
¶æ¸²æç¶æä¸æ¸²ææ´å¿«ã
HTML
<div class="hidden">
<button class="toggle">æ¾ç¤º</button>
<p>æ¤å
容åå§æ¶è¢«éèï¼å¯ç¹å»æé®æ¾ç¤ºã</p>
</div>
<div class="visible">
<button class="toggle">éè</button>
<p>æ¤å
容åå§æ¶å¯è§ï¼å¯ç¹å»æé®éèã</p>
</div>
CSS
卿 visible å hidden ç±»çå
ç´ çç´ç³»åå
ç´ æ®µè½ä¸è®¾ç½®äº content-visibility 屿§ã卿¤ç¤ºä¾ä¸ï¼å¯éè¿ div ç¶å
ç´ ç CSS ç±»æ¾ç¤ºåéèæ®µè½å
容ã
为表示å
å®¹å°ºå¯¸ï¼æ¤ä»£ç å
å«äº contain-intrinsic-size 屿§ãæ¤å±æ§æå©äºå¨å
容被éèæ¶åå°å¸å±æ¼ç§»ã
p {
contain-intrinsic-size: 0 1.1em;
border: dotted 2px;
}
.hidden > p {
content-visibility: hidden;
}
.visible > p {
content-visibility: visible;
}
JavaScript
const handleClick = (event) => {
const button = event.target;
const div = button.parentElement;
button.textContent = div.classList.contains("visible") ? "æ¾ç¤º" : "éè";
div.classList.toggle("hidden");
div.classList.toggle("visible");
};
document.querySelectorAll("button.toggle").forEach((button) => {
button.addEventListener("click", handleClick);
});
ç»æ
è§è
| è§è |
|---|
| CSS Containment Module Level 2> # content-visibility> |
æµè§å¨å ¼å®¹æ§
åè§
- CSS å±é
contain-intrinsic-sizecontentvisibilityautostatechange- content-visibilityï¼æé«æ¸²ææ§è½çæ° CSS 屿§ï¼web.developers.google.cnï¼