使ç¨ç¹æ§æ¥è¯¢
ç¹æ§æ¥è¯¢ ä½¿ç¨ CSS ç at è§å @supports å建ãå®ç»äº web å¼åè ä¸ç§æµè¯æµè§å¨æ¯å¦æå¯¹æä¸ªç¡®å®ç¹æ§çæ¯æï¼èåæä¾åºäºæµè¯ç»æçæç CSS çæ¹æ³ã卿¤æåä¸ä½ å°å¦ä¹ å¦ä½ä½¿ç¨ç¹æ§æ¥è¯¢å®ç°æ¸è¿å¼å¢å¼ºã
è¯æ³
CSS ç¹æ§æ¥è¯¢æ¯ CSS Conditional Rules module æ åçä¸é¨åï¼è¿ä¸æ åä¹å å«äºåªä½æ¥è¯¢ @media è§åï¼å¨ä½ 使ç¨ç¹æ§æ¥è¯¢çæ¶åï¼ä½ ä¼åç°å®ä»¬çè¡ä¸ºæ¹å¼ä¸åªä½æ¥è¯¢ç±»ä¼¼ãä¸åç¹å¨äºåªä½æ¥è¯¢æ¯æµè¯ç½é¡µè¿è¡çç¯å¢ç¸å ³å 容ï¼ä½ç¹æ§æ¥è¯¢æµè¯çæ¯æµè§å¨å¯¹ CSS ç¹æ§çæ¯æã
ç¹æ§æ¥è¯¢ç± @supports è§åç»æï¼ç´§è·çæ¯å±æ§å以åä½ æ³æµè¯ç屿§å¼ãä½ ä¸è½æµè¯ä¸ä¸ªååç屿§åæ¯å¦ displayï¼è§åéè¦ä½ æä¾ä¸ä¸ªå±æ§å以åä¸ä¸ªå¼ï¼
@supports (property: value) {
å°è¦åºç¨ç CSS è§å
}
æ¯å¦ï¼è¥ä½ æ³æ£æµä¸ä¸ªæµè§å¨æ¯å¦æ¯æ row-gap 屿§ï¼ä½ åºå½åä¸å¦ä¸çç¹æ§æ¥è¯¢ã大é¨åæ
åµä¸è¿ä¸ªæ¥è¯¢ç»æä¸ä½ æä½¿ç¨ç弿 å
³ââä¹å°±æ¯å¦æä½ æ³ä»
ä»
æ£æµæµè§å¨æ¯å¦æ¯æè¿ä¸ª CSS 屿§ï¼é£ä¹ä»»ä½ææç屿§å¼é½å¯ä»¥ã
<div class="box">
If your browser supports the row-gap property, the border will be dashed and
text will be red.
</div>
body {
font: 1.2em / 1.5 sans-serif;
}
.box {
border: 4px solid blue;
color: blue;
padding: 1em;
}
@supports (row-gap: 10px) {
.box {
border: 4px dashed darkgreen;
color: red;
}
}
è¥ä½ æµè¯çæ¯æä¸ªå±æ§çæ°å¼ï¼é£ä¹å±æ§ - å¼å¯¹ä¸å¼çé£ä¸é¨åå°±æ´å å
³é®ãdisplay 屿§å°±æ¯ä¸ä¸ªå¾å¥½çä¾åãææçæµè§å¨é½æ¯æ display 屿§ï¼è¿å¯ä»¥è¿½æº¯å° CSS1 ä¸ç display: block ãç¶è display: flex å display: grid è¿äºå¼æ¯æ°åºç°çãCSS 屿§ç»å¸¸ä¼æé¢å¤çæ°å¼å å
¥ï¼æä»¥ä½ å¿
é¡»æ£æµå±æ§ä¸å¼çäºå®æå³çä½ å¯ä»¥æ£æµé£äºå¼çæµè§å¨æ¯ææ§ãï¼åæï¼There are often additional values added to properties in CSS, and so the fact that you have to test for property and value means that you can detect support for these values.ï¼
æµè¯æ¯å¦ç¼ºå°æ¯æ
é¤äºæµè¯æµè§å¨æ¯å¦æ¯ææä¸ªç¹æ§å¤ï¼ä½ ä¹å¯ä»¥éè¿æ·»å not å
³é®åæµè¯æµè§å¨æ¯å¦ä¸æ¯ææä¸ªç¹æ§ã
@supports not (property: value) {å°è¦åºç¨ç CSS è§å
}
ä¸è¿°ç¹æ§æ¥è¯¢ä¸ç CSS è§åä»
ä¼å¨æµè§å¨ä¸æ¯æ row-gap 屿§çæ
åµä¸çæã
<div class="box">
If your browser does not support row-gap, the content will be darkgreen with a
dashed border.
</div>
body {
font: 1.2em / 1.5 sans-serif;
}
.box {
border: 4px solid blue;
color: blue;
padding: 1em;
}
@supports not (row-gap: 10px) {
.box {
border: 4px dashed darkgreen;
color: darkgreen;
}
}
æµè¯å¤ä¸ªç¹æ§
ä½ å¯è½éè¦å¨åè½æ¥è¯¢ä¸æµè¯å¯¹å¤ä¸ªå±æ§çæ¯æã为æ¤ï¼ä½ åºå½å
å«è¦æµè¯çåè½çå表ï¼ä½¿ç¨ and å
³é®ååéï¼
@supports (property1: value) and (property2: value) {
å°è¦åºç¨ç CSS è§å
}
æ¯å¦ï¼è¥ä½ æ³è¦åºç¨ç CSS éè¦æµè§å¨æ¯æ CSS Shape ä¸ CSS Gridï¼ä½ å¯ä»¥å建å¯ä»¥åæ¶æ£æµè¿ä¸¤ä¸ªç¹æ§çè§åãä¸è¿°è§ååªæå¨æµè§å¨åæ¶æ¯æ shape-outside: circle() ådisplay: grid çæ¶åæä¼è¿å trueã
<div class="box">
If your browser supports <code>display: grid</code> and
<code>shape-outside: circle()</code>, the content will be darkgreen with a
dashed border.
</div>
body {
font: 1.2em / 1.5 sans-serif;
}
.box {
border: 4px solid blue;
color: blue;
padding: 1em;
}
@supports (display: grid) and (shape-outside: circle()) {
.box {
border: 4px dashed darkgreen;
color: darkgreen;
}
}
ä½ ä¹å¯ä»¥ä½¿ç¨ orï¼å¦æææè§å䏿ä¸ä¸ªè§åå¯ä»¥å¹é
é£ä¹ä½ æ³åºç¨ç CSS æ ·å¼å°±ä¼è¢«å¯ç¨ã
@supports (property1: value) or (property2: value) {
å°è¦åºç¨ç CSS è§å
}
ä½ å¯ä»¥å¨æµè¯æ¶ä¸ºä»»ä½æ å屿§å 䏿µè§å¨å¼æåç¼ï¼ç¶åæµè¯ç¹å®å¼æç CSS æ¯ææ§ï¼è¿é常æç¨ã
<div class="box">
The text and border will be green if your browser supports font smoothing.
</div>
body {
font: 1.2em / 1.5 sans-serif;
}
.box {
border: 4px solid blue;
color: blue;
padding: 1em;
}
@supports (font-smooth: always) or (-webkit-font-smoothing: antialiased) {
.box {
border: 4px dashed darkgreen;
color: darkgreen;
}
}
ç¹æ§æ¥è¯¢çå±éæ§
@supports è§åæµè¯æµè§å¨æ¯å¦è½è§£æä¸ä¸ªæå¤ä¸ªå±æ§ä»¥åå
¶å¼ï¼ä»¥åæ¯å¦æµè§å¨æ¯å¦è§å¾æ¯æè¿äºå±æ§ä»¥åå
¶å¼ã妿æµè§å¨çè§£è¿äºå±æ§åå¼ï¼é£ä¹å®å°±ä¼ç»ä¸ä¸ªè¯å®çåçãå æ¤ï¼ç¹æ§æ¥è¯¢ä¸è½æ£æµæµè§å¨æ¯å¦æ£ç¡®å°è¡¨ç°è¿äºå±æ§åå¼ï¼ä»¥åæ¯å¦æ²¡æ bug åå¨ã
å¦å¤ï¼ç¹æ§æ¥è¯¢æ æ³æ£æµå±é¨å®ç° ï¼partial implementationsï¼ãä¸ä¸ªå¾å¥½çä¾åå°±æ¯ gap 屿§ãæææ¯æ CSS Grid çæµè§å¨é½æ¯æ gap å¨ CSS Grid ä¸ï¼ç¶èåªæ Firefox æµè§å¨æ¯æ Flexbox ä¸ç gapãè¥ä½ 为äºå¨ Flexbox ä¸ä½¿ç¨ gap 屿§èæµè¯å
¶æµè§å¨æ¯æï¼å°±ç®å®è¿æ²¡æï¼å¨ Flexbox ä¸ï¼å®ç°ä½ ä¹ä¼å¾å°æµè§å¨è¯å®çåçã
å¦ä½ä½¿ç¨ç¹æ§æ¥è¯¢è¿è¡æ¸è¿å¼å¢å¼º
å¨éæ¥å¢å¼ºä¸ä¸ªç«ç¹æ¶ï¼ç¹æ§æ¥è¯¢æ¯ä¸ä¸ªé常æç¨çå·¥å ·ãå®ä»¬ä½¿ä½ è½å¤ä¸ºæææµè§å¨æä¾è¯å¥½çè§£å³æ¹æ¡ï¼å¹¶ä¸ºé£äºæ¯ææ°ç¹æ§çæµè§å¨æä¾å¢å¼ºçè§£å³æ¹æ¡ã
ç¶èï¼æäºæµè§å¨æ¢ä¸æ¯æç¹æ§æ¥è¯¢ï¼ä¹ä¸æ¯ææä»¬å¸æä½¿ç¨çç¹æ§ãä¾å¦ï¼æä»¬ä¹è®¸å¸æä½¿ç¨ CSS Gridï¼ä½ IE11 䏿¯æå®ãæä»¬ä¹ä¸è½ä¸ºå ¶å建ä¸ä¸ªé对没æ Grid æ¯æçæµè§å¨çå夿 ·å¼ï¼å 为 IE11 ä¹ä¸æ¯æç¹æ§æ¥è¯¢ãç¶èå¨å®è·µä¸ï¼å½ä½¿ç¨ç¹æ§æ¥è¯¢è¿è¡æ¸è¿å¢å¼ºæ¶ï¼ç¶èè¿å¹¶ä¸éè¦ãä½ ç¡®å®éè¦æä¸ä¸ªç»ç» CSS çæ¹å¼ï¼é£ä¹åºå½å ä¸ºä¸æ¯ææ°ç¹æ§çæµè§å¨ç¼å CSS æ ·å¼ï¼ç¶åå¨ç¹æ§æ¥è¯¢ä¸è¿è¡è¦çã
让æä»¬çä¸ä¸ªé常ç®åçä¾åï¼å¨è¿ä¸ªä¾åä¸ï¼ç¹æ§æ¥è¯¢å°±æ´¾ä¸ç¨åºäºï¼å®ä½¿ç¨ä¸è¿°çæ¹å¼æ¥ç»ç» CSSã
å设æä»¬æ³è¦å建ä¸è¡ä¸ä¸ªçåçå¸å±ï¼çæ³æ åµä¸ï¼æä»¬æ³è¦ä½¿ç¨ CSS Grid Layout å¸å±ã使¯ï¼æä»¬å¸ææä¸ä¸ªä½¿ç¨æµ®å¨ï¼floatsï¼çæ§æµè§å¨çå¸å±ãæä»¬å¯ä»¥å ç¨ä¸é¢ç代ç å建浮å¨å¸å±ï¼å®æä¾äºä¸ä¸ªåã
æµè§å¨ä¼å¿½ç¥å
¶æ æ³è¯å«ç CSS 屿§æè
å¼ãæä»¥æä»¬å¯ä»¥å¼å§ä½¿ç¨ CSS Grid æ¥å¢å¼ºæä»¬çå¸å±ã䏿¯æ Grid çæµè§å¨å°ä¼å¿½ç¥ display 屿§ç grid å¼ã䏿¦ä¸ä¸ªæµ®å¨é¡¹æä¸ºç½æ ¼é¡¹ï¼æµ®å¨å°±ä¼è¢«ç§»é¤ââä½ å¯ä»¥é
读 Supporting Older Browsers æ¥äºè§£æ´å¤ãå æ¤æµ®å¨ççæ¬å°±ä¼è¢«ç½æ ¼ççæ¬æ¿ä»£ã
ç¶èé®é¢æ¥äºï¼èµ·å äºæä»¬ä¸ºäºä½¿æµ®å¨é¡¹ç®æ¾ç¤ºä¸ºä¸åèå¨ä¸é¢è®¾ç½®ç width 屿§ï¼å®ç°å¨è¢«ç½æ ¼è§£é为åå¨ç½æ ¼ä¸ç宽度ï¼è䏿¯å®¹å¨ç宽度ï¼ç¸å¯¹äºæµ®å¨å¸å±ï¼ã
妿 display: grid æ¯è¢«æµè§å¨æ¯æçï¼æä»¬å°±éè¦ä¸ä¸ªæ¹æ³å»ç§»é¤ width 屿§ãè¿æ£æ¯ç¹æ§æ¥è¯¢æè§£å³çé®é¢ï¼å½ Grid è¢«æ¯æçæ¶åï¼æä»¬å°±è½å° width 设置å auto ã
å¨ä¸è¿°åºæ¯ä¸ï¼IE11 æ¯å¦æ¯æç¹æ§æ¥è¯¢æè CSS Grid å·²ç»æ å ³ç´§è¦ââä¸è®ºä½æ¶å®é½è½è·å¾ float ççæ¬ï¼ç¶å卿¯æ Grid çæµè§å¨ä¸è¿ä¸è¡ä¸ºå°±ä¼è¢«è¦çã
ç¼åä¸è¿°ä»£ç çå¦ä¸ç§æ¹æ³æ¯å°ææç½æ ¼ä»£ç å è£ å¨ä¸ä¸ªç¹æ§æ¥è¯¢ä¸ï¼å¦ä¸æç¤ºã
è¿æå³çä½ å¯è½éè¦ä¸äºé¢å¤ä»£ç ï¼ä½ä¹æå¥½å¤ï¼ä½ å¯ä»¥éè¿æ
æåé屿§æè
å¼çå忥æµè¯ä½ çåå¤ä»£ç ãä½ å¯ä»¥éè¿ä¿®æ¹ä¸é¢å¨çº¿ä¾åä¸ç display: grid 为 display: grip æè
å
¶ä»æ æå¼æ¥å°è¯ã
æ»ç»
åè½æ¥è¯¢å¯ä»¥å¸®å©ä½ å¼å§ä½¿ç¨æ´æ°çåè½ï¼å®å¯ä»¥å¢å¼ºæ§æµè§å¨ä½¿ç¨çç®åçç«ç¹çæ¾ç¤ºãç±äºå¯ä»¥éå¯¹å ¶æ¯æçæµè§å¨èæå CSSï¼å æ¤ä¸ä¼æåéæ¾ç¤ºä½¿ç¨çæ ·å¼æ¼åºçé£é©ï¼å°±åä¸é¢ç Grid 示ä¾é£æ ·ã