css单位

199 阅读12分钟

css单位的介绍

css单位就是我们在写css样式中会用到的单位。一般主要分为相对单位和绝对单位。 那么问题来了,为什么要有这么多不同的css单位呢? -- 因为前端浏览器的窗口是可以调节的,而且不同设备的分辨率也是不同的,因此需要不同的css单位来实现不同浏览器,不同端都能样式正常且美观。

分辨率

什么是分辨率

分辨率通俗的讲就是屏幕图像的精密度,也指屏幕所能显示的像素的多少。分辨率越高,越清晰。 分辨率可以用以下两个指标进行量化。

  1. 像素间距:指两个像素点之间的距离。像素间距越小,图像越清晰。
  2. 像素密度:也就是我们常说的ppi,指的是每英寸的像素数(一般是以对角线进行划分)。ppi越高,图像也越精细

屏幕尺寸:指的就是屏幕对角线的长度,单位英寸 屏幕分辨率:宽度和高度上最多能显示的物理像素点个数 设备像素(也叫物理像素):指设备能控制显示的最小物理单位,指显示器上一个个的点,单位是pt。这个值是不变的。 DIP: 设备独立像素也叫逻辑像素。他在应用程序中使用,然后底层图形系统将它转换为适用于特定设备的物理像素。 DPI:每英寸像素点,印刷行业术语,相当于屏幕的PPI。

常见设备的分辨率有哪些?

电脑屏幕
  • 16:9的宽屏液晶屏:1920×1080
  • 16:10的24寸宽屏液晶屏:1920×1200
  • 16:10的22/20寸宽屏液晶屏:1680×1050
  • 16:10比例的19(18.5)与17英寸宽屏液晶显示器的最佳分辨率是:1440×900。
  • 16:10比例的14、13、12(12.1)英寸宽屏液晶显示器(多为笔记本电脑屏幕)的最佳分辨率是:1280×800。
  • 16:9宽高比常见的分辨率有四种:1280×720(17吋)、1366×768&1360×768(18.5吋)、1600×900
  • (20吋)、1920×1080(21.5、23、23.6、24、24.6、25、27)。
  • 1280×800是笔记本常用的分辨率
  • 16:10常见的分辨率有1280×800(13.3、14.1、15.4吋笔记本)、1440×900(17.1吋、19吋)、
  • 1680×1050(20吋、21.6吋、22吋)、1920×1200(22、24、25.5、27、27.5)
  • 5:4常见的分辨率有1280×1024(17吋、19吋)
  • 三星214T 21吋4:3普屏液晶,分辨率1600×1200
  • 4:3常见的分辨率有800×600、1024×768(17吋CRT、15吋LCD)、1280×960、1400×1050(20吋)、1600×1200(20、21、22吋LCD)、1920×1440、2048×1536(高端CRT显示器)
移动设备
  1. 平板
  • iPad 4、iPad5屏幕 2048x1536
  • Ipad mini、iPad 2屏幕尺寸是7.9英才,分辨率是1024*768
  • 三星Galaxy note 10.1、Tab3.8、Tab2 P5100屏幕尺寸是10.1英寸,屏幕分辨率是1280*800
  • 三星Galaxy Tab P3110、Tab3.7屏幕尺寸是7英寸,屏幕分辨率是1024*600
  • 谷歌Nexus 7屏幕尺寸是7英寸,屏幕分辨率是1280*800
  1. 手机
  • iPhone4、4s屏幕尺寸是3.5英寸,屏幕分辨率是960*640
  • iPhone5、5s屏幕尺寸是4英寸,分辨率是1136*640
  • 三星Galaxy s4屏幕尺寸是5英寸,分辨率是1920*1080
  • 三星Galaxy Note2、S3屏幕尺寸是5.5英寸和4.8英寸,分辨率都是1280*720
  • 三星Galaxy Note 屏幕尺寸是5.3英寸,分辨率是1280*800

分辨率对我们写样式有什么影响

不同的分辨率对页面的显示会不一样,因此我们在开发的过程中,需要根据不同的分辨率将页面的元素转换成合适的像素。 前端页面适配不同分辨率的方式如下:

let deviceWidth = document.documentElement.clientWidth; // 获取当前分辨率下的可视区域的宽度
let scale = deviceWidth / 1920;   // 1920是我们设计稿的尺寸
document.body.style.zoom = scale;  // 放大缩小相应的倍数

相对单位

什么是相对单位

相对单位就是相对于另一个长度的长度。主要分为两类

  1. 字体相对单位:都是根据font-size来计算的。有rem,em, ex, ch
  2. 窗口相对单位:根据视窗大小来决定的。常见的有vw,vh, vmax, vmin

相对单位详细介绍

  1. rem rem是相对于根元素html的font-size来计算的。如果html的font-size是16px, 那么1rem就是16px,2rem就是32px, 依次类推。如果html没有设置font-size, 那么不论设置多少rem就等同于没有设置。

  2. em em和rem类似,只是它不是相对于html,而是如果自身设置了font-size那么就是相对自身,如果自身没有设置font-size就会去找它的元素,如果父元素上也没有设置,就会一直往上找,直到找到为止。如果父元素的font-size是16px, 那么1em就是16px,2em就是32px, 依次类推。如果它的上级一直都找不到font-size, 那么不论设置多少em就等同于没有设置。

  3. ex ex是排版用的单位,我们在写css样式中用的并不多,它的大小取决于元素的font-size和font-family属性。 ex指的是所用字体中小写字母x的高度。如果两个字体不同,那么ex的值也是不同的。

  4. ch ch也是排版用的单位,我们在写css样式中用的并不多,它的大小取决于元素的font-size和font-family属性。 ch和ex类似,不过它是基于数字0的宽度来计算的。会随着字体的变化而变化。而0 的宽度通常是对字体的平均字符宽度,它是一个估计值。由于 ch 是一个近似等宽的单元,所以在设置容器的宽度时很有用,比如一个容器想要显示指定个数的字符串时,就可以使用这个单位。

  5. vw vw是视窗单位,是相对于可视区来计算的,在移动端中也就是相对于布局视窗,表示的是视窗宽度的百分比。视窗大小变化,那么这个值计算出来的大小也会改变。

  6. vh vh也是视窗单位,是相对于可视区来计算的,在移动端中也就是相对于布局视窗,表示的是视窗高度的百分比。视窗大小变化,那么这个值计算出来的大小也会改变。

  7. vmax vmax也是视窗单位,是相对于可视区来计算的,在移动端中也就是相对于布局视窗,与视窗宽度和高度的最大值和最小值都有关。假如一个视窗的宽度是500px,高度是1200px, 那么1vmax就是12px;

  8. vmin vmin也是视窗单位,是相对于可视区来计算的,在移动端中也就是相对于布局视窗,与视窗宽度和高度的最大值和最小值都有关。假如一个视窗的宽度是500px,高度是1200px, 那么1vmin就是5px;

绝对单位

什么是绝对单位

绝对单位是一个固定的值,它反映了一个真实的物理尺寸。它不会受屏幕大小或者字体的影响。它的大小取决于值以及屏幕的分辨率(DPI,每英寸的像素点数)。

绝对单位有哪些

绝对单位下面会详细介绍,它们的换算方式如下: 1in = 25.4mm = 2.54cm = 6pc = 72pt = 96px;

  1. px px表示像素,也被称为是css像素,并不严格等于显示器的像素。它是一个绝对单位,也可以看成是一个相对单位,是相对于设备像素而言的。

  2. pt pt全称为point, 表示点。一般是印刷的时候会用到,无论分辨率为多少,pt的大小都不会发生改变。

  3. pc 全称Picas, 表示派卡,是印刷单位。

  4. cm 这个大家应该都清楚吧。厘米: 1cm = 37.9px;

  5. mm 这个大家应该也清楚吧,毫米: 1mm = 3.78px;

  6. in 全称Inches,表示英寸。1in = 96px;

频率单位

什么是频率单位

只有在听说级联样式表中才会用到这类频率单位,可以用来改变一个语音阅读文本的音调。低频率表示低音,高频率表示高音。

频率单位有哪些

  1. 赫兹(HZ)
  2. 千赫兹(kHZ) 其中:1kHZ = 1000HZ

角度单位

角度单位一般用于元素的旋转,正值表示顺时针旋转,负值表示逆时针旋转。在渐变中也会用到角度单位。

角度单位有哪些

下面角度单位之间的转换如下: 90deg = 100grad = 0.25turn ≈ 1.570796326794897rad

  1. deg 也就是我们常说的角度。全称是degrass。一个圈表示360度

  2. grad 全称Gradians, 表示梯度,一个圆总共400梯度

  3. rad 全称Radians, 表示弧度,一个圆总共2π弧度

  4. turn 全称为Turns, 表示圈(转),一个圈总共一圈(转)

时间单位

时间单位我们见的比较多,主要有秒(s)和毫秒(ms),转换是1s = 1000ms;

分辨率单位

分辨率单位是css3中新增的单位。只允许正值,不允许为负值。主要有以下三个单位:

  1. dpi
  2. dpcm
  3. dppx 主要换算方式:
1dppx = 96dpi
1dpi ≈ 0.39dpcm
1dpcm ≈ 2.54dpi

百分比单位

百分比单位是我们在开发中常用到的单位之一,对于百分比来说,最重要的就是这个值是相对于谁来计算的百分比。下面我们根据几种场景具体分析

  1. 盒模型中的百分比
  • width, min-width, max-width: 对于这类和宽度相关的属性,它的百分比是相对于包含块的宽度来计算的,如果包含块没有设置宽度,基本就相当于auto
  • height, min-height, max-height: 对于这类和高度相关的属性,它的百分比是相对于包含块的高度来计算的,如果包含块没有设置高度,基本就相当于auto
  • padding, margin: 这类值设置百分比的话,如果设置的水平方向上的,那就是相对于包含块的width来计算的,如果设置的方向是垂直方向上的,那就是相对于包含块的height来计算的
  1. 文本中的百分比
  • font-size: 根据父元素的font-size来进行计算的
  • line-height: 根据自身的font-size来进行计算的
  • vertical-align: 根据line-height来进行计算的
  • text-indent: 如果是水平的,则根据width来进行计算,如果是垂直方向的,则根据height来进行计算的
  1. 定位中的百分比
  • 元素是static或者relative,包含块一般是它的父容器,那么left, right水平方向上的就是根据包含块的width来进行计算的,top, bottom垂直方向上的就是根据包含块的height来进行计算的
  • 元素是绝对定位,包含块应该是离他最近的position为relative,absolute,fixed的祖先元素。那么left, right水平方向上的就是根据包含块的width来进行计算的,top, bottom垂直方向上的就是根据包含块的height来进行计算的
  • 元素是固定定位的,包含块就是视窗。那么left, right水平方向上的就是根据包含块的width来进行计算的,top, bottom垂直方向上的就是根据包含块的height来进行计算的
  1. 变换中的百分比
  • translateX(): 根据容器的width来计算的
  • translateY(): 根据容器的height来计算的
  • transform-origin: 横坐标(x)相对于容器的width来计算的,纵坐标(y)相对于容器的height计算
  1. 边框中的百分比
  • border-radius: 这个有点复杂,如果是一个百分比的值那就是以盒子的宽度来计算的,如果是两个值的话那就是第一个值是以盒子的宽度来计算的,第二个值以盒子的高度来计算的,以这两个值中的最大值作为圆角的半长轴,最小值作为圆角的半短轴。

在具体开发的时候应该怎样选择css单位

  • 时间单位主要用于过渡和动画中,用于定义持续时间或延迟时间。定时器中的单位主要是ms。
  • 分辨率单位主要是用于媒体查询,处理响应式布局等。
  • 角度单位主要用于元素的旋转变换,以及线性渐变会用到。
  • 百分比单位和相对单位中的rem, em, vw, vh都是在实现自适应布局中会用到,具体使用哪种单位还是要根据布局效果来定义。
  • 绝对单位除了px之外在我们写css样式中基本上不会使用