搜索
首页web前端css教程管理CSS框模型

管理CSS框模型

Feb 17, 2025 am 10:49 AM

CSS 盒模型:理解网页布局的关键

理解 CSS 最重要的点在于:一切皆为盒子。更具体地说,文档中的每个元素都会生成一个盒子。这个盒子可以是块级盒子,也可以是内联级盒子。盒子的类型决定了元素如何影响页面布局。CSS 盒模型是一个用于描述 HTML 元素布局和大小的概念。每个元素都包含一个用于其内容、填充、边框和边距的盒子。这些盒子组合在一起,决定了元素内容的布局以及相邻元素如何与其并排显示:

Managing the CSS Box Model

元素是否创建盒子以及创建哪种类型的盒子将取决于标记语言。CSS 发展成为一种为 HTML 文档设置样式的方式,因此,许多 CSS 可视化渲染模型都源于 HTML 区分块级元素和内联元素。默认情况下,诸如 <code><p></p><section></section> 之类的元素会创建块级盒子,但 <a></a><span></span><em></em> 会创建内联盒子。另一方面,SVG 不使用盒模型,因此大多数与布局相关的 CSS 属性都不能与 SVG 一起使用。

块级盒子会创建新的内容块,如图 4.1 所示。块级盒子的渲染是垂直的,根据其源顺序排列,并且(除了表格之外)会扩展以填充其包含元素的可用宽度。这被称为普通流。块级盒子的 display 值为 blocklist-itemtable 或任何 table-* 值(例如,table-cell)。

Managing the CSS Box Model

图 4.1. 包含元素(灰色区域)内的 h1、p、ul 和 table 元素的块级盒子

相比之下,内联级盒子不会形成新的内容块。相反,这些盒子构成块级盒子内的行。它们水平显示并填充包含盒子的宽度,如果需要,会换行,如图 4.2 所示。内联级盒子的 display 值为 inlineinline-blockinline-tableruby

Managing the CSS Box Model

图 4.2. 应用了 margin: 1em 和 padding: 5px 的内联盒子的示例

但是盒子的尺寸是如何计算的呢?这就是事情变得更复杂的地方。如图 4.3 所示,盒子尺寸是盒子内容区域、填充宽度和边框宽度的总和。边距宽度为元素创建边距盒子,并影响文档中的其他元素;但是,边距宽度对盒子本身的尺寸没有影响。

CSS 盒模型图示 4

图 4.3. CSS 2.1 盒模型

例如,一个具有 width: 300pxpadding: 20pxborder: 10px<code><p></p> 元素的计算宽度为 360 像素。这是其宽度、左右填充和左右边框宽度属性的总和。要创建一个宽度为 300 像素、填充为 20 像素和边框为 10 像素的元素,宽度需要设置为 240px。大多数主流浏览器就是这样计算宽度的。为了解决浏览器之间竞争模型的部分问题,CSS 工作组引入了 box-sizing 属性。它允许我们选择自己喜欢的盒模型实现,并在处理响应式设计时大大简化计算。

使用 box-sizing 选择盒模型

box-sizing 属性在 CSS 基本用户界面模块级别 3 规范中定义。它有两个可能的值:content-boxborder-box。最初,box-sizing 的值为 content-box。使用此值时,设置元素的 widthheight 属性会影响其内容区域的大小。这与 CSS 2.1 规范中定义的行为相匹配,并且是现代浏览器中的默认行为(如图 4.4 所示)。将 box-sizing 的值设置为 border-box 会产生一些神奇的效果。现在,widthheight 的值将应用于外边框边缘而不是内容区域。边框和填充绘制在元素框内,与旧的 Internet Explorer 5.5 行为匹配。让我们来看一个混合使用百分比宽度和 px 单位的填充和边框的示例:

<div class="wrapper">
  <article>
    <h2 id="This-is-a-headline">This is a headline</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing ...</p>
  </article>
  <aside>
    <h2 id="This-is-a-secondary-headline">This is a secondary headline</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing ...</p>
  </aside>
</div>

我们的 <article></article><aside></aside> 元素都应用了以下 CSS,这为我们提供了图 4.5 中所示的布局,其中第一个元素的宽度为 60%,第二个元素的宽度为 40%:

article, aside {
  background: #FFEB3B;
  border: 10px solid #9C27B0;
  float: left;
  padding: 10px;
}
article {
  width: 60%;
}
aside {
  width: 40%;
}

Managing the CSS Box Model

图 4.5. 元素使用 box-sizing: content-box

默认情况下,<aside></aside><article></article>box-sizing 值都为 content-boxborder-widthpadding 值会为每个元素的宽度增加 40 像素,这会大大影响 60%/40% 的分割。现在让我们将 box-sizing: border-box 添加到 <article></article><aside></aside> 元素:

article, aside {
  box-sizing: border-box;
}

您可以在图 4.6 中看到变化:元素具有相同的宽度,但 box-sizing: border-box 意味着宽度包括边框和填充。因为 width 属性应用于边框边缘而不是内容区域,所以我们的元素现在并排排列。

Managing the CSS Box Model

图 4.6. 元素使用 box-sizing: border-box

我建议您在项目中使用 box-sizing: border-box。它使生活更轻松,因为无需计算宽度值来考虑填充和边框的值,并且盒子行为更可预测。应用 box-sizing: border-box 的最佳方法是使用重置规则。以下示例来自 Chris Coyier 的 CSS-Tricks 文章“继承 box-sizing 可能略微更好——最佳实践”:

<div class="wrapper">
  <article>
    <h2 id="This-is-a-headline">This is a headline</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing ...</p>
  </article>
  <aside>
    <h2 id="This-is-a-secondary-headline">This is a secondary headline</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing ...</p>
  </aside>
</div>

这默认情况下将 border-box 大小应用于每个元素,而不会影响项目现有部分的 box-sizing 行为。如果您知道不会有依赖于 content-box 行为的第三方或旧版组件,则可以简化这些规则:

article, aside {
  background: #FFEB3B;
  border: 10px solid #9C27B0;
  float: left;
  padding: 10px;
}
article {
  width: 60%;
}
aside {
  width: 40%;
}

管理盒模型只是理解如何创建复杂布局的一个要素。

关于 CSS 盒模型的常见问题解答 (FAQ)

(此处省略 FAQ 部分,因为篇幅过长,且与伪原创目标不符。FAQ 部分内容可以根据需要自行添加或修改。)

以上是管理CSS框模型的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Flexbox vs Grid:我应该学习两者吗?Flexbox vs Grid:我应该学习两者吗?May 10, 2025 am 12:01 AM

是的,youshouldlearnbothflexboxandgrid.1)flexboxisidealforone-demensional,flexiblelayoutslikenavigationmenus.2)gridexcelstcelsintwo-dimensional,confffferDesignssignssuchasmagagazineLayouts.3)blosebothenHancesSunHanceSlineHancesLayOutflexibilitibilitibilitibilitibilityAnderibilitibilityAndresponScormentilial anderingStruction

轨道力学(或我如何优化CSS KeyFrames动画)轨道力学(或我如何优化CSS KeyFrames动画)May 09, 2025 am 09:57 AM

重构自己的代码看起来是什么样的?约翰·瑞亚(John Rhea)挑选了他写的一个旧的CSS动画,并介绍了优化它的思维过程。

CSS动画:很难创建它们吗?CSS动画:很难创建它们吗?May 09, 2025 am 12:03 AM

CSSanimationsarenotinherentlyhardbutrequirepracticeandunderstandingofCSSpropertiesandtimingfunctions.1)Startwithsimpleanimationslikescalingabuttononhoverusingkeyframes.2)Useeasingfunctionslikecubic-bezierfornaturaleffects,suchasabounceanimation.3)For

@KeyFrames CSS:最常用的技巧@KeyFrames CSS:最常用的技巧May 08, 2025 am 12:13 AM

@keyframesispopularduetoitsversatoryand and powerincreatingsmoothcssanimations.keytricksinclude:1)definingsmoothtransitionsbetnestates,2)使用AnimatingmatematingmultationmatingMultationPropertiessimultane,3)使用使用4)使用BombingeNtibalibility,4)使用BombingingWithjavofofofofofoffo

CSS计数器:自动编号的综合指南CSS计数器:自动编号的综合指南May 07, 2025 pm 03:45 PM

CSSCOUNTERSAREDOMANAGEAUTOMANAMBERINGINWEBDESIGNS.1)他们可以使用forterablesofcontents,ListItems,and customnumbering.2)AdvancedsincludenestednumberingSystems.3)挑战挑战InclassINCludeBrowsEccerCerceribaliblesibility andperformiballibility andperformissises.4)创造性

使用卷轴驱动动画的现代滚动阴影使用卷轴驱动动画的现代滚动阴影May 07, 2025 am 10:34 AM

使用滚动阴影,尤其是对于移动设备,是克里斯以前涵盖的一个微妙的UX。杰夫(Geoff)涵盖了一种使用动画限制属性的新方法。这是另一种方式。

重新访问图像图重新访问图像图May 07, 2025 am 09:40 AM

让我们快速进修。图像地图一直返回到HTML 3.2,首先是服务器端地图,然后使用映射和区域元素通过图像上的单击区域定义了可单击区域。

DEV状态:每个开发人员的调查DEV状态:每个开发人员的调查May 07, 2025 am 09:30 AM

开发委员会调查现已开始参与,并且与以前的调查不同,它涵盖了除法:职业,工作场所,以及健康,爱好等。 

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器