尺寸单位

CSS 播客 - 008:尺寸单位

Web 是一种响应式媒介,但有时您希望控制其尺寸以提高整体界面质量。这方面的一个很好的例子是限制行长以提高可读性。在像 Web 这样灵活的媒介中,您将如何做到这一点?

对于这种情况,您可以使用 ch 单位,它等于渲染字体中“0”字符在其计算大小下的宽度。此单位允许您使用专为调整文本大小而设计的单位来限制文本的宽度,从而无论文本大小如何,都可以实现可预测的控制。ch 单位是少数几种在特定上下文(如本例)中非常有用的单位之一。

数字

数字用于定义 opacityline-height,甚至用于 rgb 中的颜色通道值。数字是无单位的整数(1、2、3、100)和小数(.1、.2、.3)。

数字的含义取决于其上下文。例如,在定义 line-height 时,如果您在不使用辅助单位的情况下定义它,则数字表示比率

p {
  font-size: 24px;
  line-height: 1.5;
}

在本例中,1.5 等于 p 元素的计算像素字体大小150%。这意味着如果 pfont-size24px,则行高将计算为 36px

数字也可以用于以下位置

  • 设置滤镜值时:filter: sepia(0.5)50% 的棕褐色滤镜应用于元素。
  • 设置不透明度时:opacity: 0.5 应用 50% 的不透明度。
  • 在颜色通道中:rgb(50, 50, 50),其中 0-255 的值可用于设置颜色值。请参阅颜色课程
  • 转换元素时:transform: scale(1.2) 将元素缩放为其初始大小的 120%。

百分比

在 CSS 中使用百分比时,您需要知道百分比是如何计算的。例如,width 计算为父元素中可用宽度的百分比。

div {
  width: 300px;
  height: 100px;
}

div p {
  width: 50%; 
}

在上面的示例中,div p 的宽度为 150px,假设布局使用默认的 box-sizing: content-box

如果您将 marginpadding 设置为百分比,则它们将是父元素宽度的一部分,而与方向无关。

div {
  width: 300px;
  height: 100px;
}

div p {
  margin-top: 50%; /* calculated: 150px */
  padding-left: 50%; /* calculated: 150px */
}

在上面的代码片段中,margin-toppadding-left 都将计算为 150px

div {
  width: 300px;
  height: 100px;
}

div p {
  width: 50%; /* calculated: 150px */
  transform: translateX(10%); /* calculated: 15px */
}

如果您将 transform 值设置为百分比,则它基于设置了 transform 的元素。在此示例中,ptranslateX 值为 10%width50%。首先,计算宽度将是多少:150px,因为它是其父元素宽度的 50%。然后,取 150px10%,即 15px

尺寸和长度

如果您将单位附加到数字,它将变成尺寸。例如,1rem 是一个尺寸。在这种情况下,附加到数字的单位在规范中称为尺寸标记。长度是指距离的尺寸,它们可以是绝对长度或相对长度。

绝对长度

所有绝对长度都相对于相同的基准解析,这使得它们在 CSS 中的任何位置使用都具有可预测性。例如,如果您使用 cm 来调整元素的大小,然后在打印时,如果将其与标尺进行比较,它应该是准确的。

div {
  width: 10cm;
  height: 5cm;
  background: black;
}

如果您打印此页面,div 将打印为 10x5 厘米的黑色矩形。请记住,CSS 不仅用于数字内容,还用于设置打印内容的样式。在为打印设计时,绝对长度确实可以派上用场。

单位 名称 等效于
cm 厘米 1cm = 96px/2.54
mm 毫米 1mm = 1 厘米的 1/10
Q 四分之一毫米 1Q = 1 厘米的 1/40
in 英寸 1in = 2.54cm = 96px
pc 派卡 1pc = 1 英寸的 1/6
pt 1pt = 1 英寸的 1/72
px 像素 1px = 1 英寸的 1/96

相对长度

相对长度是根据基本值计算的,很像百分比。这些长度与百分比之间的区别在于您可以根据上下文调整元素的大小。这意味着 CSS 具有诸如 ch 之类的单位,这些单位使用文本大小作为基础,以及 vw,它基于视口(浏览器窗口)的宽度。由于 Web 的响应式特性,相对长度在 Web 上特别有用。

字体大小相对单位

CSS 提供了有用的单位,这些单位相对于渲染排版的元素大小,例如文本本身的大小(em 单位)或字体字符的宽度(ch 单位)。

单位 相对于
em 相对于字体大小,即 1.5em 将比其父元素的基准计算字体大小大 50%。 (历史上,大写字母“M”的高度)。
ex 用于确定是否使用 x-height(字母“x”)或元素当前计算字体大小中的 `.5em` 的启发式方法。
cap 元素当前计算字体大小中大写字母的高度。
ch 元素字体中窄字形的平均字符前进宽度(以“0”字形表示)。
ic 元素字体中全角字形的平均字符前进宽度,以“水”(CJK 水部,U+6C34)字形表示。
rem 根元素的字体大小(默认为 16px)。
lh 元素的行高。
rlh 根元素的行高。
The text, CSS is 10x great with labels for ascender height, descender height and x-height. The x-height represents 1ex and the 0 represents 1ch

视口相对单位

您可以使用视口(浏览器窗口)的尺寸作为相对基准。这些单位将可用的视口空间划分为若干份。

单位 相对于
vw 视口宽度的 1%。人们使用此单位来制作炫酷的字体技巧,例如根据页面宽度调整标题字体的大小,以便用户调整大小时,字体也会调整大小。
vh 视口高度的 1%。例如,如果您有页脚工具栏,则可以使用它在 UI 中排列项目。
vi 根元素的内联轴中视口大小的 1%。轴是指书写模式。在水平书写模式(如英语)中,内联轴是水平的。在垂直书写模式(如某些日语字体)中,内联轴从上到下运行。
vb 根元素的块轴中视口大小的 1%。对于块轴,这将是语言的方向性。从左到右 (LTR) 的语言(如英语)将具有垂直块轴,因为英语读者从上到下解析页面。垂直书写模式具有水平块轴。
vmin 视口较小尺寸的 1%。
vmax 视口较大尺寸的 1%。
div {
  width: 10vw;
}

p {
  max-width: 60ch;
}

在此示例中,div 将是视口宽度的 10%,因为 1vw视口宽度的 1%p 元素的 max-width60ch,这意味着它不能超过计算字体和大小中 60 个“0”字符的宽度。

其他单位

还有一些其他单位已被指定用于处理特定类型的值。

角度单位

颜色模块中,我们研究了角度单位,这对于定义度数值非常有用,例如 hsl 中的色相。它们对于在转换函数中旋转元素也很有用。

div {
  width: 150px;
  height: 150px;
  transform: rotate(60deg);
}

使用 deg 角度单位,您可以将 div 在其中心轴上旋转 90°。

div {
  background-image: url('a-low-resolution-image.jpg');
}

@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
  div {
    background-image: url('a-high-resolution-image.jpg');
  }
}

分辨率单位

在前面的示例中,min-resolution 的值为 192dpidpi 单位代表每英寸点数。这方面的一个有用上下文是检测非常高分辨率的屏幕,例如媒体查询中的 Retina 显示屏,并提供更高分辨率的图像。

检查您的理解情况

测试您对尺寸调整的知识

以下哪些是有效的尺寸?

cm
厘米,有效的绝对尺寸。
ui
用户界面不是 CSS 中的尺寸。
in
英寸,有效的绝对尺寸。
8th
不是 CSS 尺寸
px
像素,有效的绝对尺寸。
ch
字符单位,有效的相对尺寸。
ux
用户体验不是 CSS 中的尺寸。
em
字母“M”单位,有效的相对尺寸。
ex
字母“x”单位,有效的相对尺寸。

绝对单位和相对单位有何不同?

绝对值无法更改,但相对单位可以
绝对值可以更改,但它们计算所依据的基准值无法更改。
绝对长度是根据单个共享基准值计算的,而相对单位是与可以更改的基准值进行比较的。
相对单位由于其上下文感知能力而更具适应性和流动性,但绝对单位具有力量和可预测性,这对于某些设计来说可能是基础。

视口单位是绝对的。

正确
它们可能感觉是绝对的,但它们相对于视口,视口可以是 iframe 或 webview,并且并不总是代表设备屏幕尺寸。
错误
它们相对于在其中创建它们的文档窗口,该窗口可能与设备屏幕相同,也可能不同。

资源