3.1 块级元素
块级元素 (block-level element)常见的有div li table 等标签。
块级元素可配合做清除浮动:
.clearfix {
display: block; //也可以是table
content: "";
clear: both;
}
问题: 为什么list-item元素会出现项目符号
解释: 因为生成了一个附加的盒子,学名叫“标记盒子(marker box)”,专门用来放置原点、数字这些项目符号。
问题:
display: inline-block
为何能够既能和图文在一行显示,又能设置width/height?解释:因为有两个盒子,外在盒子和内在盒子(内在盒子又叫容器盒子)。 外在盒子负责元素是可以一行显示,还是要换行显示。而容器盒子负责宽高,内容呈现之类的事情。
display: inline-block
外面一层是内联盒子,里面一层是块级盒子,所以它既能行内,又能设宽高。
3.2 width/height 作用细节
width和height作用在内在盒子(学名“容器盒子”)上,内在盒子又分成4个盒子,分别是content-box, padding-box, border-box, margin-box。
<div>
默认的是content-boxwidth:auto
的4种宽度表现(width:auto
是宽度的默认设置)- 充分利用可用空间( fill-avalible ):
<div> <li> <p>
等标签宽度默认为父容器的100% - 收缩与包裹(shrink-to-fit): 浮动、绝对定位、inline-block元素、table元素
- 收缩到最小 (min-content)
- 超出容器限制 (max-content): 如果不是有明确的width相关设置,上面3中情况尺寸都不会主动超出父容器的宽度,但是有特殊情况: 1. 内容很长的连续英文和数字; 2. 内联元素被设置
white-space: nowrap
。
- 充分利用可用空间( fill-avalible ):
关键概念:
- 外部尺寸(Extrinsic sizing): 元素的尺寸由外部容器决定;
- 内部尺寸(intrinsic sizing):元素的尺寸由内部元素决定;
上面说的4种width: auto
的尺寸表现中,只有第一种是外部尺寸,其余都是内部尺寸,而这唯一的外部尺寸,就是“流”的精髓
3.2.3 css流体布局下的 宽度分离原则
嵌套一层标签,父元素定宽,子元素因为width使用默认值auto,所以会自动填满容器。这样做实现了width、padding、border混用的时候,我们不需要任何计算,content-box会自动填满父元素宽度减去padding和border后的宽度。
.father {
width: 102px;
}
.son {
border: 1px solid red;
padding: 20px;
}
3.2.4 box-sizing 改变width、height作用细节
box-sizing: border-box
实现了padding、border和content-box共同分配width值。
猜想这个属性的设计初衷是用来解决 “替换元素” 宽度自适应问题。
在做reset.css
文件进行样式重置的时候,可以这样:
input, textarea, img, video, object {
box-sizing: border-box;
}
3.2.6 让元素支持 height: 100% 效果
两种方法:
设定显式高度值,注意这里一定要有html元素,仅仅设置
<body>
是没有用的,因为此时<body>
也没有具体高度值。html, body {height: 100%};
使用绝对定位。注意: 绝对定位元素的宽高百分比计算是相对于 padding box 的,也就是会把padding的大小值计算在内,但是,非绝对定位元素的宽高百分比计算是相对于 content box 的。
3.3 min/max-width/height 相关特性
max-width
会覆盖width
。style的行内样式 和 !important 都要靠边站。图片的最终宽度为: 256px
<img src="1.jpg" style="width: 480px!important;">
img {
max-width: 256px;
}
- min-width 会覆盖 max-width。当min-width 属性值大于max-width时,最终效果表现为最小值200px。
.container {
min-width: 200px;
max-width: 180px;
}
3.4 内联元素
内联盒模型
内容区域(content area): 指一种围绕文字看不见的盒子,其大小仅受字符本身特性控制。图中选中的背景色区域就是内容区域。
内联盒子(inline box): 实际指的就是元素的“外在盒子”,用来决定元素是内联还是块级。内联盒子”不会让内容成块显示,而是排成一行。又分成内联盒子和匿名内联盒子。
下图中,绿色框部分为匿名内联盒子,红色框部分为内联盒子。
- 行框盒子(line box):每一行就是一个行框盒子,每个行框盒子又是由一个个内联盒子组成的。
红框部分就是行框盒子
- 包含盒子(containing box):图中p标签就是一个包含盒子,此盒子由一行行的行框盒子组成。
幽灵空白盒子
指的是在HTML5文档声明中,内联元素的所有解析和渲染表现就如同每个行框盒子的前面有一个“空白节点”一样。这个“空白节点”永远透明,不占据任何宽度,看不见也无法通过脚本获取。表现如同文本节点一样。
CSS规范中称作“strut”,中文翻译“支柱”,它是一个假想盒。