当前位置:首页 > 技术 > 正文内容

CSS盒模型详解

访客 技术 2026年6月24日 1

CSS盒模型(Box Model)是每个网页元素的内在结构描述,它将每个元素视为一个矩形的盒子,由外到内依次包括:外边距(margin)、边框(border)、内边距(padding)和内容区域(content)。理解盒模型是掌握CSS布局的基础。

两种盒模型类型

CSS中主要存在两种盒模型:标准盒模型(W3C盒模型)和IE盒模型(怪异盒模型)。它们的根本区别在于宽度和高度的计算方式不同。

标准盒模型

在标准盒模型中,元素设置的width和height仅指内容区域(content)的尺寸。元素的总宽度计算方式为:width + padding(左+右) + border(左+右) + margin(左+右);总高度的计算方式类似。

IE盒模型

在IE盒模型中,元素设置的width和height包括了内容区域、内边距和边框。即:width = content宽度 + padding(左+右) + border(左+右);总宽度 = width + margin(左+右)。这种模型让元素尺寸更易于管理,尤其适合响应式设计。

控制盒模型

通过box-sizing属性可以切换盒模型:

  • box-sizing: content-box — 标准盒模型(默认值)
  • box-sizing: border-box — IE盒模型

获取元素尺寸的JavaScript方法

在JavaScript中有多种方式获取元素的宽高:

// 仅适用于内联样式(无法获取CSS样式表中的值)
element.style.width

// 获取计算后样式(仅IE支持)
element.currentStyle.width

// 获取计算后样式(跨浏览器兼容)
window.getComputedStyle(element).width

// 获取元素相对于视口的边界矩形信息
element.getBoundingClientRect().width

getBoundingClientRect()除了width和height,还返回top、right、bottom、left属性,描述元素相对于视口的位置。

外边距折叠(Margin Collapse)

在垂直方向上,相邻元素的外边距会合并为一个外边距,取两者中的较大值。

例如:

<style>
  .box {
    height: 20px;
    margin-top: 10px;
    margin-bottom: 15px;
  }
</style>
<div class="box">A</div>
<div class="box">B</div>

元素A和B之间的距离为15px(取较大的margin-bottom值与margin-top值叠加后取最大值,此处为15px)。

BFC(块级格式化上下文)

BFC(Block Formatting Context)是CSS渲染中的一个独立容器,拥有自己的渲染规则。

BFC的规则

  • 同一BFC内的相邻元素垂直外边距会折叠
  • BFC区域不会与浮动元素重叠
  • BFC是一个隔离的容器,内部元素不会影响外部,反之亦然
  • 计算BFC高度时,浮动元素也会参与计算

创建BFC的条件

  • float不为none
  • positionabsolutefixed
  • displaytabletable-celltable-captionflexinline-block
  • overflow不为visible(常用hidden

BFC的实际用途

1. 清除浮动

当父元素包含浮动子元素时,父元素高度可能塌陷。为父元素设置overflow: hidden可创建BFC,使其包含浮动元素。

2. 防止外边距重叠

示例代码展示margin重叠问题:

<style>
  .top { margin-bottom: 100px; }
  .bottom { margin-top: 50px; }
  .block { width: 100px; height: 100px; background: red; }
</style>
<div class="block top">1</div>
<div class="block bottom">2</div>

运行后两个元素之间的实际距离是100px(取较大的100px),而不是150px。

解决方法:为其中一个元素包裹一层BFC容器:

<div style="overflow: hidden;">
  <div class="block top">1</div>
</div>
<div class="block bottom">2</div>

外层BFC容器隔离了内部的margin,使其不会与外部元素发生重叠,此时两个div之间的距离变为100px(top的margin-bottom)+ 50px(bottom的margin-top)= 150px。

标签: css

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。