box-sizing
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
CSS ä¸ç box-sizing 屿§å®ä¹äº user agent åºè¯¥å¦ä½è®¡ç®ä¸ä¸ªå
ç´ çæ»å®½åº¦åæ»é«åº¦ã
å°è¯ä¸ä¸
box-sizing: content-box;
width: 100%;
box-sizing: content-box;
width: 100%;
border: solid #5b6dcd 10px;
padding: 5px;
box-sizing: border-box;
width: 100%;
border: solid #5b6dcd 10px;
padding: 5px;
<section id="default-example">
<div id="example-element-parent">
<p>Parent container</p>
<div class="transition-all" id="example-element">
<p>Child container</p>
</div>
</div>
</section>
#example-element-parent {
width: 220px;
height: 200px;
border: solid 10px #ffc129;
margin: 0.8em;
}
#example-element {
height: 60px;
margin: 2em auto;
background-color: rgba(81, 81, 81, 0.6);
}
#example-element > p {
margin: 0;
}
å¨ CSS ç忍¡åçé»è®¤å®ä¹éï¼ä½ 对ä¸ä¸ªå
ç´ æè®¾ç½®ç width ä¸ height åªä¼åºç¨å°è¿ä¸ªå
ç´ çå
容åºã妿è¿ä¸ªå
ç´ æä»»ä½ç border æ padding ï¼ç»å¶å°å±å¹ä¸æ¶ççå宽度åé«åº¦ä¼å ä¸è®¾ç½®çè¾¹æ¡åå
è¾¹è·å¼ãè¿æå³çå½ä½ è°æ´ä¸ä¸ªå
ç´ ç宽度åé«åº¦æ¶éè¦æ¶å»æ³¨æå°è¿ä¸ªå
ç´ çè¾¹æ¡åå
è¾¹è·ã彿们å®ç°ååºå¼å¸å±æ¶ï¼è¿ä¸ªç¹ç¹å°¤å
¶ç¦äººã
box-sizing 屿§å¯ä»¥è¢«ç¨æ¥è°æ´è¿äºè¡¨ç°ï¼
content-boxæ¯é»è®¤å¼ãå¦æä½ è®¾ç½®ä¸ä¸ªå ç´ ç宽为 100pxï¼é£ä¹è¿ä¸ªå ç´ çå 容åºä¼æ 100px 宽ï¼å¹¶ä¸ä»»ä½è¾¹æ¡åå è¾¹è·ç宽度é½ä¼è¢«å¢å å°æåç»å¶åºæ¥çå ç´ å®½åº¦ä¸ãborder-boxåè¯æµè§å¨ï¼ä½ æ³è¦è®¾ç½®çè¾¹æ¡åå è¾¹è·ç弿¯å å«å¨ width å çãä¹å°±æ¯è¯´ï¼å¦æä½ å°ä¸ä¸ªå ç´ ç width 设为 100pxï¼é£ä¹è¿ 100px ä¼å å«å®ç border å paddingï¼å 容åºçå®é å®½åº¦æ¯ width åå» (border + padding) çå¼ã大夿°æ åµä¸ï¼è¿ä½¿å¾æä»¬æ´å®¹æå°è®¾å®ä¸ä¸ªå ç´ ç宽é«ã
夿³¨ï¼å¯¹äºæ°ç web ç«ç¹ï¼ä½ å¯è½å¸æé¦å å° box-sizing 设置为 border-boxï¼å¦ä¸æç¤ºï¼
* {
box-sizing: border-box;
}
è¿ä½¿å¾å¤çå ç´ å¤§å°çå·¥ä½åå¾å®¹æå¾å¤ï¼å¹¶ä¸é常æ¶é¤äºå¨å¸å±å 容æ¶å¯è½éå°ç许å¤é·é±ãç¶èï¼å¨æäºæ åµä¸ï¼ä½ åºè°¨æ 使ç¨è¿ä¸ªå±æ§ãä¾å¦ï¼ä½ æ£å¨ç¼åä¸ä¸ªå°ç±å ¶ä»äººä½¿ç¨çå ±äº«ç»ä»¶åºï¼å¦æä»ä»¬ç½ç«çå ¶ä½é¨å没æè®¾ç½®æ¤å¼ï¼ä»ä»¬å¯è½ä¼åç°å¾é¾ä½¿ç¨ä½ çç»ä»¶åºã
è¯æ³
box-sizing 屿§è¢«æå®ä¸ºä¸é¢å表ä¸çå
³é®åã
屿§å¼
content-box-
é»è®¤å¼ï¼æ åç忍¡åã
widthä¸heightåªå æ¬å 容ç宽åé«ï¼ä¸å æ¬è¾¹æ¡ï¼borderï¼ï¼å è¾¹è·ï¼paddingï¼ï¼å¤è¾¹è·ï¼marginï¼ã注æï¼å è¾¹è·ãè¾¹æ¡åå¤è¾¹è·é½å¨è¿ä¸ªçåçå¤é¨ãæ¯å¦è¯´ï¼.box {width: 350px; border: 10px solid black;}卿µè§å¨ä¸ç渲æçå®é å®½åº¦å°æ¯ 370pxã尺寸计ç®å ¬å¼ï¼
width= å 容ç宽度height= å 容çé«åº¦
宽度åé«åº¦ç计ç®å¼é½ä¸å å«å 容çè¾¹æ¡ï¼borderï¼åå è¾¹è·ï¼paddingï¼ã
border-box-
widthåheight屿§å æ¬å 容ï¼å è¾¹è·åè¾¹æ¡ï¼ä½ä¸å æ¬å¤è¾¹è·ãè¿æ¯å½ææ¡£å¤äº Quirks æ¨¡å¼ æ¶ Internet Explorer 使ç¨ççæ¨¡åãæ³¨æï¼å¡«å åè¾¹æ¡å°å¨çåå , ä¾å¦ï¼.box {width: 350px; border: 10px solid black;}导è´å¨æµè§å¨ä¸åç°ç宽度为 350px ççåãå 容æ¡ä¸è½ä¸ºè´ï¼å¹¶ä¸è¢«åé å° 0ï¼ä½¿å¾ä¸å¯è½ä½¿ç¨ border-box 使å ç´ æ¶å¤±ã尺寸计ç®å ¬å¼ï¼
width= border + padding + å 容ç宽度height= border + padding + å 容çé«åº¦
å½¢å¼è¯æ³
box-sizing =
content-box |
border-box
示ä¾
æ¬ä¾æ¾ç¤ºäºä¸åç box-sizing å¼å¦ä½æ¹åä¸¤ä¸ªåæ¬ç¸åçå
ç´ çæ¸²æå°ºå¯¸ã
HTML
<div class="content-box">Content box</div>
<br />
<div class="border-box">Border box</div>
CSS
div {
width: 160px;
height: 80px;
padding: 20px;
border: 8px solid red;
background: yellow;
}
.content-box {
box-sizing: content-box;
/* Total width: 160px + (2 * 20px) + (2 * 8px) = 216px
Total height: 80px + (2 * 20px) + (2 * 8px) = 136px
Content box width: 160px
Content box height: 80px */
}
.border-box {
box-sizing: border-box;
/* Total width: 160px
Total height: 80px
Content box width: 160px - (2 * 20px) - (2 * 8px) = 104px
Content box height: 80px - (2 * 20px) - (2 * 8px) = 24px */
}
ç»æ
è§è
| è§è |
|---|
| CSS Box Sizing Module Level 3 > # box-sizing > |
| åå§å¼ | content-box |
|---|---|
| éç¨å ç´ | all elements that accept width or height |
| æ¯å¦æ¯ç»§æ¿å±æ§ | å¦ |
| 计ç®å¼ | as specified |
| å¨ç»ç±»å | 离æ£å¼ |