第3章 流、元素、基本尺寸

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-box

  • width: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
  • 关键概念:

    • 外部尺寸(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”,中文翻译“支柱”,它是一个假想盒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值