Skip to content

贯穿全书的尺寸体系

如果用一个金字塔来表示,那么在最上层的概念就是Intrinsic SizingExtrinsic Sizing。“Intrinsic Sizing”被称为“内在尺寸”,表示元素最终的尺寸表现是由内容决定的;“Extrinsic Sizing”被称为“外在尺寸”,表示元素最终的尺寸表现是由上下文决定的。

width属性中的关键字

fit-content

元素会尽可能使用可用空间,但不超出max-content

  1. 绝对定位元素在水平、垂直方向上居中的常规写法
123123
  1. 基于width: fit-content的写法
123123

这样写法优点:

  • 节省了transform属性的使用,防止与transition、css animate冲突。
    • 关键帧@keyframe上的css属性的优先级最高

一个例子

设置了fit-content:

123
设置了fit-content
hello world

没有设置fit-content:

123
没有设置fit-content
hello world

stretch、fill-available、available

stretch使用来替换后两者的,都是尽可能的填充满尺寸

  • block水平的元素、弹性布局和网格布局中的子项默认都自带弹性拉伸特性;
  • 其次,对于替换元素、表格元素、内联块级元素等这些具有“包裹性”的元素,建议使用“宽度分离原则”
    • 也就是外面嵌套一层普通的块级元素,块级元素具有弹性拉伸特性,因此可以很好地实现替换元素的宽度自适应布局效果

min-content

即“首选最小宽度”或者“最小内容宽度”。(可以用来垂直展示中文)

  1. 替换元素

min-content为元素的原始尺寸宽度

  1. CJK文字

CJK是Chinese/Japanese/Korean的缩写,指的是中文、日文、韩文这几种文字。

  • 文本中不包含标点,则最小宽度为单个文字的宽度。
单个文字的宽度
  • 如果包含标点,则浏览器的兼容不同,在现代浏览器中最小宽度为标点+单个文字的宽度
单个文字的宽度。
  1. 非CJK文字

最小宽度为由字符单元确定,直到遇到中断字符

hello world!
  1. 一个包裹其他元素的最小宽度

为所有包裹元素的最长宽度

123123
123123123123
一个包裹其他元素的最小宽度,为所有包裹元素的最长宽度
hello world!

max-content

尽量让内容在一行展示,即使会溢出。

尽量让内容在一行展示,即使会溢出;尽量让内容在一行展示,即使会溢出;尽量让内容在一行展示,即使会溢出;

INFO

可以用于处理禁止字体换行的场景。width: max-content相对于text-wrap: nowrap兼容性更好

width: max-content

img.png

text-wrap: nowrap

img.png

总结

  • 带content这个单词的3个:关键字fit-content、min-content和max-content都是“内在尺寸”(intrinsic sizing),尺寸表现和内容相关;
  • stretch关键字(也包括available关键字和fill-available关键字)是“外在尺寸”(extrinsic sizing),尺寸表现和上下文有关。

这4个关键字一起撑起了CSS世界的尺寸体系。