尺寸和单位

你用像素设置字体大小,发布页面,然后一个为了舒适而增加浏览器文本大小的用户看到完全没有变化。你给一张卡片设置固定宽度,它在手机上溢出。两者都归结为同一个问题:当你在 CSS 中输入一个数字时,该数字相对于什么来测量?有些单位是固定的,有些缩放到字体,有些缩放到父元素,有些缩放到屏幕。一旦你知道哪个是哪个,你就会停止猜测,开始选择能完成工作的单位。
绝对单位 vs 相对单位
CSS 单位分为两个家族。一个**绝对单位**是永远不变的固定大小:px(像素)是你随处可见的单位。相对单位是缩放到其他东西的大小,比如读者的字体大小或屏幕宽度。
想象测量一个房间。厘米是绝对的:一面墙是 400 厘米,无论你是高还是矮。"我走三步"是相对的:这取决于谁在走。绝对单位给你精确的控制;相对单位让页面适应看它的人。
这种适应很重要。一些读者设置了更大的默认文本大小,因为这对他们的眼睛更容易。如果你用相对单位调整文本大小,他们的设置会传递下来,页面会增长以适应他们。如果你用像素锁定它,它会保持不变并忽略他们。
px 这样的绝对单位是永远不变的固定大小。相对单位缩放到其他东西,比如读者的字体大小或屏幕宽度。相对单位让页面适应看它的人,这就是为什么它们对设置更大文本大小的读者很重要。 像素以及何时它们很好用
一个**像素**(px)是一个小的固定长度单位。它是最直接推理的,因为 16px 总是 16px。这使它很适合应该保持相同大小的小东西,无论什么:边框的厚度、一个小的圆角、一个固定的图标。
.card {
border: 1px solid #ccc; /* 一条细线边框,始终是 1px */
border-radius: 8px; /* 一个固定的圆角 */
}这里的问题是像素不考虑读者。如果有人将他们的浏览器设置为显示更大的文本,一个你锁定为 24px 的标题会保持 24px 并忽略他们的选择。这就是为什么 px 对边框和小细节是个不错的选择,但不是你想要用于文本的单位。
px)是固定大小,所以 16px 总是 16px。这使它很适合应该保持不变的小东西,如 1px 边框或一个小圆角。权衡是 px 忽略设置了更大文本的读者,所以它不是你想要用于页面上单词的单位。 em 和 rem
两个相对单位缩放到字体大小:em 和 rem。要选择的是**rem**。它相对于页面的根字体大小进行测量,这是设置在整个文档上的基本文本大小(默认为 16px)。所以 1rem 是 16px、1.5rem 是 24px 和 2rem 是 32px。
h1 {
font-size: 2rem; /* 2 x 16px = 32px */
}
p {
font-size: 1rem; /* 16px,基本大小 */
margin-bottom: 1.5rem; /* 下方 24px 的空间 */
}因为 rem 与那一个根大小相关联,它是可预测的:1.5rem 在页面的任何地方都意味着同样的事情。当读者提高他们的默认文本大小时,所有用 rem 调整大小的东西一起增长。另一个单位 em 改为缩放到元素自己的字体大小,这可能会变得混乱,所以从 rem 开始,你很少会陷入困境。
rem 和 em 都缩放到字体大小,要开始的是 rem。它相对于页面的根大小进行测量,默认为 16px,所以 1.5rem 是 24px 并在任何地方意味着相同的事情。em 改为缩放到元素自己的字体大小,这可能会变得混乱,所以首先选择 rem。 百分比
一个**百分比**(%)相对于其父元素调整元素大小。对于宽度,width: 50% 意味着元素所在盒子宽度的一半,无论那个宽度恰好是多少。
.sidebar {
width: 25%; /* 父级宽度的四分之一 */
}
.content {
width: 75%; /* 剩余四分之三 */
}这就是使布局流体的原因:因为宽度是父级的分数,他们随着父级缩小和增长。调整窗口大小,一个 50% 的列会保持宽度的一半,而不是像固定 500px 列那样溢出边缘。那种灵活性就是百分比在响应式设计中经常出现的原因。
width: 50% 是元素所在盒子宽度的一半。这使列流体:调整窗口大小,它们增长和缩小而不是溢出。它是支撑适应任何屏幕的布局的主要工具之一。 视口单位
视口单位相对于浏览器窗口本身调整大小。vw 是视口宽度的百分比,vh 是视口高度的百分比,其中视口是页面的可见区域。所以 100vw 是窗口的全部宽度,100vh 是其全部高度。
.hero {
height: 100vh; /* 填满整个屏幕高度 */
}这是全屏部分的首选,比如应该填满窗口(无论大小如何)的登陆横幅。因为单位跟踪窗口,当有人调整或旋转他们的设备时部分保持全屏,不需要你设置一个只在一个屏幕上正确的固定像素高度。
vw 和 vh 相对于浏览器窗口调整大小:100vw 是其全部宽度,100vh 是其全部高度。它们是全屏部分(比如登陆横幅)的首选,因为当窗口调整大小时它保持全屏,而不是被锁定到一个像素高度。 
