”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 理解 CSS 盒子模型:内容框与边框框、内联元素与块元素

理解 CSS 盒子模型:内容框与边框框、内联元素与块元素

发布于2024-08-20
浏览:965

作为前端开发人员,了解 CSS 盒模型是成败的关键,以便能够提供像素完美的布局。让我们深入讨论一下内联元素和块元素在两种盒模型类型(内容盒和边框盒)的上下文中的行为有何不同。

基础知识:盒子里有什么?

Understanding the CSS Box Model: content-box vs border-box, inline vs. block elements

在我们详细讨论之前,有必要回顾一下盒模型是什么。页面上的每个元素都是一个盒子(是的,即使是那些实际上看起来不是四方形的元素)。盒子可以位于其他盒子内、包含其他盒子和/或与其他盒子并排。

盒模型适用于所有这些,并由以下部分组成:

  • 内容框: 一个 HTML 元素或 CSS 伪元素,其中包含您的实际内容 - 文本、图像、您拥有的内容。
  • 内边距: 内容和边框之间的空间。
  • 边框: 围绕内边距和内容的线条。
  • 边距: 边框之外的空间,将其他元素推开。

因此,几乎每个 HTML 元素(包括

)以及每个 CSS 伪元素都是一个盒子。该盒子的“墙壁”是您的边框,可以指定厚度(或宽度)。在该内容和该盒子的墙壁之间有填充。在这些墙壁和其他盒子之间有边距。

内联元素和块元素之间的主要区别

了解盒模型如何影响内联元素与块元素的主要区别至关重要:

  1. 宽度: 默认情况下,块元素会展开以填充其容器。内联元素?它们只占用足够的空间来容纳其内容。

  2. 高度:对于块元素,padding、border、margin都会增加高度。无论垂直内边距或边框如何,内联元素都保持在行高内。

  3. 布局影响:块元素影响水平和垂直布局。内联元素都是关于水平流动的,对垂直间距的影响最小。

  4. 边距折叠: 边距折叠是一种特定于块元素的行为,其中相邻的垂直边距可以合并(因此一个元素上的 margin-bottom:20px 可以折叠为 margin-top: 20px 在下面的元素上,创建一个 20px 边距)。内联元素不玩这个游戏。

现在我们知道了盒模型的组成部分以及内联元素和块元素之间的区别,让我们看看内容框如何根据它们是内联元素还是块元素而受到 box-sizing 属性的影响。

框大小调整:内容框与边框框

box-sizing 属性控制如何计算元素的宽度和高度,它可以显着影响布局。

1. 带有内联元素的内容框

当 box-sizing: content-box 应用于内联元素时:

  • 宽度和高度:宽度仅由内容决定。内边距、边框和边距添加在此宽度之上。
  • 布局影响:由于内联元素不会破坏文本流,因此元素的宽度仅与内容一样宽。垂直内边距和边框在视觉上存在,但不会影响周围线条的高度。

2. 带有块元素的内容框

当 box-sizing: content-box 应用于块元素时:

  • 宽度和高度:指定的宽度或高度仅适用于内容区域。在其外部添加填充和边框,增加元素的整体大小。
  • 布局影响:除非另有指定,否则块元素默认扩展到其容器的整个宽度。填充和边框会增加元素的大小,将相邻元素推得更远。

3. 带有内联元素的边框

当 box-sizing: border-box 应用于内联元素时:

  • 宽度和高度: 宽度包括内容、内边距和边框。内容区域缩小以容纳指定宽度内的内边距和边框。
  • 布局影响:元素的宽度仍然由内容决定,但现在内边距和边框都包含在该宽度内。垂直内边距和边框在视觉上仍然存在,但不会改变行高。

4. 带有块元素的边框

当 box-sizing: border-box 应用于块元素时:

  • 宽度和高度:指定的宽度和高度包括内容、内边距和边框。这意味着无论添加多少内边距或边框,元素的总大小都与指定的尺寸保持一致。
  • 布局影响:块元素的大小更容易预测,因为内边距和边框包含在指定的宽度内。这使得布局设计更易于管理,特别是在并排对齐元素时。

值得一提的是,虽然 content-box 是默认设置,但 border-box 被广泛认为更直观并提供最大程度的控制。


CSS 盒模型不仅仅是一个强大的概念,它还是前端开发工具库中的基础工具。通过了解框大小如何以不同的方式影响内联和块元素,您可以开始创建既清晰又实用的完美布局,而无需为错误布局进行故障排除而烦恼。

如果您喜欢盒子模型上的下载,请将鼠标悬停在左上角的心形盒子上,并向这篇文章展示所有的爱!

版本声明 本文转载于:https://dev.to/horaceshmorace/understanding-the-css-box-model-content-box-vs-border-box-inline-vs-block-elements-1amh?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-04-04
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 考虑文档中给出的示例:这是内部发生的事情: 现在在3月3日添加另一个月,因为2月在2001年只有2...
    编程 发布于2025-04-04
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-04-04
  • 如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    Transform Pandas DataFrame Column to DateTime FormatScenario:Data within a Pandas DataFrame often exists in various formats, including strings.使用时间数据时...
    编程 发布于2025-04-04
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-04-04
  • 如何将来自三个MySQL表的数据组合到新表中?
    如何将来自三个MySQL表的数据组合到新表中?
    mysql:从三个表和列的新表创建新表 答案:为了实现这一目标,您可以利用一个3-way Join。 选择p。*,d.content作为年龄 来自人为p的人 加入d.person_id = p.id上的d的详细信息 加入T.Id = d.detail_id的分类法 其中t.taxonomy =...
    编程 发布于2025-04-04
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
    编程 发布于2025-04-04
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。 映射{} 因此。我们不使用jQuery的“ .aimimate(...
    编程 发布于2025-04-04
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-04-04
  • 如何简化PHP中的JSON解析以获取多维阵列?
    如何简化PHP中的JSON解析以获取多维阵列?
    php 试图在PHP中解析JSON数据的JSON可能具有挑战性,尤其是在处理多维数组时。要简化过程,建议将JSON作为数组而不是对象解析。执行此操作,将JSON_DECODE函数与第二个参数设置为true:[&&&&& && &&&&& json = JSON = JSON_DECODE($ j...
    编程 发布于2025-04-04
  • 如何在php中使用卷发发送原始帖子请求?
    如何在php中使用卷发发送原始帖子请求?
    如何使用php 创建请求来发送原始帖子请求,开始使用curl_init()开始初始化curl session。然后,配置以下选项: curlopt_url:请求 [要发送的原始数据指定内容类型,为原始的帖子请求指定身体的内容类型很重要。在这种情况下,它是文本/平原。要执行此操作,请使用包含以下标头...
    编程 发布于2025-04-04
  • Python读取CSV文件UnicodeDecodeError终极解决方法
    Python读取CSV文件UnicodeDecodeError终极解决方法
    在试图使用已内置的CSV模块读取Python中时,CSV文件中的Unicode Decode Decode Decode Decode decode Error读取,您可能会遇到错误的错误:无法解码字节 在位置2-3中:截断\ uxxxxxxxx逃脱当CSV文件包含特殊字符或Unicode的路径逃...
    编程 发布于2025-04-04
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-04-04
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    编程 发布于2025-04-04
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-04-04

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3