「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战」。
《CSS世界》阅读进度:73/328页,笔记持续更新... 盒尺寸四大家族
- content box
- padding box
- border box
- margin box
(一)深入了解content
(1)替换元素与content
替换元素特性
- 内容可替换
- 内容的外观不受页面上css影响
- 有自己的尺寸
- 在很多 CSS 属性上有自己的一套表现规则
替换元素尺寸计算规则
-
从内到外分为三层
- 固有尺寸:本身具有的尺寸
- HTML尺寸:HTML标签上的属性
- CSS尺寸:通过css设定的尺寸
-
CSS尺寸 > HTML尺寸 > 固有尺寸
-
仅设置了宽度或仅设置了高度,比例不变
-
默认固有尺寸:宽度 300 像素,高度 150 像素,宽高比 2:1
-
内联替换元素和块级替换元素使用同一套尺寸计算规则。
-
特例:
标签
为了提高加载性能以及节约带宽费用,首屏以下的图片就会通过滚屏加载的方式异步加载,
直接没有 src 属性,图片不会有任何请求,是最高效的实现方式。
对于 Firefox 浏览器,src 缺省的
不是替换元素,而是一个普通的内联元素,所以使用的就不是替换元素的尺寸规则,而是类似的内联元素尺寸规则,宽高会无效。
修复:img { display: inline-block; }
-
固定和尺寸无法改变
-
利用CSS3中
object-fit属性修改替换元素的替换内容的适配方式- fill(默认)
- contain
- none
- ...
我们可以对<img>元素使用::before 和::after 伪元素进行内容生成以及样式构建,但是这种方法支持是有限制的。
-
Chrome 和 Firefox 等浏览器支持,但 IE浏览器不支持
- 不能有 src 属性(证明观点的关键所在);
- 不能使用 content 属性生成图片(针对 Chrome);
- 需要有 alt 属性并有值(针对 Chrome);
-
灵活使用CSS content属性
- css设置图片src
- hover换图
- h1标签换图片
注意:
- content是无法选中、无法复制、无法被屏幕阅读设备读取,也无法被搜索引擎抓取。
- 不能改变:empty 伪类
- content 动态生成值无法获取。
(2)content内容生成技术
-
content 辅助元素生成
-
清除浮动影响
.clear:after { content: ''; display: table; /* 也可以是'block' */ clear: both; } -
实现“两端对齐”以及“垂直居中/上边缘/下边缘对齐”效果
-
-
content 字符内容生成
-
配合@font-face 规则或Unicode实现图标字体效果。
@font-face { font-family: "myico"; src: url("/fonts/4/myico.eot"); src: url("/fonts/4/myico.eot#iefix") format("embedded-opentype"), url("/fonts/4/myico.ttf") format("truetype"), url("/fonts/4/myico.woff") format("woff"); } .icon-home:before { font-size: 64px; font-family: myico; content: "家"; } <span class="icon-home"></span> -
实现打点loading动画效果
-
-
了解 content 开启闭合符号生成
- open-quote 和 close-quote
- no-open-quote 和 no-close-quote
-
content attr 属性值内容生成
- 除了原生的 HTML 属性,自定义的 HTML 属性也是可以生成的
- 例子:利用 alt 属性显示图片描述信息
-
深入理解 content 计数器
- counter-reset
.xxx { counter-reset: 计数器名称 默认起始值; } /* 多个计数器同时命名 */ .xxx { counter-reset: 计数器名称1 2 计数器名称2 3 ...; }- counter-increment
.counter { counter-increment: 计数器名称 递增值(默认为1); } .counter { counter-increment: 计数器名称1 递增值 计数器名称2 递增值; }-
counter()
显示计数器的数值
counter(name) counter(name,style) /* 支持级联 */ .xxx{ content: counter() '\A' counter()}-
counters()
显示多级序列
counters(name,string)你不小心把计数显示和计数重置元素以兄弟元素形式放在一起(虽然 HTML 内容布局呈现是没有异常的),就很可能会出现计数序号乱入的情况。
- 最后:显示 content 计数值的那个 DOM 元素在文档流中的位置一定要在 counter-increment元素的后面,否则是没有计数效果的。
-
content 内容生成的混合特性
各种 content 内容生成语法是可以混合在一起使用的