目录

一、长度单位

二、简单介绍

三、详细介绍

1、相对长度单位

2、绝对长度单位

3、长度单位总结

四、五个可能你不太了解的CSS单位

1、em 和 rem

2、对网络布局的好处(对H5页面做兼容)

3、vh 和 vw

4、vmin 和 vmax

5、ex 和 ch

五、CSS/CSS3中的时间、频率、角度

1、角度(Degress)

2、百分度(Grads)

3、弧度(Rads)

4、圈数(Turns)

5、时间(Times)

6、频率(Frequencies)


一、长度单位

在CSS中以不少值是以长度作为值的,盒子模型的属性就是一些明显的值属性:width、height、margin、padding、border。除此之外还有很多的css属性的值同样也是长度值,像偏移量offset、box-shadow的大小或字体大小、间距等,在CSS中存在众多的长度单位,下面我们就来说一下长度单位以及它们的用途。

二、简单介绍

在CSS的长度单位分为两种:绝对长度相对长度。

  • 绝对长度:px、in、cm、mm、pt、pc
  • 相对长度:em、rem、ex、vh、vw、vmin、vmax、%、fr

三、详细介绍

1、相对长度单位

px:表示像素,像素是相对于屏幕分辨率的,页面按照精确像素展示,不会因为其它元素的尺寸变化而变化,像素仍然是最典型的度量单位,例如:windows的用户所使用的分辨率96像素/英寸,而mac的用户所使用的分辨率一般是72像素/英寸,一般javascript语言里的单位就是使用的像素。

div {width: 200px;

in:英寸(inch)是一个物理度量文件,但是在CSS领域,英寸只不过被直接映射成像素罢了。(1in == 2.54cm == 96px)

div {width: 2in;
}

cm:厘米是比较熟悉有用的物理度量单位。它也映射成像素。(1cm == 37.8px)

div {width: 20cm;
}

mm:毫米是个小数量级的物理度量单位。(1mm == 0.1cm == 3.78px )

div {width: 200mm;
}

pt:点(Points)也是物理长度单位。(1pt == 1/72in == 96/72px)

div {width: 20pt;
}

pc:派卡(Pica)和points一样,只不过(1pc == 12pt)。

div {width: 20pt;
}

2、绝对长度单位

em:em是一个相对单位,相对于当前对象内文本的字体尺寸,如当前对行内的字体尺寸未被人设置,则相对于浏览器 的默认字体尺寸。
起初排版度量时是基于当前字体大写字母 M 的尺寸的,当改变font-family时,它的尺寸不会发生改变,但在改变font-size的大小时,它的尺寸就会发生改变,em 会继承父级元素的字体大小。(下面有关于 em 和 rem 的例子)
在没有任何CSS规则的前提下:(1em == 16px == 0.17in == 12pt == 1pc == 4.2mm == 0.42cm)

div {width: 20pt;
}

rem:rem 和 em 一样是一个相对单位,但是和 em 不同的是 rem 总是相对于根元素(如:root{}),而不像em一样使用级联的方式来计算尺寸。这种相对单位使用起来更简单。

div {width:40rem;
}

ex:相对长度单位,相对于字符 "x" 的高度,此高度通常为字体尺寸的一半,如当前对行内的文本的字体尺寸未被人为设置,这相对于浏览器的默认字体尺寸。和 em 不同,当改变 font-family 时 em 不会改变,而 ex 单位会变化,因为一个单位的值和那个字体是特殊的约束关系。

div {width:40ex;
}

ch:ch的内涵和ex相对于x的高度相似,只是 ch 是基于字符 0 的宽度的而不是基于字符 x 高度的。1ch也就是数字0的宽度,当 font-family 改变的时候 ch 也会随着改变。

div {width:40ch;
}

vw:vw(viewpoint width)是 可视宽度 单位(视窗宽度),1vw 等于可视区宽度的 百分之一 ,vw单位跟百分比很相似,不同的是vw所有的值对所有的元素都一样,与他们父元素 或 父元素的宽度 无关,有点像rem单位那样总是相对于根元素。(下面有关于 vh 和 vw 的例子)

div {width:40vw;
}

vh:vh(viewport height)和vw(viewport width)单位一样,不同的vh是相对于可视区的高度(视窗高度)。

div {width:40vh;
}

vmin:vmin的值是当前vw和vh中 较小 的值,在标准 尺寸类型的使用实例中,和由自己确定屏幕大小的vw、vh单位相比,vmin是一个更有用的度量标准。

div {width:40vmin;
}

vmax:vmax的值是vw和vh中 较大 的那个值。

div {width:40vmax;
}

%:百分比,以百分比为单位的长度值 是基于具有相同属性的父元素的长度值,例如:如果一个元素呈现的宽度是450px,子元素的宽度设为50%,那么子元素呈现的宽度为225px。(如果所有的父级元素都没有设置具体的值,那么设置百分比高度那会导致所有的元素的值都为0)。

div {width:40%;
}

fr:gird布局中利用的一个长度单位,在gird布局中,我们经常会利用fr来进行计算。
下面这句语句则是声明三行的gird,第一行的高度为30px,第二行的同样为30px,第三行的为60px。

grid-template-rows: 30px 1fr 2fr;

3、长度单位总结

1)首先要明白一点,那就是屏幕分辨率究竟是什么,我们知道在不同的分辨率下 ,像素点的大小是不同的,所以同一个网页,以 px 作长度单位时,在不同的分辨率下显示的大小是不同的,在低分辨率下,像素点较大,细节不够清晰,虽然显示的页面也大,但模糊不清。

2)实际上,所有的单位,无论是相对还是绝对单位,(在屏幕上的显示时)最终都是转化为px单位的,所以一般来说,在网页制作时,基本单位都选择 px 而不是 pt,因为 pt 也是通过浏览器的 DPI 转成 px 显示(比如FireFox的DPI是96,则有9pt = 12px)。不仅pt,cm、in、mm等单位也是转换成px的,所以无论用绝对还是相对,在不同的分辨率下都是会变的,不要以为把长度设置为3cm,它就会在不同的分辨率下保持3cm不变。

3)我觉得 pt 还是很有用的一个单位,在打印时尤其如此,现在有的网页以及经实现了显示是一个页面,打印用另一种方式,我想在打印上就采用 pt 吧,因为针对不同的分辨率,打印出来的页面都是一样的大小,这就是绝对单位的第一特征,但是依然要记住,在显示上,这个单位代表的不是真实物理长度,它也是要根据像素的实际大小(这个跟分辨率有关)进行调整的。

4)实际上我们可以这样理解,将px看做绝对单位(显示上的绝对单位),其它的单位都是以 它为基础的,比如em,它就是相对当前文本字体的高度(假设当前文本字体的尺寸是12px,我们设置新的字体为1.5em,则新的字体尺寸转换为12 * 1.5 = 18px),要记住的就是em是相对于 父级元素的高度,假设第一个div中我们设置了字体为12px,第二级我们设置1.5em,第三级我们设置1.5em,实际上字体的显示是:第一级12px,第二级18px,第三级18 * 1.5 = 27px。

四、五个可能你不太了解的CSS单位

我们很容易无法摆脱的使用我们所熟悉的CSS技术,当新的问题出现,这样会使我们处于不利的地位。

随着Web继续的发展,对新的解决方案的需求也会继续增大。因此,作为网页设计师和前端开发人员,我们别无选择,只有去了解我们的工具集并且熟悉它。

这意味着我们还要了解一些特殊的工具-那些不经常使用的,但是当需要它们的时候,它们恰恰是最正确的工具。

今天,我将要向你介绍一些你以前可能不知道的CSS工具。这些工具都是计量单位,就像像素或者相对单位,但是很可能你从来没听说过它们!让我们一探究竟吧。

1、em 和 rem

我们将从你已经熟悉的东西开始,em 单位被定义为当前字体大小,首先我们先对上面说到的 em 是相对于 父元素高度 的。
例如:如果你在body元素上设置一个字体大小,那么在body元素内的子元素中的em值都等于这个字体的大小。em单位被定义为当前字体大小。

例如,如果你在body元素上设置一个字体大小,那么在body元素内的任何子元素的em值都等于这个字体大小。

<body><div class="test">Test</div>
</body>body {font-size: 14px;
}
div {font-size: 1.2em; // calculated at 14px * 1.2, or 16.8px
}

在这里,我们说这个div将有一个1.2emfont-size。它是所继承的字体大小的1.2倍,在这个例子中为14px。结果为16.8px。

但是,当你在每个元素内都级联em定义的字体大小将会发生什么?在下面的代码片段中我们应用和上面一模一样的CSS.每个div从它们的父节点继承字体大小,带给我们逐渐增加的字体大小。

<body><div>Test <!-- 14 * 1.2 = 16.8px --><div>Test <!-- 16.8 * 1.2 = 20.16px --><div>Test <!-- 20.16 * 1.2 = 24.192px --></div></div></div>
</body>

虽然在某些情况下可能需要这个,但是通常你可能想基于一个唯一的度量标准来按比例缩放。在这种情况下,你应该用remrem中的"r"代表"root";这等同于font-size基于根元素进行设置;在大多数情况下根元素为html元素。

html {font-size: 14px;
}
div {font-size: 1.2rem;
}

在上一个示例中三个嵌套的div的字体大小计算结果都为16.8px

2、对网络布局的好处(对H5页面做兼容)

rem不是只对定义字体大小有用,比如,你可以使用rem把 整个网格系统 或者 UI样式库 基于HTML根元素字体大小上,然后在特定的地方使用em比例缩放,这将带给你更加可预测的字体大小和比例缩放。

.container {width: 70rem; // 70 * 14px = 980px
}

从概念上讲,像这样一个策略背后的想法是为了允许你的界面随着你的内容按比例缩放。然而,这可能不一定对每个案例都有意义。

3、vh 和 vw

响应式网页设计技术很大程度上依赖于比例规则,然而,CSS比例不总是每个问题的最佳解决方案。CSS宽度是相对于最近的包含父元素。如果你想使用 显示窗口 的 宽度 或 高度 而不是父元素的宽度将会怎么样?这正是 vh 和 vw 单位所提供的。

vh 等于viewport高度的1/100,例如:如果浏览器的高是900px,1vh求得的值为9px,同理如果显示窗口的宽度为750px,1vw求得的值为7.5px。

这些规则表面上看起来有无尽的用途,例如,做一个占满高度的或者接近高度的幻灯片,可以用一个非常简单的方法实现,只要用一行CSS:

.slide { height: 100vh; }

设想你要一个占满屏幕宽度的标题。为做到这一点,你将会用 vw 来设置一个字体大小。这个大小将会随着 浏览器的宽度按比例缩放。点击查看:视窗单位:vw、vh的兼容性列表。

点击查看:视窗单位:vw、vh的兼容性列表

4、vmin 和 vmax

vw 和 vh 总是与视窗的 高度 和 宽度 有关,与之不同的,vmin 和 vmax 是与这次 宽度 和 高度 的 最大值 或 最小值 有关,取决于哪个更大和更小,例如:如果浏览器设置为1100px宽、700px高、1vmin会是7px,1vmax 为 11px,然而,如果宽度设置为800px、高度设置为1080px,1vmin将会等于8px,1vmax将会是10.8px。

所以你什么时候可能用到这些值?

设想你需要一个总是在屏幕上可见的元素,使用高度和宽度设置为低于100的vmin值将可以实现这个效果,例如:一个正方形的元素总是至少接触屏幕的两边可能是这样定义的:

.box {height: 100vmin;width: 100vmin;
}

如果你需要一个总是覆盖可视窗口的正方形(一直接触屏幕的四条边),使用相同的规则只是把单位换成vmax

.box {height: 100vmax;width: 100vmax;
}

这些规则的组合提供了一个非常灵活的方式,用新的、令人兴奋的方式利用你的可视窗口的大小。

5、ex 和 ch

ex 和 ch 单位,与em 和 rem 相似,依赖于当前字体和字体大小。然而,与 em 和 rem 不同的是,这两个单位也依赖于font-family,因为它们被定义为基于特殊字体的法案。

ch单位,或者字符单位被定义为0字符的宽度的 " 先进的尺寸 " 。在 Eric Meyer’s的博客 中可以找到一些非常有趣的讨论关于这意味着什么,但是基本的概念是,给定一个等宽字体的字体,一个N个字体单位宽的盒子,比如width:40ch;可以容纳一个有40个字符的应用那个特定字体的字符串。虽然这个特殊规则的传统用途与列出盲文有关,但是这里创造性的可行性一定会超越这些简单的用途。

ex 单位被定义为 " 当前字体的 x-height 或者一个 em 的一半",给定的字体的 x-height 是指那个字体的小写 x 的高度。通常,这是这个字体的中间的标志。

x-height:小写字母x的高度。

对于这种单位有很多用途,大多数是用于排版的微调。例如:sup元素,代表上标,可以用相对定位和一个1ex的底部值在行内被推高。类似地,你可以拉一个下标元素。浏览器 支持这些利用上标和下 标特性的vertical-align规则,但是如果你想要更精细的控制,你可以想这样更明确的处理样式:

sup { position: relative; bottom: 1ex;
}
sub { position: relative; bottom: -1ex;
}

ex单位在CSS1中已经存在,但是你不会找到对ch单位有像这样坚实的支持。

五、CSS/CSS3中的时间、频率、角度

下面很多单位都是伴随着CSS3的诞生而诞生的:

单位 含义
deg degress,角度
grad grads,百分度
rad radians,弧度
turn turn,圈数
ms milliseconds,毫秒数
s seconds,秒数
Hz Hertz,赫兹
kHz kilohertz,千赫

旋转效果牵扯到角度,动画效果牵扯到时间,声音效果牵扯到赫兹,选几个代表性的举例:

1、角度(Degress)

角度范围从 0~360度(deg),当然 ,也可以是负数,如果是 负数 则 逆时针,看下面代码:

HTML代码:

<img class="image_test_1" src="//image.zhangxinxu.com/image/study/s/s256/mm1.jpg" />
<img class="image_test_2" src="//image.zhangxinxu.com/image/study/s/s256/mm2.jpg" />
<img class="image_test_3" src="//image.zhangxinxu.com/image/study/s/s256/mm3.jpg" />
<img class="image_test_4" src="//image.zhangxinxu.com/image/study/s/s256/mm4.jpg" />
<img class="image_test_5" src="//image.zhangxinxu.com/image/study/s/s256/mm5.jpg" />

CSS代码:

.image_test_1, .image_test_5 {-moz-transform: rotate(-5deg);-webkit-transform: rotate(-5deg);-o-transform: rotate(-5deg);transform: rotate(-5deg);
}
.image_test_2, .image_test_4 {-moz-transform: rotate(5deg);-webkit-transform: rotate(5deg);-o-transform: rotate(5deg);transform: rotate(5deg);
}

展示效果:

2、百分度(Grads)

一个分度,或者说是 百分度 相对于 1/400 个整圈,跟角度单位一样,支持负值,负值 表示 逆时针 方向。(100grad = 90deg)

3、弧度(Rads)

1弧度 等于 180π度,或者大致等于 57.3度,1.570796326794897rad 相当于 100grad 或是 90deg。

4、圈数(Turns)

这个很好理解,1圈360度,平时体操或跳水中出现的后空翻 720°,也就是后空翻两圈的意思啦。于是有了等式 1turn = 360deg,2turn = 720deg。

5、时间(Times)

这个单位也应该很熟悉,初中物理很早就接触这个单位了,秒 就是 s,毫秒 就是 ms,1s = 1000ms,此单位一般用在CSS3动画中,例如transition或是animate中,这个就不多说了,可以查看鑫哥的文章或者其它的资料。

6、频率(Frequencies)

频率值使用在听(或说)级联动样式表中,有两个单位值,即 赫兹 和 千赫 ,有点毫秒和秒的感觉。频率可以被用来改变一个语音阅读文本的音调。低频率是低音,高频率是高音,例如下面代码:

p.low { pitch: 105Hz; }
q.squeal {pitch: 135Hz;}

前端4-2-5:关于CSS 长度单位总结,有你就够了!相关推荐

  1. css的长度单位没有哪些,css 长度单位知多少

    写在前面:在这个是个 coder 都会写两行前端代码的年代下,几乎都对 css 不是很陌生,但是真正能写好的确需要对 css 深入学习了,做为一个不称职的后端,我觉得我也有必要多了解一下. css 中 ...

  2. 一文搞懂像素(px)、分辨率、CSS长度单位

    博主目前在蚂蚁集团-体验技术部,AntV/S2 是博主所在团队的开源项目--多维交叉分析表格,欢迎使用,感谢到 S2 github 仓库点赞 star,有任何关于前端面试.就业.技术问题都可给在文章后 ...

  3. css 背景效果_前端初学大纲03~(CSS 概述)

    第四章 CSS 概述 第一节 CSS代码语法 • CSS全称为层叠样式表(Cascading Style Sheets),它主要是用于定义HTML内容在浏览器内的显示样式,如文字大小.颜色.字体加粗等 ...

  4. 好程序员web前端分享值得参考的css理论:OOCSS、SMACSS与BEM

    为什么80%的码农都做不了架构师?>>>    好程序员web前端分享值得参考的css理论:OOCSS.SMACSS与BEM 最近在The Sass Way里看到了Modular C ...

  5. 《Web前端开发精品课 HTML与CSS进阶教程》——1.4 id和class

    本节书摘来自异步社区<Web前端开发精品课 HTML与CSS进阶教程>一书中的第1章,第1.4节,作者: 莫振杰 更多章节内容可以访问云栖社区"异步社区"公众号查看. ...

  6. 前端三大技术 HTML、CSS、JavaScript 快速入门手册

    听到前端技术,不少朋友一定会感到有些陌生.但其实,前端,你每天都在接触. 你正在使用的APP,你正在浏览的网页,这些你能看到的界面,都属于前端. 而前端最重要的三大技术,HTML,CSS,JavaSc ...

  7. css 大于号 标签_web前端教程之怎样学好css?

    web前端教程之怎样学好css?我推荐题主的学习方法就是:善用调试工具. 使用谷歌浏览器进行调试,在属性不理解时可以直接在浏览器里进行数值调节 css在书写时由于选择器权重问题经常出现样式覆盖的问题 ...

  8. html前端页面的基本骨架是,web前端入门到实战:css实现的骨架屏方案

    web前端入门到实战:css实现的骨架屏方案 发布时间:2020-08-04 01:32:03 来源:51CTO 阅读:152 作者:前端向南 优点 简单,不需要工程,不用puppeteer生成骨架d ...

  9. ul 原点显示_web前端开发学习教程,CSS HTML - ul li列表原点如何相连

    原标题:web前端开发学习教程,CSS HTML - ul li列表原点如何相连 目前我列出两个方案,很详细,希望可以帮助到有疑问的朋友. 方案一: html 参与考试<第一期模拟考试> ...

  10. 【web前端开发】介绍div+css的6个优点

    2019独角兽企业重金招聘Python工程师标准>>> 关于div+css你知道多少?XHTML网站设计标准中,不再使用表格定位技术,而是采用div+css的方式实现各种定位.一般来 ...

最新文章

  1. 集合对象的数据绑定(1)
  2. atitit..主流 浏览器 js 发动机 内核 市场份额 attialx总结vOa9
  3. 如何格式化电脑_Mac苹果电脑如何格式化?
  4. 【python教程】IO文件操作的常见用法
  5. win10安装docker
  6. php 前端模板 yii,php – Yii2高级模板:添加独立网页
  7. IntelliJ IDEA(三、各种工程的创建 -- 之二 -- 创建一个JavaWeb工程)
  8. 数据库事务4种隔离级别和7种传播行为
  9. 实现成长之路——SpringBean三:实例化Bean的姿势都有哪些?
  10. java自动化测试之开发工具eclipse安装配置
  11. SQL Server 2000升级sp4补丁的时候出现“以前进行的程序安装创建了挂起的文件操作”的错误!...
  12. 第一次登录域控服务器的账号,windows域登录与SSO服务器整合
  13. java mysql 端口_如何在JAVA中建立MySQL连接?在locahost上设置的端口号是多少?
  14. python编程财务_Python笔记 财务小白的 day3 python编程基础(1)
  15. 【单片机】08数码管
  16. 论STM32标准库程序修改为HAL库
  17. WOT干货大放送:大数据架构发展趋势及探索实践分享
  18. 74HCT04D基本参数介绍
  19. 管理利器:远程控制任我行
  20. vue 批量图片上传

热门文章

  1. ERROR: Invalid subnet : invalid CIDR address: 解决办法
  2. DM36x Rate Control Modes
  3. SketchUp: Modeling from Photos SketchUp教程:从照片建模 Lynda课程中文字幕
  4. 非企用户该如何推广?什么事非企户呢?
  5. HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌)
  6. Altium Designer学习记录之一
  7. pgsql的pg_basebackup
  8. 软件设计师下午真题及参考答案
  9. 2019HDU多校第一场1001 BLANK (DP)(HDU6578)
  10. 解决网易云音乐linux-1.2.1无法保存设置