块和内联布局
- 水平书写模式时块垂直放置,但在垂直书写模式下块将水平放置:
display属性值
block
- 从下方例子中可以看到,display属性block使span元素像一个块元素,独占一行被包含在p元素内。
flex
- display属性定义框及其内部任何框的行为。
- flex的行为就像一个块元素(自己占一行),它显示在新行上并占据其在行内方向上可以使用的所有空间。
- 如果应用在
<ul>
上则会让<li>
都显示在一行上,并占据其在行内方向上可以使用的所有空间。
block与flex的例子
1 | p, |
1 | <p>I am a paragraph. A short one.</p> |
inline
display属性inline可以让块元素像行内(内联)元素
inline-flex
inline-flex与flex比起来更像一个行内元素,它后面如果有一个段落的话,inline-flex容器和段落都在一行上一起运行,而不是像flex显示为块级元素那样将它们换成新行。
inline-block
直接从属性名也可以看出他可以让内联的盒子像一个块元素。
这个属性可以让内联盒子不与包含他的盒子内容重叠,也就是说他会让内联盒子的width与height属性生效。
1 | span { |
1 | <p> |
display各属性值直观对比图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
p,
ul {
border: 2px solid rebeccapurple;
}
span,
li {
border: 2px solid blue;
}
ul {
display: inline-flex;
list-style: none;
padding: 0;
}
.inline {
display: inline;
}
1
2
3
4
5
6
7
8
9
10
11
12
<p>
I am a paragraph. Some of the
<span>words</span> have been wrapped in a
<span>span element</span>.
</p>
<ul>
<li>Item One</li>
<li>Item Two</li>
<li>Item Three</li>
</ul>
<p class="inline">I am a paragraph. A short one.</p>
<p class="inline">I am another paragraph. Also a short one.</p>
1 | p, |
1 | <p> |
盒模型
盒子的组成
- 内容框:显示内容的区域,可以使用width和属性来调整大小height。
- 填充框:填充物围绕内容位于空白处;可以使用padding和相关属性控制其大小。
- 边框:边框用于包装内容和任何填充。可以使用border及其相关属性来控制其大小和样式。
- 边距框:边距是最外层,将内容,填充和边框包装为此框与其他元素之间的空白。可以使用margin及其相关属性来控制其大小。
- 注意:边距(margin)影响框外的空间以及框在页面上所占的总空间,但它不计入框的实际大小。框的区域在边界处(border)停止,不会延伸到边缘。
标准盒模型
- 在标准盒模型中,盒子占用的总大小由框的宽度(width)和高度(height)以及任何填充(padding)和边框(border)相加得到。
- 例子中盒子占用的空间宽度实际上将为410px(350 + 25 + 25 + 5 + 5),高度为210px(150 + 25 + 25 + 5 + 5),因为填充和边框为添加到用于内容框的宽度。
替代盒模型
注意:
标准盒模型 的宽度只是内容的宽度,不包括padding与border,所以我们一旦设置padding与border就应该设置替代盒模型,以确保我们设置的width就是我们看到的宽度
- 使用此模型,任何宽度都是页面上可见框的宽度(不用加上padding与border),因此内容区域的宽度是该宽度减去填充和边框的宽度。
- 默认情况下,浏览器使用标准盒模型。如果要为元素打开替代盒模型,可以通过对其进行设置
box-sizing: border-box;
来实现。box-sizing
是个很新的属性,目前应该像下面例子中那样使用-webkit-
和-moz-
前缀。这可以启用特定浏览器实验中的特性。同时记住它是支持IE8+的:1
2
3
4
5.box {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
} - 如果希望所有元素都使用替代盒模型,请在元素上设置box-sizing属性,然后将所有其他元素设置为继承该值,如:或者:
1
2
3
4
5
6
7
8html {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
*, *::before, *::after {
box-sizing: inherit;
}1
2
3
4
5* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
(块之间的)外边距margin折叠
- 补充:margin可以是负值。
- 首先,两个兄弟块之间的垂直距离由margin属性 (外边距)确定。
- 通过两个例子我们可以发现折叠的是两个块之间较小的边距。
- 也就是说如果有两个具有边距的元素撞在一起,作用于同一个位置的边距将合并为一个边距,即最大单个边距的大小。两个边距撞在一起会合并(折叠),而不是等于两个边距的总和。
属性值数量 | 含义 |
---|---|
4 | 上 右 下 左 |
3 | 上 左右 下 |
2 | 上下 左右 |
1 | 4个方向 |
- 例子1:
1
2
3
4p {
border: 2px solid green;
margin: 20px 0 40px 0;
}1
2
3
4<div class="box">
<p>文段1</p>
<p>文段2</p>
</div> - 例子2:
1
2
3
4<div class="box">
<p>文段1</p>
<p>文段2</p>
</div>1
2
3
4<div class="box">
<p>文段1</p>
<p>文段2</p>
</div>
边框border
- 简写包括border-width、border-style、border-color
- 也可以只设置单边的这三个属性
- 例子:
1 | .container { |
1 | <div class="container"> |
内边距(填充)padding
属性值数量 | 含义 |
---|---|
4 | 上 右 下 左 |
3 | 上 左右 下 |
2 | 上下 左右 |
1 | 4个方向 |
1 | .box { |
1 | <div class="container"> |