css_盒子模型:块级盒子/内联盒子_显示类型/盒模型border可见性
文章目录
reference
Table of contents
- 块级盒子(Block box) 和 内联盒子(Inline box)
- 补充: 内部和外部显示类型
- 不同显示类型的例子
- 什么是CSS 盒模型?
- 玩转盒模型
- 外边距,内边距,边框
- 盒子模型和内联盒子
- 使用display: inline-block
- 总结
- 模块目录
盒模型基础
完整的 CSS 盒模型应用于块级盒子,内联盒子只使用盒模型中定义的部分内容。模型定义了盒的每个部分 —— margin, border, padding, and content —— 合在一起就可以创建我们在页面上看到的内容。为了增加一些额外的复杂性,有一个标准的和替代(IE)的盒模型。
盒模型的各个部分
CSS中组成一个块级盒子需要:
- Content box: 这个区域是用来显示内容,大小可以通过设置
width
和height
. - Padding box: 包围在内容区域外部的空白区域; 大小通过
padding
相关属性设置。 - Border box: 边框盒包裹内容和内边距。大小通过
border
相关属性设置。 - Margin box: 这是最外面的区域,是盒子和其他元素之间的空白区域。大小通过
margin
相关属性设置。
如下图:
标准盒模型
在标准模型中,如果你给盒设置 width
和 height
,实际设置的是 content box。 padding 和 border 再加上设置的宽高一起决定整个盒子的大小。 见下图。
假设定义了 width
, height
, margin
, border
, and padding
:
.box { width: 350px; height: 150px; margin: 25px; padding: 25px; border: 5px solid black; }
Copy to Clipboard
如果使用标准模型宽度 = 410px (350 + 25 + 25 + 5 + 5),高度 = 210px (150 + 25 + 25 + 5 + 5),padding 加 border 再加 content box。
注: margin 不计入实际大小 —— 当然,它会影响盒子在页面所占空间,但是影响的是盒子外部空间。盒子的范围到边框为止 —— 不会延伸到margin。
替代(IE)盒模型
你可能会认为盒子的大小还要加上边框和内边距,这样很麻烦,而且你的想法是对的! 因为这个原因,css还有一个替代盒模型。使用这个模型,所有宽度都是可见宽度,所以内容宽度是该宽度减去边框和填充部分。使用上面相同的样式得到 (width = 350px, height = 150px).
默认浏览器会使用标准模型。如果需要使用替代模型,您可以通过为其设置 box-sizing: border-box
来实现。 这样就可以告诉浏览器使用 border-box
来定义区域,从而设定您想要的大小。
.box { box-sizing: border-box; }
块级盒子(Block box) 和 内联盒子(Inline box)
-
块级盒子(Block box) 和 内联盒子(Inline box)
- 在 CSS 中我们广泛地使用两种“盒子” —— 块级盒子 (block box) 和 内联盒子 (inline box)。
- 这两种盒子会在页面流(page flow)和元素之间的关系方面表现出不同的行为:
block
-
block
盒子会表现出以下行为:
inline
-
inline
盒子,那么他的行为如下:
内部和外部显示类型/display属性
-
css的box模型有一个
外部显示类型
,来决定盒子是块级还是内联
。- 我们通过对盒子
display
属性的设置,比如inline
或者block
(还有inline-block
,inline-flex
),来控制盒子的外部显示类型
。
- 我们通过对盒子
-
同样盒模型还有
内部显示类型
,它决定了盒子内部元素
(容器内部元素)是如何布局的。
- 默认情况下是按照 正常文档流 布局
- 也意味着
它们(盒子内部元素)
和其他块元素以及内联元素一样(如上所述).
- 但是,我们可以通过使用类似
flex
的display
属性值来更改内部显示类型
。 - 如果设置
display: flex
,在一个元素上,外部显示类型是block
,但是内部显示类型修改为flex
。 - 该盒子的所有
直接子元素
都会成为flex元素
,会根据 弹性盒子(Flexbox )规则进行布局
注: 想要了解更多有关显示值以及盒子在块和内联布局中的工作原理,请参阅 Block and Inline Layout.
当你进一步了解css布局的更多细节的时候,你会了解到 flex
, 和其他内部显示类型会用到的值,例如 grid
。
正常文档流
块级和内联
布局是web上默认的行为
—— 正如上面所述, 它有时候被称为 正常文档流,- 因为如果没有其他说明,我们的盒子布局默认是块级或者内联。
外边距折叠
- 理解外边距的一个关键是外边距折叠的概念。
- 如果你有两个外边距相接的元素,这些外边距将合并为一个外边距,即最大的单个外边距的大小。
- 但是如果有一方是负值,那么效果就是两方margin值的直接加和的结果
盒模型border可见性
- border属性使用下面列出的值的
一个,两个或三个值
来指定border
属性。 - 值的顺序无关紧要。
注意:如果边框的样式未定义,它将不可见。 这是因为样式默认为none。
-
border-width
请看
border-width
. -
border-style
请看
border-style
. -
border-color
color 可以确定border的颜色。如果这个值没有设置,它的默认值是元素的color属性值(是文字颜色而非背景色)。 请看border-color.
example: inline-block 模式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="styles/block.css"> <title>Document</title> </head> <body> <p> I am a paragraph and this is a <span class="span_inline">span</span> inside that paragraph. A span is an inline element and so does not respect width and height. </p> <hr> <p> I am a paragraph and this is a <span class="span_inline_block">span</span> inside that paragraph. A span is an inline element and so does not respect width and height. </p> </body> </html>
p{ border: solid 1px; padding: 15px; background-color: pink; } .span_inline { /* 外边距、内边距和边框是生效的 但它们不会改变其他内容与内联盒子的关系 容易引起重叠问题 */ margin: 20px; border: 12px solid blue; padding: 20px; /* content box:宽度和高度被忽略了 */ width: 80px; height: 50px; background-color: lightblue; } .span_inline_block { /* 外边距、内边距和边框是生效的 */ display: inline-block; margin: 20px; border: 12px solid blue; padding: 20px; /* content box:宽度和高度被忽略了 */ width: 80px; height: 50px; background-color: lightblue; } hr { border-top:dotted 14px; margin: 24px; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2023-02-19 LA@向量空间
2023-02-19 LA@二次型规范形