CSS æ§è½ä¼å
å½å¼åç½ç«æ¶ï¼ä½ éè¦èèæµè§å¨å¦ä½å¤çä½ ç½ç«ä¸ç CSSã为äºåè½» CSS å¯è½å¼èµ·çæ§è½é®é¢ï¼ä½ åºè¯¥å¯¹å ¶è¿è¡ä¼åãä¾å¦ï¼ä½ åºè¯¥ä¼å CSS 以åå°é»å¡æ¸²æå¹¶æå°åæéçåæµæ¬¡æ°ãæ¬æå°ä¸ºä½ ä»ç»å ³é®ç CSS æ§è½ä¼åææ¯ã
| åæï¼ | åºæ¬çè®¡ç®æºæä½è½åï¼å·²å®è£ åºæ¬è½¯ä»¶ï¼ä»¥å对客æ·ç«¯ Web ææ¯çåºæ¬äºè§£ã |
|---|---|
| ç®æ ï¼ | äºè§£ CSS 对ç½ç«æ§è½çå½±åï¼ä»¥åå¦ä½ä¼å CSS 以æ¹åæ§è½ã |
ä¼åä¸å¦
å¨å¼å§ä¼å CSS ä¹åï¼ä½ åºè¯¥åçä¸ä¸ªé®é¢ï¼âæéè¦ä¼åä»ä¹ï¼âä¸é¢è®¨è®ºçä¸äºæå·§åææ¯æ¯éç¨äºå ä¹ä»»ä½ Web 项ç®çè¯å¥½å®è·µï¼ç¶èå¦ä¸äºåªå¨ç¹å®æ åµä¸éè¦ãè¯å¾å¨ææå°æ¹åºç¨è¿äºææ¯å¯è½æ¯ä¸å¿ è¦çï¼èä¸å¯è½ä¼æµªè´¹ä½ çæ¶é´ãä½ åºè¯¥ç¡®å®æ¯ä¸ªé¡¹ç®å®é ä¸éè¦åªäºæ§è½ä¼åã
为äºåå°è¿ä¸ç¹ï¼ä½ éè¦æµéç½ç«æ§è½ãæ£å¦ä¸é¢ç龿¥æç¤ºï¼æå ç§ä¸åçæµéæ§è½çæ¹æ³ï¼å ¶ä¸ä¸äºæ¶åå¤æçæ§è½ APIãç¶èï¼å ¥é¨çæä½³æ¹æ³æ¯å¦ä¹ å¦ä½ä½¿ç¨å ç½®çæµè§å¨ç½ç»åæ§è½å·¥å ·ï¼ä»¥æ¥ç页é¢å è½½ä¸åªäºé¨åè±è´¹äºå¾é¿æ¶é´ï¼å¹¶ä¸éè¦è¿è¡ä¼åã
ä¼å渲æ
æµè§å¨æä¸ä¸ªåºå®çæ¸²ææµç¨ââåªæå¨å¸å±ï¼layoutï¼å®æåæè½ç»å¶ï¼paintï¼é¡µé¢ï¼èå¸å±çåææ¯è¦çææ¸²ææ ï¼render treeï¼ï¼èæ¸²ææ ççæåéè¦ DOM å CSSOM æ çé åã
妿å è®©ç¨æ·çå°ä¸ä¸ªæ²¡ææ ·å¼ç页é¢ï¼ç CSS æ ·å¼è§£æå®ååéç»ï¼repaintï¼ï¼è¿æ ·çä½éªä¼å¾å·®ãæä»¥ï¼æµè§å¨ä¼çå°ç¡®å®éè¦ CSS æ¶æå¼å§æ¸²æãåªæå¨ä¸è½½å® CSS å¹¶çæ CSS 对象模å CSS 对象模åï¼CSSOMï¼ä¹åï¼æµè§å¨æä¼ç»å¶é¡µé¢ã
为äºä¼å CSSOM çæå»ºå¹¶æé«é¡µé¢æ§è½ï¼ä½ å¯ä»¥æ ¹æ®å½å CSS çç¶ææ§è¡ä»¥ä¸ä¸é¡¹æå¤é¡¹æä½ï¼
-
å é¤ä¸å¿ è¦çæ ·å¼ï¼è¿å¬èµ·æ¥å¾ææ¾ï¼ä½ä½ å¯è½ä¸ç¸ä¿¡ï¼å¾å¤å¼åè é½ä¼å¿è®°æ¸ é¤å¨å¼åè¿ç¨ä¸æ·»å çä¸ä¼è¢«ç¨å°ç CSS è§åãææèæ¬é½ä¼è¢«è§£æï¼æ 论å®å¨å¸å±äºç»å¶æ¶æ¯å¦è¢«ä½¿ç¨ï¼å æ¤å 餿 ç¨æ ·å¼å¯ä»¥å éç½é¡µæ¸²æãæ£å¦å¦ä½ä»ç½ç«ä¸å 餿ªä½¿ç¨ç CSSï¼ï¼csstricks.comï¼2019ï¼æ»ç»ç飿 ·ï¼å¯¹äºå¤§å代ç åºæ¥è¯´ï¼è¿æ¯ä¸ä¸ªé¾é¢ï¼æ²¡æçµä¸¹å¦è¯å¯ä»¥å¯é å°æ¥æ¾åå 餿ªä½¿ç¨ç CSSãä½ éè¦å°½éä¿æ CSS çæ¨¡ååï¼å¹¶å¨æ·»å åå 餿¶è°¨æ å°å¿ã
-
å° CSS æå为ç¬ç«æ¨¡åï¼CSS 模ååå¯ä»¥å»¶è¿å è½½å¨é¡µé¢å è½½é¶æ®µéå¿ è¦ç CSSï¼ç¼©çåå§ CSS çé»å¡åå è½½æ¶é´ãæç®åçæ¹æ³æ¯å° CSS æå为ç¬ç«çæä»¶ï¼å¹¶ä» å è½½æéå 容ï¼
html<!-- å è½½åè§£æ styles.css ä¼é»å¡æ¸²æ --> <link rel="stylesheet" href="styles.css" /> <!-- å è½½åè§£æ print.css ä¸ä¼é»å¡æ¸²æ --> <link rel="stylesheet" href="print.css" media="print" /> <!-- å¨å¤§å±å¹ä¸ï¼å è½½åè§£æ mobile.css ä¸ä¼é»å¡æ¸²æ --> <link rel="stylesheet" href="mobile.css" media="screen and (max-width: 480px)" />ä¸é¢çç¤ºä¾æä¾äºä¸ç»æ ·å¼ââå§ç»ä¼å è½½çé»è®¤æ ·å¼ãåªæå¨æå°ææ¡£æ¶æä¼å è½½çæ ·å¼ï¼ä»¥åä» å¨çªå±è®¾å¤ä¸å è½½çæ ·å¼ãé»è®¤æ åµä¸ï¼æµè§å¨ä¼å设æ¯ä¸ªæå®çæ ·å¼è¡¨é½ä¼é»å¡æ¸²æãä½ å¯ä»¥éè¿æ·»å å å«åªä½æ¥è¯¢ç
media屿§æ¥åè¯æµè§å¨ä½æ¶åºç¨æ ·å¼è¡¨ã彿µè§å¨çå°åªéè¦å¨ç¹å®æ åµä¸åºç¨çæ ·å¼è¡¨æ¶ï¼å®ä»ç¶ä¼ä¸è½½æ ·å¼è¡¨ï¼ä½ä¸ä¼é»å¡æ¸²æãéè¿å° CSS æå为å¤ä¸ªæä»¶ï¼ä¸»è¦ç渲æé»å¡æä»¶ï¼å¨æ¬ä¾ä¸ä¸ºstyles.cssï¼ä¼å°å¾å¤ï¼ä»èåå°æ¸²æé»å¡çæ¶é´ã -
æå°åååç¼©ä½ ç CSSï¼æå°åå æ¬å¨ä»£ç è¿å ¥ç产ç¯å¢åï¼å¨æä»¶ä¸å é¤ä» 为äºäººç±»å¯è¯»æ§èåå¨çææç©ºæ ¼ãéè¿å¯¹ CSS è¿è¡æå°åï¼ä½ å¯ä»¥å¤§å¤§åå°å è½½æ¶é´ãéå¸¸ï¼æå°åæ¯ä½ä¸ºæå»ºè¿ç¨çä¸é¨åè¿è¡çï¼ä¾å¦ï¼å¤§å¤æ° JavaScript æ¡æ¶å¨æå»ºé¡¹ç®åå¤é¨ç½²æ¶ä¼å¯¹ä»£ç è¿è¡æå°åï¼ãé¤äºæå°åä¹å¤ï¼è¿è¦ç¡®ä¿ä½ çç«ç¹æå¨çæå¡å¨å¨æä¾æä»¶ä¹å对æä»¶ä½¿ç¨è¯¸å¦ gzip çå缩ã
-
ç®åéæ©å¨ï¼äººä»¬ç»å¸¸ç¼åæ¯åºç¨æéæ ·å¼æ´å¤æçéæ©å¨ãè¿ä¸ä» ä¼å¢å æä»¶å¤§å°ï¼è¿ä¼å¢å è§£æè¿äºéæ©å¨çæ¶é´ãä¾å¦ï¼
css/* éå¸¸å ·ä½çéæ©å¨ */ body div#main-content article.post h2.headline { font-size: 24px; } /* ä½ å¯è½åªéè¦è¿ä¸ª */ .headline { font-size: 24px; }å°éæ©å¨ç®ååéä½ä¼å 级对äºç»´æ¤ä¹æ¯æå¥½å¤çãç®åéæ©å¨çä½ç¨å¾å®¹æçè§£ï¼å¦æéæ©å¨ä¸å ·æé£ä¹é«çä¼å 级ï¼ä»¥åéè¦æ¶å°±å¾å®¹æè¦çæ ·å¼ã
-
ä¸è¦å°æ ·å¼åºç¨äºä¸éè¦çå ç´ ï¼å¸¸è§çé误æ¯ä½¿ç¨éç¨éæ©å¨å°æ ·å¼åºç¨äºææå ç´ ï¼æè è³å°åºç¨äºæ¯å®é éè¦çå ç´ æ´å¤çå ç´ ãè¿ç§ç±»åçæ ·å¼ä¼å¯¹æ§è½äº§çè´é¢å½±åï¼ç¹å«æ¯å¨è¾å¤§çç«ç¹ä¸ã
css/* éæ© <body> å ç´ å çææå ç´ */ body * { font-size: 14px; display: flex; }请记ä½ï¼è®¸å¤å±æ§ï¼ä¾å¦
font-sizeï¼ä¼ä»å ¶ç¶å ç´ ç»§æ¿å ¶å¼ï¼å æ¤ä½ ä¸éè¦å¨ææå°æ¹åºç¨å®ä»¬ãèä¸åè½å¼ºå¤§çå·¥å ·ï¼å¦å¼¹æ§çåï¼éè¦è°¨æ 使ç¨ã卿æå°æ¹é½ä½¿ç¨å®ä»¬å¯è½ä¼å¯¼è´åç§æå¤è¡ä¸ºã -
ä½¿ç¨ CSS ç²¾çµå¾åå°å¾åç¸å ³ç HTTP 请æ±ï¼CSS ç²¾çµå¾ æ¯ä¸ç§ææ¯ï¼å®å°ä½ 叿å¨ç«ç¹ä¸ä½¿ç¨çå¤ä¸ªå°å¾åï¼ä¾å¦å¾æ ï¼æ¾å ¥å个å¾åæä»¶ä¸ï¼ç¶å使ç¨ä¸åç
background-positionå¼å¨ä¸åçä½ç½®æ¾ç¤ºå¾åçä¸é¨åãè¿å¯ä»¥å¤§å¤§åå°è·åå¾åæéç HTTP è¯·æ±æ°éã -
é¢å è½½éè¦èµæºï¼ä½ å¯ä»¥ä½¿ç¨
rel="preload"å°<link>å ç´ è½¬æ¢ä¸ºé¢å è½½å¨ï¼ç¨äºå ³é®èµæºï¼å æ¬ CSS æä»¶ãåä½åå¾çï¼html<link rel="preload" href="style.css" as="style" /> <link rel="preload" href="ComicSans.woff2" as="font" type="font/woff2" crossorigin /> <link rel="preload" href="bg-image-wide.png" as="image" media="(min-width: 601px)" />使ç¨
preloadï¼æµè§å¨ä¼å°½å¿«è·åå¼ç¨çèµæºï¼å¹¶å°å ¶åå¨å¨æµè§å¨ç¼åä¸ï¼ä»¥ä¾¿å¨åç»ä»£ç ä¸å¼ç¨æ¶å¯ä»¥æ´å¿«å°ä½¿ç¨å®ä»¬ã为äºè®©ç¨æ·ä½éªå°½å¯è½æµç ï¼æä»¬åºæåå 载页é¢å è½½åæç¨æ·ä¼éå°çé«ä¼å çº§èµæºã请注æï¼ä½ è¿å¯ä»¥ä½¿ç¨media屿§å建ååºå¼çé¢å è½½å¨ãå¦è¯·åé é¢å è½½éè¦èµæºä»¥æåå è½½é度è¿ç¯ web.developers.google.cn ä¸çæç« ï¼2020ï¼ã
å¤çå¨ç»
å¨ç»å¯ä»¥æ¹åæç¥æ§è½ï¼ä½¿ç颿´å æµç ï¼è®©ç¨æ·å¨çå¾ é¡µé¢å è½½æ¶æè§å°è¿å±ï¼ä¾å¦å è½½æè½¬å¾æ ï¼ãç¶èï¼æ´å¤§æ´å¤çå¨ç»èªç¶éè¦æ´å¤çå¤çè½åæ¥å¤çï¼è¿å¯è½ä¼é使§è½ã
æç®åç建议æ¯åå°ææä¸å¿
è¦çå¨ç»ãä½ è¿å¯ä»¥ä¸ºç¨æ·æä¾ä¸ä¸ªæ§ä»¶/ç«ç¹é项ï¼è®©ä»ä»¬å¯ä»¥å
³éå¨ç»ï¼ä¾å¦å½ä»ä»¬ä½¿ç¨ä½åçè®¾å¤æçµæ± çµéæéçç§»å¨è®¾å¤æ¶ãä½ è¿å¯ä»¥ä½¿ç¨ JavaScript æ¥æ§å¶é¡µé¢æ¯å¦åºç¨å¨ç»ãè¿æä¸ä¸ªå为 prefers-reduced-motion çåªä½æ¥è¯¢ï¼å¯ä»¥æ ¹æ®ç¨æ·å¯¹å¨ç»çæä½ç³»ç»çº§å好鿩æ§å°æä¾å¨ç»æ ·å¼ã
对äºå¿ è¦ç DOM å¨ç»ï¼å»ºè®®å°½å¯è½ä½¿ç¨ CSS å¨ç»ï¼è䏿¯ JavaScript å¨ç»ï¼Web å¨ç» API æä¾äºä¸ç§ç´æ¥ä½¿ç¨ JavaScript è¿æ¥å° CSS å¨ç»çæ¹æ³ï¼ã
éæ©è¦è¿è¡å¨ç»å¤çç屿§
æ¥ä¸æ¥ï¼å¨ç»æ§è½å¨å¾å¤§ç¨åº¦ä¸åå³äºä½ è¦è¿è¡å¨ç»å¤çç屿§ãæäºå±æ§å¨è¿è¡å¨ç»å¤çæ¶ä¼è§¦ååæµï¼è¿ä¸æ¥ä¹ä¼è§¦åéç»ï¼ï¼åºè¯¥é¿å 使ç¨è¿äºå±æ§ãè¿äºå±æ§å æ¬ï¼
- ä¿®æ¹å
ç´ ç尺寸ï¼ä¾å¦
widthãheightãborderåpaddingã - éæ°å®ä½å
ç´ ï¼ä¾å¦
marginãtopãbottomãleftårightã - æ´æ¹å
ç´ çå¸å±ï¼ä¾å¦
align-contentãalign-itemsåflexã - æ·»å æ¹åå
ç´ å ä½å½¢ç¶çè§è§ææï¼ä¾å¦
box-shadowã
ç°ä»£æµè§å¨å¾æºè½ï¼åªä¼éæ°ç»å¶ææ¡£ä¸å·²æ´æ¹çåºåï¼è䏿¯æ´ä¸ªé¡µé¢ãå æ¤ï¼è¶å¤§çå¨ç»ææ¬è¶é«ã
妿å¯ä»¥çè¯ï¼æå¥½å¯¹ä¸ä¼å¼èµ·åæµ/éç»ç屿§è¿è¡å¨ç»å¤çãè¿å æ¬ï¼
å¨ GPU ä¸è¿è¡å¨ç»å¤ç
为äºè¿ä¸æ¥æé«æ§è½ï¼ä½ åºè¯¥èèå°å¨ç»å¤çå·¥ä½è½¬ç§»å°ä¸»çº¿ç¨ä¹å¤ï¼å¹¶æ¾å°è®¾å¤ç GPU ä¸è¿è¡ï¼ä¹ç§°ä¸ºåæï¼compositingï¼ï¼ãè¿å¯ä»¥éè¿éæ©ç¹å®ç±»åçå¨ç»æ¥å®ç°ï¼æµè§å¨ä¼èªå¨å°è¿äºå¨ç»åéå° GPU æ¥å¤çãå æ¬ï¼
- 3D 忢å¨ç»ï¼ä¾å¦
transform: translateZ()årotate3d()ã - å
·ææäºå
¶ä»å±æ§å¨ç»çå
ç´ ï¼ä¾å¦
position: fixedã - åºç¨äº
will-changeçå ç´ ï¼è¯·åé ä¸é¢çå°èï¼ã - ç¹å®çå¨å
¶èªå·±å±ä¸æ¸²æçå
ç´ ï¼å
æ¬
<video>ã<canvas>å<iframe>ã
å¨ GPU ä¸è¿è¡å¨ç»å¤çå¯ä»¥æé«æ§è½ï¼å°¤å ¶æ¯å¨ç§»å¨è®¾å¤ä¸ãç¶èï¼å°å¨ç»å¤çç§»å° GPU 并䏿»æ¯é£ä¹ç®åã请é 读 CSS GPU å¨ç»ï¼æ£ç¡®ä½¿ç¨ï¼smashingmagazine.comï¼2016ï¼ä»¥è·åé常æç¨å详ç»çåæã
ä½¿ç¨ will-change ä¼åå
ç´ åå
æµè§å¨å¯è½ä¼å¨å
ç´ å®é
åçååä¹åè¿è¡ä¼å设置ãè¿ç±»ä¼åå¯ä»¥éè¿æå宿å¯è½éè¦ç大éå·¥ä½ï¼æé«é¡µé¢çååºé度ãCSS ç will-change 屿§åæµè§å¨æç¤ºå
ç´ é¢æçååæ¹å¼ã
夿³¨ï¼will-change åºè¯¥ä½ä¸ºå¤çç°æçæ§è½é®é¢çæå䏿ãä¸åºè¯¥ç¨å®æ¥é¢æµæ§è½é®é¢ã
.element {
will-change: opacity, transform;
}
ä¼å渲æé»å¡
CSS å¯ä»¥ä½¿ç¨åªä½æ¥è¯¢å°æ ·å¼éå®å¨ç¹å®æ¡ä»¶ä¸ãåªä½æ¥è¯¢å¯¹äºååºå¼ç½é¡µè®¾è®¡é常éè¦ï¼å¹¶ä¸å¯ä»¥å¸®å©æä»¬ä¼åå
³é®æ¸²ææµç¨ãæµè§å¨ä¼é»å¡æ¸²æç´å°è§£æå®ææçæ ·å¼ï¼ä½ä¸ä¼é»å¡ä¸ä¼ä½¿ç¨çæ ·å¼ï¼ä¾å¦æå°æ ·å¼è¡¨ãéè¿æ ¹æ®åªä½æ¥è¯¢å° CSS æå为å¤ä¸ªæä»¶ï¼å¯ä»¥é²æ¢å¨ä¸è½½æªä½¿ç¨ç CSS æ¶é»å¡æ¸²æãè¦å建ä¸ä¸ªéé»å¡ç CSS 龿¥ï¼å°ä¸ç«å³ä½¿ç¨çæ ·å¼ï¼ä¾å¦æå°æ ·å¼ï¼ç§»å¨å°åç¬çæä»¶ä¸ï¼å¨ HTML æ è®°ä¸æ·»å ä¸ä¸ª <link>ï¼å¹¶æ·»å ä¸ä¸ªåªä½æ¥è¯¢ï¼å¨æ¬ä¾ä¸æ¯æå°æ ·å¼è¡¨ã
<!-- å è½½åè§£æ styles.css ä¼é»å¡æ¸²æ -->
<link rel="stylesheet" href="styles.css" />
<!-- å è½½åè§£æ print.css ä¸ä¼é»å¡æ¸²æ -->
<link rel="stylesheet" href="print.css" media="print" />
<!-- å¨å¤§å±å¹ä¸ï¼å è½½åè§£æ mobile.css ä¸ä¼é»å¡æ¸²æ -->
<link
rel="stylesheet"
href="mobile.css"
media="screen and (max-width: 480px)" />
é»è®¤æ
åµä¸ï¼æµè§å¨å设æ¯ä¸ªæå®çæ ·å¼è¡¨é½ä¼é»å¡æ¸²æãéè¿æ·»å å
·æåªä½æ¥è¯¢ç media 屿§åè¯æµè§å¨æ ·å¼è¡¨åºè¯¥ä½æ¶åºç¨ã彿µè§å¨çå°ä¸ä¸ªæ ·å¼è¡¨æ¶ï¼å®ä¼ç¥éå®åªéè¦å°å
¶åºç¨äºç¹å®çæ
åµï¼å®ä»ç¶ä¼ä¸è½½æ ·å¼è¡¨ï¼ä½ä¸ä¼é»å¡æ¸²æãéè¿å° CSS æå为å¤ä¸ªæä»¶ï¼ä¸»è¦çé»å¡æ¸²ææä»¶ï¼å¨æ¬ä¾ä¸æ¯ styles.cssï¼ä¼å徿´å°ï¼ä»èåå°äºæ¸²æé»å¡çæ¶é´ã
æ¹åå使§è½
æ¬èå å«ä¸äºæç¨çæå·§ï¼å¯ä»¥ç¨äºæ¹å Web åä½çæ§è½ã
æ»ä½èè¨ï¼è¯·ä»ç»èèå¨ä½ çç½ç«ä¸ä½¿ç¨çåä½ãæäºå使件å¯è½é常大ï¼å å åèï¼ãè½ç¶ä½¿ç¨å¤§éåä½ä»¥è·å¾è§è§ä¸çå¸å¼åå¯è½å¾è¯±äººï¼ä½è¿å¯è½ä¼æ¾èéä½é¡µé¢å è½½é度ï¼å¹¶ä½¿ä½ çç½ç«çèµ·æ¥åä¹±ä¸å ªãä½ å¯è½åªéè¦ä½¿ç¨ä¸¤å°ä¸ç§åä½ï¼å¦æéæ©ä½¿ç¨ Web å®å ¨åä½ï¼åå¯ä»¥ä½¿ç¨æ´å°çåä½ã
åä½å è½½
请记ä½ï¼åä½ä»
å¨ä½¿ç¨ font-family 屿§åºç¨äºå
ç´ æ¶æä¼å è½½ï¼è䏿¯å¨é¦æ¬¡ä½¿ç¨ @font-face at è§åå¼ç¨æ¶å è½½ï¼
/* åä½å¨æ¤å¤æ²¡æå è½½ */
@font-face {
font-family: "Open Sans";
src: url("OpenSans-Regular-webfont.woff2") format("woff2");
}
h1,
h2,
h3 {
/* åä½å®é
ä¸å¨æ¤å¤å è½½ */
font-family: "Open Sans";
}
å æ¤ï¼ä½¿ç¨ rel="preload" æ¥æåå è½½éè¦çåä½ï¼è¿æ ·å®ä»¬å¨å®é
éè¦æ¶å¯ä»¥æ´å¿«å°å¯ç¨ï¼
<link
rel="preload"
href="OpenSans-Regular-webfont.woff2"
as="font"
type="font/woff2"
crossorigin />
å¦æä½ ç font-family 声æä½äºä¸ä¸ªå¤§åçå¤é¨æ ·å¼è¡¨ä¸ï¼å¹¶ä¸å¨è§£æè¿ç¨ä¸ä¸ä¼è¢«ç«å³è®¿é®å°ï¼é£ä¹è¿ç§åæ³æ´æçå¤ãä¸è¿è¦éå½æè¡¡ï¼å使件ç¸å½å¤§ï¼å¦æé¢å 载太å¤åä½ï¼å¯è½ä¼å»¶è¿å
¶ä»èµæºçå è½½ã
ä½ è¿å¯ä»¥èè以ä¸å ç¹ï¼
- 使ç¨
rel="preconnect"ä¸å使便¹å»ºç«æ©æè¿æ¥ãæå ³è¯¦ç»ä¿¡æ¯ï¼è¯·åé é¢è¿æ¥å°å ³é®çç¬¬ä¸æ¹æºã - ä½¿ç¨ CSS åä½å è½½ API éè¿ JavaScript èªå®ä¹åä½å è½½è¡ä¸ºã
åªå è½½æéçåå½¢
å¨éæ©ç¨äºæ£æçå使¶ï¼å¾é¾ç¡®å®å°å¨å ¶ä¸ä½¿ç¨çåå½¢ï¼ç¹å«æ¯å¦æä½ å¤ççæ¯ç¨æ·çæçå 容å/ææ¶åå¤ç§è¯è¨çå 容ã
ç¶èï¼å¦æä½ ç¥éä½ å°ä½¿ç¨ç¹å®çåå½¢éï¼ä¾å¦ï¼ä»
ç¨äºæ 颿ç¹å®æ ç¹ç¬¦å·å符çåå½¢ï¼ï¼ä½ å¯ä»¥éå¶æµè§å¨éè¦ä¸è½½çåå½¢æ°éãè¿å¯ä»¥éè¿å建ä»
å
嫿éåéçå使件æ¥å®ç°ï¼è¿ä¸ªè¿ç¨å«ååéåãç¶åå¯ä»¥ä½¿ç¨ @font-face ç unicode-range æè¿°ç¬¦æ¥æå®ä½æ¶ä½¿ç¨ä½ çåéåä½ã妿页é¢ä¸æ²¡æä½¿ç¨è¯¥èå´å
çä»»ä½å符ï¼åä¸ä¼ä¸è½½è¯¥åä½ã
@font-face {
font-family: "Open Sans";
src: url("OpenSans-Regular-webfont.woff2") format("woff2");
unicode-range: U+0025-00FF;
}
ä½¿ç¨ font-display æè¿°ç¬¦å®ä¹åä½çæ¾ç¤ºè¡ä¸º
åºç¨äº @font-face at è§åç font-display æè¿°ç¬¦å®ä¹äºæµè§å¨å è½½åæ¾ç¤ºåä½æä»¶çæ¹å¼ï¼ä½¿å¾æåå¨å使£å¨å è½½æå 载失败æ¶é½è½ä»¥å¤ç¨å使¾ç¤ºãè¿éè¿ä½¿ææ¬å¯è§è䏿¯æ¾ç¤ºç©ºç½å±å¹æ¥æé«æ§è½ï¼ä½ä»£ä»·æ¯åºç°æªæ ·å¼åææ¬çéªçã
@font-face {
font-family: someFont;
src: url("/proxy/developer.mozilla.org/path/to/fonts/someFont.woff") format("woff");
font-weight: 400;
font-style: normal;
font-display: fallback;
}
ä½¿ç¨ CSS å±éä¼åæ ·å¼éæ°è®¡ç®
éè¿ä½¿ç¨ CSS å±é模åä¸å®ä¹ç屿§ï¼ä½ å¯ä»¥æç¤ºæµè§å¨å°é¡µé¢çä¸åé¨åéç¦»å¼æ¥ï¼å¹¶ç¬ç«å°ä¼åå®ä»¬ç渲æãè¿å è®¸å¨æ¸²æå个é¨åæ¶æé«æ§è½ãä¾å¦ï¼ä½ å¯ä»¥æå®æµè§å¨å¨ç¹å®å®¹å¨äºè§å£ä¸å¯è§ä¹åä¸è¦æ¸²æå®ä»¬ã
contain 屿§å
许ä½è
精确æå®è¦åºç¨äºé¡µé¢ä¸å个容å¨çå±éç±»åãè¿ä½¿å¾æµè§å¨å¯ä»¥é对 DOM çä¸é¨åéæ°è®¡ç®å¸å±ãæ ·å¼ãç»å¶ã大尿å®ä»¬çä»»æç»åã
article {
contain: content;
}
content-visibility 屿§æ¯ä¸ä¸ªæç¨çå¿«æ·æ¹å¼ï¼å
许ä½è
å¨ä¸ç»å®¹å¨ä¸åºç¨ä¸ç»å¼ºå¤§çå±éï¼å¹¶æå®æµè§å¨å¨éè¦ä¹åä¸è¦å¸å±å渲æè¿äºå®¹å¨ã
å¦ä¸ä¸ªå±æ§ contain-intrinsic-size ä¹å¯ç¨ï¼å®å
è®¸ä½ ä¸ºå®¹å¨æä¾ä¸ä¸ªå ä½å¤§å°ï¼åæ¶å®ä»¬åå°å±éçå½±åãè¿æå³çå³ä½¿å®¹å¨çå
容尿ªæ¸²æï¼å®ä»¬ä¹ä¼å æ®ç©ºé´ï¼å
许å
嫿§è¡å
¶æ§è½ä¼åèä¸ä¼åºç°æ»å¨æ¡çåå¨åå¡é¡¿ãè¿æé«äºå
容æ£å¨å è½½æ¶ç¨æ·ä½éªçè´¨éã
article {
content-visibility: auto;
contain-intrinsic-size: 1000px;
}
åè§
- CSS å¨ç»æ§è½
- å使佳å®è·µï¼æ¥èª web.developers.google.cnï¼2022ï¼
- content-visibilityï¼æåæ¸²ææ§è½çæ° CSS 屿§ï¼æ¥èª web.developers.google.cnï¼2022ï¼