๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

[Easy] ๐Ÿท๏ธ Box Model

Defaultโ€‹

Box Model ๅœจ CSS ็•ถไธญๆ˜ฏ่ขซ็”จไพ†่จŽ่ซ–ๅฆ‚ไฝ•่จญ่จˆไฝˆๅฑ€็š„่ก“่ชžใ€‚ไป–ๆœฌ่บซๅฏไปฅ็†่งฃ็‚บไธ€ๅ€‹ๅŒ…่ฃน HTML ๅ…ƒ็ด ็š„็›’ๅญ๏ผŒไธญ้–“ๆœ‰ๅ››ๅ€‹ไธป่ฆ็š„ๅฑฌๆ€ง :

  • content : ไธป่ฆ็”จๆ–ผ้กฏ็คบๅ…ƒ็ด ็š„ๅ…งๅฎน๏ผŒ่ญฌๅฆ‚ๆ–‡ๅญ—ใ€‚
  • padding : ๅ…ƒ็ด ็š„ๅ…งๅฎนๅ’Œๅ…ƒ็ด ้‚Š็•Œ็š„่ท้›ข
  • margin : ๅ…ƒ็ด ๅฐๅค–ๅ…ถไป–ๅ…ƒ็ด ็š„่ท้›ข
  • border : ๅ…ƒ็ด ๆœฌ่บซ็š„้‚Š็ทš

box-sizingโ€‹

ๆฑบๅฎš Box Model ไฝฟ็”จ็š„้กžๅž‹๏ผŒๆœƒ้€้Ž box-sizing ้€™ๅ€‹่ชžๆณ•ใ€‚

ๆ„ๆ€ๆ˜ฏๆŒ‡๏ผŒ็•ถๅ…ƒ็ด ่จˆ็ฎ—ๅฏฌๅบฆๅ’Œ้ซ˜ๅบฆๆ™‚๏ผŒpadding, border ้€™ๅ…ฉๅ€‹ๅฑฌๆ€งๆ˜ฏๆŽก็”จๅฐๅ…งๅกซๅ……้‚„ๆ˜ฏๅฐๅค–ๆ“ดๅ……ใ€‚

ๅ…ถ้ ่จญๅ€ผ็‚บ content-box๏ผŒๆŽก็”จๅฐๅค–ๆ“ดๅ……๏ผŒๅœจ้€™ๅ€‹ๆขไปถไธ‹๏ผŒ้™คไบ†ๅ…ƒ็ด ่‡ชๅทฑ็š„ๅฏฌ้ซ˜ๅค–๏ผŒ้กๅค–็š„ padding, border ้ƒฝ่ฆๅŠ ๅ…ฅ่จˆ็ฎ—ใ€‚ๅฆ‚ไธ‹ :

div {
width: 100px;
padding: 10px;
border: 1px solid #000;
}

้€™ๅ€‹ div ็š„ๅฏฌๅบฆ่จˆ็ฎ—ๆ˜ฏ 100px(width) + 20px(ๅทฆๅณ padding) + 2px(ๅทฆๅณ border) = 122pxใ€‚

border-boxโ€‹

้กฏ็„ถไธŠ่ฟฐ้€™็จฎๆ–นๅผไธฆไธๅฏ้ ๏ผŒๆœƒไฝฟๅ‰็ซฏ้–‹็™ผๆ™‚๏ผŒ่ขซ่ฟซ้œ€่ฆไธ€็›ด่จˆ็ฎ—ๅ…ƒ็ด ๅฏฌ้ซ˜๏ผŒ็‚บไบ†ๆ”นๅ–„้–‹็™ผ้ซ”้ฉ—๏ผŒ่‡ช็„ถๅพ—ๆ”นๆŽกๅฆไธ€ๆจกๅผ๏ผŒๅณ border-boxใ€‚

ๅฆ‚ไธ‹ไพ‹๏ผŒๅœจๆจฃๅผๅˆๅง‹ๅŒ–ๆ™‚ๅฐ‡ๅ…จ้ซ”ๅ…ƒ็ด  box-sizing ็š„ๅ€ผ่จญ็‚บ border-box :

* {
box-sizing: border-box; // global style
}

ๅฆ‚ๆญคไธ€ไพ†๏ผŒๅฐฑๆœƒๆ”นๆŽกๅฐๅ…งๅกซๅ……็š„ๅฝขๅผ๏ผŒๅ…ƒ็ด ็š„ๅฏฌ้ซ˜่จญ่จˆๆ›ด็‚บ็›ด่ฆบ๏ผŒไธๅฟ…็‚บไบ† padding ๆˆ– border ๅŽปๅขžๆธ›ๆ•ธๅญ—ใ€‚

ๅฐๆฏ”ไพ‹้กŒโ€‹

ๅ‡่จญๆœ‰ไปฅไธ‹็›ธๅŒ็š„ๆจฃๅผ่จญๅฎš๏ผš

.box {
width: 100px;
height: 100px;
padding: 10px;
border: 5px solid #000;
margin: 20px;
}

content-box๏ผˆ้ ่จญๅ€ผ๏ผ‰โ€‹

  • ๅฏฆ้š›ไฝ”็”จๅฏฌๅบฆ = 100px(width) + 20px(ๅทฆๅณ padding) + 10px(ๅทฆๅณ border) = 130px
  • ๅฏฆ้š›ไฝ”็”จ้ซ˜ๅบฆ = 100px(height) + 20px(ไธŠไธ‹ padding) + 10px(ไธŠไธ‹ border) = 130px
  • content ๅ€ๅŸŸ = 100px ร— 100px
  • ๆณจๆ„๏ผšmargin ไธ่จˆๅ…ฅๅ…ƒ็ด ๅฏฌๅบฆ๏ผŒไฝ†ๆœƒๅฝฑ้Ÿฟ่ˆ‡ๅ…ถไป–ๅ…ƒ็ด ็š„่ท้›ข

border-boxโ€‹

  • ๅฏฆ้š›ไฝ”็”จๅฏฌๅบฆ = 100px๏ผˆpadding ๅ’Œ border ๅ‘ๅ…งๆ“ ๅฃ“๏ผ‰
  • ๅฏฆ้š›ไฝ”็”จ้ซ˜ๅบฆ = 100px
  • content ๅ€ๅŸŸ = 100px - 20px(ๅทฆๅณ padding) - 10px(ๅทฆๅณ border) = 70px ร— 70px
  • ๆณจๆ„๏ผšmargin ๅŒๆจฃไธ่จˆๅ…ฅๅ…ƒ็ด ๅฏฌๅบฆ

่ฆ–่ฆบๅŒ–ๅฐๆฏ”โ€‹

content-box:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ margin (20px) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ border (5px) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€ padding (10px) โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ content (100ร—100) โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
็ธฝๅฏฌๅบฆ๏ผš130px๏ผˆไธๅซ margin๏ผ‰

border-box:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ margin (20px) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ border (5px) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€ padding (10px) โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ content (70ร—70) โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
็ธฝๅฏฌๅบฆ๏ผš100px๏ผˆไธๅซ margin๏ผ‰

ๅธธ่ฆ‹้™ท้˜ฑโ€‹

1. margin ็š„่™•็†โ€‹

็„ก่ซ–ๆ˜ฏ content-box ๆˆ– border-box๏ผŒmargin ้ƒฝไธๆœƒ่ขซ่จˆๅ…ฅๅ…ƒ็ด ็š„ๅฏฌ้ซ˜๏ผŒๅ…ฉ็จฎๆจกๅผๅชๅฝฑ้Ÿฟ padding ๅ’Œ border ็š„่จˆ็ฎ—ๆ–นๅผใ€‚

.box {
box-sizing: border-box;
width: 100px;
padding: 10px;
border: 5px solid;
margin: 20px; /* ไธ่จˆๅ…ฅ width */
}
/* ๅ…ƒ็ด ๅฏฆ้š›ไฝ”็”จๅฏฌๅบฆไปๆ˜ฏ 100px๏ผŒไฝ†่ˆ‡ๅ…ถไป–ๅ…ƒ็ด ็š„่ท้›ขๆœƒๅคš 20px */

2. ็™พๅˆ†ๆฏ”ๅฏฌๅบฆโ€‹

็•ถไฝฟ็”จ็™พๅˆ†ๆฏ”ๅฏฌๅบฆๆ™‚๏ผŒ่จˆ็ฎ—ๆ–นๅผไนŸๆœƒๅ—ๅˆฐ box-sizing ๅฝฑ้Ÿฟ๏ผš

.parent {
width: 200px;
}

.child {
width: 50%; /* ็นผๆ‰ฟ็ˆถๅ…ƒ็ด ็š„ 50% = 100px */
padding: 10px;
border: 5px solid;
}

/* content-box: ๅฏฆ้š›ไฝ”็”จ 130px๏ผˆๅฏ่ƒฝ่ถ…ๅ‡บ็ˆถๅ…ƒ็ด ๏ผ‰ */
/* border-box: ๅฏฆ้š›ไฝ”็”จ 100px๏ผˆๅ‰›ๅฅฝๆ˜ฏ็ˆถๅ…ƒ็ด ็š„ 50%๏ผ‰ */

3. inline ๅ…ƒ็ด โ€‹

box-sizing ๅฐ inline ๅ…ƒ็ด ไธ่ตทไฝœ็”จ๏ผŒๅ› ็‚บ inline ๅ…ƒ็ด ็š„ width ๅ’Œ height ่จญๅฎšๆœฌ่บซๅฐฑ็„กๆ•ˆใ€‚

span {
display: inline;
width: 100px; /* ็„กๆ•ˆ */
box-sizing: border-box; /* ไนŸ็„กๆ•ˆ */
}

4. min-width / max-widthโ€‹

min-width ๅ’Œ max-width ๅŒๆจฃๅ—ๅˆฐ box-sizing ๅฝฑ้Ÿฟ๏ผš

.box {
box-sizing: border-box;
min-width: 100px; /* ๅŒ…ๅซ padding ๅ’Œ border */
padding: 10px;
border: 5px solid;
}
/* content ๆœ€ๅฐๅฏฌๅบฆ = 100 - 20 - 10 = 70px */

Referenceโ€‹