网页布局必修课:CSS盒模型全面解析

更多优质内容请关注微信公众号 @web前端工程狮
每篇文章都会带示意图、详解、代码,关注我和我一起学前端~

CSS 的 盒模型(Box Model) 是网页布局的基础概念之一,定义了 HTML 元素在页面中如何占据空间。每个 HTML 元素都可以看作是一个矩形的盒子,这个盒子由 内容区域内边距边框外边距 四部分组成。


一、盒模型的组成部分

盒模型由以下四层组成,从内到外依次为:

  1. 内容区域(Content)
    • 元素的实际内容,比如文本、图片等。
    • 通过 widthheight 属性设置内容区域的大小。
  2. 内边距(Padding)
    • 内容区域与边框之间的空白区域。
    • 通过 padding 属性设置,可以分别设置上、右、下、左四个方向的内边距。
  3. 边框(Border)
    • 围绕内容区域和内边距的边框。
    • 通过 border 属性设置,可以设置边框的宽度、样式和颜色。
  4. 外边距(Margin)
    • 元素与其他元素之间的空白区域。
    • 通过 margin 属性设置,可以分别设置上、右、下、左四个方向的外边距。

盒模型的示意图

<!DOCTYPE html>
<html>
<head>
    <style>
        .box {
            width: 200px;
            height: 100px;
            padding: 20px;
            border: 5px solid #ff6b6b;
            margin: 30px;
            background-color: #4ecdc4;
        }
    </style>
</head>
<body>
    <div class="box">盒模型</div>
</body>
</html>


效果说明

  • 内容区域:宽 200px,高 100px,背景色为青色(#4ecdc4)。
  • 内边距:四周各 20px(内容与边框之间的空白)。
  • 边框:5px 宽的红色实线边框(#ff6b6b)。
  • 外边距:四周各 30px(元素与其他元素之间的空白)。

盒模型的属性

  1. 内容区域
    • width:设置内容区域的宽度。
    • height:设置内容区域的高度。
  2. 内边距
    • padding:简写属性,设置所有方向的内边距。
    • padding-toppadding-rightpadding-bottompadding-left:分别设置四个方向的内边距。
padding: 10px; /* 上下左右均为 10px */
padding: 10px 20px; /* 上下 10px,左右 20px */
padding: 10px 20px 30px 40px; /* 上 10px,右 20px,下 30px,左 40px */
  1. 边框
    • border:简写属性,设置边框的宽度、样式和颜色。
    • border-widthborder-styleborder-color:分别设置边框的宽度、样式和颜色。
    • border-topborder-rightborder-bottomborder-left:分别设置四个方向的边框。
border: 2px solid black; /* 宽度 2px,实线,黑色 */
  1. 外边距
    • margin:简写属性,设置所有方向的外边距。
    • margin-topmargin-rightmargin-bottommargin-left:分别设置四个方向的外边距。
margin: 10px; /* 上下左右均为 10px */
margin: 10px 20px; /* 上下 10px,左右 20px */
margin: 10px 20px 30px 40px; /* 上 10px,右 20px,下 30px,左 40px */

二、盒模型的计算方式

默认情况下,元素的总宽度总高度由以下公式计算:

总宽度 = width + padding-left + padding-right + border-left + border-right + margin-left + margin-right
总高度 = height + padding-top + padding-bottom + border-top + border-bottom + margin-top + margin-bottom

例如:

.box {
  width: 200px;
  padding: 10px;
  border: 5px solid black;
  margin: 20px;
}
  • 总宽度 = 200px + 10px + 10px + 5px + 5px + 20px + 20px = 270px
  • 总高度 = 200px + 10px + 10px + 5px + 5px + 20px + 20px = 270px

box-sizing属性

默认情况下,widthheight 只设置内容区域的大小。通过 box-sizing 属性,可以改变盒模型的计算方式。

  1. box-sizing: content-box;(默认值)
    • widthheight 只包括内容区域。
    • 内边距、边框和外边距会额外增加元素的总大小。
<style>
    .box1 {
        box-sizing: content-box;
        width: 200px;
        height: 100px;
        padding: 20px;
        border: 5px solid black;
        background-color: #ffe66d;
    }
</style>
<div class="box1">content-box 总宽度 = 200 + 20*2 + 5*2 = 250px</div>


2. box-sizing: border-box;

  • widthheight 包括内容区域、内边距和边框。
  • 外边距仍然会额外增加元素的总大小。
<style>
    .box2 {
        box-sizing: border-box;
        width: 200px;
        height: 100px;
        padding: 20px;
        border: 5px solid black;
        background-color: #ff6b6b;
    }
</style>
<div class="box2">border-box 总宽度 = 200px(包括 padding 和 border)</div>

三、外边距折叠(Margin Collapse)

当两个垂直方向的外边距相遇时,它们会折叠成一个外边距,其值为两者中的较大者。
例如:

<style>
    .margin-box {
        width: 200px;
        height: 50px;
        background-color: #4ecdc4;
    }
    .box-a {
        margin-bottom: 30px;
    }
    .box-b {
        margin-top: 20px;
    }
</style>
<div class="margin-box box-a">Box A(margin-bottom: 30px)</div>
<div class="margin-box box-b">Box B(margin-top: 20px)</div>

  • 两个盒子之间的实际外边距是 30px(取 30px20px 的较大值)。

四、复杂布局示例

<style>
    .container {
        width: 400px;
        border: 2px dashed #666;
        padding: 20px;
        margin: 50px auto; /* 水平居中 */
    }
    .header {
        background-color: #ff6b6b;
        padding: 10px;
        margin-bottom: 15px;
    }
    .content {
        background-color: #4ecdc4;
        padding: 20px;
        border: 3px solid #2d3436;
    }
</style>

<div class="container">
    <div class="header">Header</div>
    <div class="content">Content 区域</div>
</div>

  • 容器:总宽度 400px + 20px*2(内边距),通过 margin: auto 水平居中。
  • Header:内边距 10px,下方有 15px 的外边距。
  • Content:内边距 20px,边框 3px。

总结

  • 盒模型由 内容区域内边距边框外边距 组成。
  • 默认情况下,widthheight 只设置内容区域的大小。
  • 使用 box-sizing: border-box; 可以更直观地控制元素的总大小。
  • 外边距折叠是垂直方向上外边距的一种特殊行为。

更多优质内容请关注微信公众号 @web前端工程狮
每篇文章都会带示意图、详解、代码,关注我和我一起学前端~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值