一文读懂 CSS 单位
zhezhongyun 2024-12-13 17:12 111 浏览
大家好,我是Echa。
最近有不少的粉丝老铁们私信我为啥这几天没有创作新内容了,实在对不住。小编我身在广州中招羊了,我在最近一篇文章也有提到过,今天是第四天,基本上康复了,奥密克戎BA.5其实没有那么恐怖,中招了前三天特难受,熬过来了就没事了,大家莫慌。现在小编就可以认认真真的继续创作内容了。同时也非常感谢大家默默的关心我小编身体状况,非常谢谢。
创作不易,喜欢的老铁们加个关注,点个赞,后面会持续更新干货,速速收藏,谢谢!
说起 CSS 单位,我们最常用的可能就是像素单位(px),它是一个绝对单位,也就是说一个10px的文字,放在哪里都是一样大的。单位可以影响颜色、距离、尺寸等一系列的属性。CSS中单位的形式有很多种,下面就来学习一下 CSS 中单位!
1. 相对单位
相对单位就是相对于另一个长度的长度。CSS中的相对单位主要分为两大类:
- 字体相对单位,他们都是根据font-size来进行计算的。常见的字体相对单位有:em、rem、ex、ch;
- 视窗相对单位,他们都是根据视窗大小来决定的。常见的视窗相对单位有vw、vh、vmax、vmin。
下面就来看看这些常见的CSS单位。
(1)em 和 rem
em是最常见的相对长度单位,适合基于特定的字号进行排版。根据CSS的规定,1em 等于元素的font-size属性的值。
em 是相对于父元素的字体大小进行计算的。如果当前对行内文本的字体尺寸未进行显示设置,则相对于浏览器的默认字体尺寸。当DOM元素嵌套加深时,并且同时给很多层级显式的设置了font-size的值的单位是em,那么就需要层层计算,复杂度会很高。
当然,上面的这个说法是不严谨 的。来看一个例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.parent {
width: 300px;
height: 300px;
font-size: 20px;
}
.child {
border: 1em solid ;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">
子元素
</div>
</div>
</body>
</html>
这里给父元素设置了字体大小为20px,然后给子元素的border宽度设置为1em,这时,子元素的border值为20px,确实是相对于父元素的字体大小设置的:
那如果我们给子元素的字体设置为30px:
.child {
font-size: 30px;
border: 1em solid ;
}
这时可以看到,子元素的边框宽度就是30px,它是相对自己大小进行计算的:
所以,可以得出结论:如果自身元素是没有设置字体大小的,那么就会根据其父元素的字体大小作为参照去计算,如果元素本身已经设置了字体,那么就会基于自身的字体大小进行计算。
em单位除了可以作用于 font-size之外,还可以运用于其他使用长度的属性,比如border-width、width、height、margin、padding、text-shadow等。
所以,em的使用还是比较复杂的,它可能会继承任意一级父元素的字体大小。需要谨慎使用。
rem相对于em就简单了很多,它是根据页面的根元素(根元素)的字体大小来计算的。来对上面的例子进行修改:
.child {
font-size: 30px;
border: 1rem solid ;
}
html {
font-size: 25px;
}
效果如下,可以看到,边框的长度变成了25px,它是根据根元素html的字体大小计算的:
如果没有对根元素设定字号的话,font-size: 1rem的作用与font-size: initial相同。
使用 em 和 rem 可以让我们灵活的够控制元素整体的放大和缩小,而不是固定大小。那何时应使用 em,何时应使用 rem 呢?可以根据两者的差异来进行选择:
- 两者在客户端中计算出来的样式都会以px的形式显示;
- rem是相对于根元素html的font-size计算,em 相对于元素的font-size计算;
- 当需要根据浏览器的font-size设置缩放时,应该使用 rem;
- 使用 em 应该根据组件的font-size来定,而不是根元素的font-size来定;
- rem 可以从浏览器字体设置中继承 font-size 值, em 可能受任何继承过来的父元素 font-size 的影响。
(2)ex 和 ch
ex 和 ch 都是排版用的单位,它们的大小取决于元素的font-size 和 font-family属性。
- ex 指的是所用字体中小写字母 x 的高度。因此,如果两个字体不一样,那么 ex 的值是不一样的。因为每种字体的小写 x 的高度是不一样的。
- ch 和 ex 类似,不过它是基于数字 0 的宽度计算的。会随着字体的变化而变化。而0 的宽度通常是对字体的平均字符宽度,它是一个估计值。由于 ch 是一个近似等宽的单元,所以在设置容器的宽度时很有用,比如一个容器想要显示指定个数的字符串时,就可以使用这个单位。
(3)vw、vh、vmax 和 vmin
这四个单位都是视窗单位,所谓的视窗,在web端指的就是可视区域,移动端的视窗指的就是布局视窗。如果视窗大小发生了变化,那么这些值都会随之变化。这四个单位指的是:
- vw:视窗宽度的百分比;
- vh:视窗高度的百分比;
- vmax:较大的 vh 和 vw;
- vmin:较小的 vh 和 vw。
假如一个浏览器的高度是800px,那么1vh的值就是8px。vh和vw的大小总是和视窗的高度和宽度有关。
vmin 和 vmax 与视窗宽度和高度的最大值和最小值有关。假如一个浏览器高度为500px,宽度为1200px,那么1vmin就是5px,1vmax就是12px。
这些单位都是长度单位,所以可以在任何允许使用长度单位的地方使用。这些单位比较适合用于创建全视区界面,例如移动设备的界面,因为元素是根据视区的尺寸而变化的,与文档树中的任何元素都没有关系。
2. 绝对单位
在 CSS 中,绝对单位包括:px 、pt 、pc、 cm 、 mm 、in 等。绝对单位是一个固定的值,它反应了一个真实的物理尺寸。它不会受屏幕大小或者字体的影响。它们的大小取决于值以及屏幕的分辨率(DPI,每英寸的点数)。px就是我们最常用的绝对单位之一。这些绝对单位的换算关系如下:
1in = 25.4mm = 2.54cm = 6pc = 72pt =96px
(1)px
px 全称为 Pixels,表示像素,它并不严格等于显示器的像素,尤其在高清屏下。尽管CSS单位会根据浏览器、操作系统或者硬件适当缩放,在某些设备或者用户的分辨率设置下也会发生变化,但是96px通常等于一个物理英寸的大小。
CSS 将光栅图像(如照片等)的显示方式定义为默认每一个图像大小为1px。一个“600x400”解析度的照片的长宽分别为“600px”和“400px”,所以照片本身的像素并不会与显示装置像素一致,而是与 px 单位一致。如此就可以将图像完整的与网页的其它元素排列起来。
很多时候, px 也常被称为 CSS 像素。它是一个绝对单位,但也可以被视为相对单位,因为像素单位相对的是设备像素。在同一个设备上,每 1 个 CSS 像素所代表的物理像素是可以变化的;在不同的设备之间,每 1 个 CSS 像素所代表的物理像素是可以变化的。
.box {
width: 100px;
height: 100px;
}
(2)pt
pt 全称为 Point,表示点。常用于软件设计和排版印刷行业(笔者做的前端系统,最终的产物就是一个需要拿去印刷的PDF,所以会经常用到这个单位)。当使用这个单位时,无论显示器的分辨率是多少,打印在纸上的结果都是一样的。
如果单纯为了网页的显示,建议就使用px像素单位,如果需要输出印刷产品,就可以考虑使用pt。
(3)pc
pc 全程为 Picas,表示派卡。相当于我国新四号铅字的尺寸。派卡也是印刷的术语,1派卡等于12点。它和 px 的换算关系如下:
1pc = 16px
(4)cm
cm 全称为 Centimeters,表示厘米。它和 px 的换算关系如下:
1cm = 37.8px
(5)mm
mm 全称为 Millimeters,表示毫米。它和 px 的换算关系如下:
1mm = 3.78px
(6)in
in 全称为 Inches,表示英寸。它和 px 的换算关系如下:
1in = 96px
3. 频率单位
CSS中的频率单位有两个:赫兹(Hz)和千赫兹(kHz)。它们的换算关系如下:
1kHz = 1000Hz
通常情况下,频率单位使用在听或说级联样式表中。频率可以被用来改变一个语音阅读文本的音调。低频率就是低音,高频率就是高音。
.low {
pitch: 105Hz;
}
.squeal {
pitch: 135Hz;
}
需要注意,当数值为0时,单位对值没有影响,但是单位是不能省略的。也就是说0、0Hz、0kHz是不一样的。所以,在使用频率单位时,不要直接写0。另外,这两个单位是不区分大小写的。
4. 时间单位
CSS中的时间单位有两个:秒(s)和毫秒(ms)。这两个时间单位都是CSS新增的单位。这两个单位的换算关系如下:
1s = 1000ms
时间单位主要用于过度和动画中,用于定义持续时间或延迟时间。下面两种定义是等效的:
a[href] {
transition-duration: 2.5s;
}
a[href] {
transition-duration: 2500s;
}
5. 分辨率单位
CSS中的分辨率单位有三个:dpi、dpcm、dppx。这三个单位都是CSS3中华新增的单位。他们都是正值,不允许为负值。这三个单位的换算关系如下:
1dppx = 96dpi
1dpi ≈ 0.39dpcm
1dpcm ≈ 2.54dpi
分辨率单位主要用于媒体查询等操作。
(1)dpi
dpi 全称为 dots per inch,表示每英寸包含的点的数量。普通屏幕通常包含 72或96个点,大于 192dpi 的屏幕被称为高分屏。
@media screen and (min-resolution: 96dpi) { ... }
@media print and (min-resolution: 300dpi) { ... }
(2)dpcm
dpcm 全称为 dots per centimeter,表示每厘米包含的点的数量。
@media screen and (min-resolution: 28dpcm) { ... }
@media print and (min-resolution: 118dpcm) { ... }
(3)dppx
dppx 全称为 dots per pixel,表示每像素(px)包含点的数量。由于CSS px的固定比率为1:96,因此1dppx相当于96dpi。它对应于由图像分辨率定义的CSS中显示的图像的默认分辨率。
@media screen and (min-resolution: 2dppx) { ... }
@media screen and (min-resolution: 1dppx) and (max-resolution: 1.9dppx) { ... }
6. 角度单位
CSS中的角度单位有四个:deg、grad、rad、turn。这些角度单位都是CSS3中新增的单位。它们的换算关系如下:
90deg = 100grad = 0.25turn ≈ 1.570796326794897rad
一般这些角度单位用于元素的旋转操作,包括2D旋转、3D旋转等。
- 当旋转值为正值时,元素会顺时针旋转;
- 当旋转值为负值时,元素会逆时针旋转。
通常情况下,一个完整的旋转就是360度。所以,所有的角度都在0-360度之间。但是,超出这个范围的值也是允许的,只不过都会归到0-360度之间。比如,顺时针旋转420度(450deg)、逆时针旋转270度(-270deg)、顺时针旋转90度(90deg)都是一样的效果,都会归为90deg。但是当使用动画时,这些角度值就非常重要了。
CSS的旋转主要依赖于 transform 属性中的 rotate() 、rotate3d、 skew() 等方法。只需给它们传递旋转的角度即可。
除了旋转会使用角度之外,线性渐变也会经常使用角度值:
background: linear-gradient(45deg, #000, #fff);
(1)deg
deg 全称为 Degress,表示度,一个圆总共360度。
transform: rotate(2deg);
(2)grad
grad 全称为 Gradians,表示梯度,一个圆总共400梯度。
transform: rotate(2grad);
(4)rad
rad 全称为 Radians,表示弧度,一个圆总共2π弧度。
transform: rotate(2rad);
(4)turn
turn 全称为 Turns,表示圈(转),一个圆总共一圈(转)。
transform:rotate(.5turn);
7. 百分比单位
百分比(%)也是我们比较常用的单位之一,所有接受长度值的属性都可以使用百分比单位。但是不同属性使用该单位的效果可能并不一样。但是都需要有一个参照值,也就是说百分比值是一个相对的值。
下面来看看常见场景中的百分比单位的使用。
(1)盒模型中的百分比
在CSS中的盒模型包含的属性有:width、max-width、min-width、height、max-height、min-height、padding、margin等。这些属性在使用百分比时,参照物不尽相同:
- width、max-width、min-width:值为百分比时,其相对于包含块的 width 进行计算;
- height、max-height、min-height:值为百分比时,其相对于包含块的 height 进行计算;
- padding、margin:值为百分比时,如果是水平的值,就是相对于包含块的 width 进行计算;如果是垂直的值,就是相对于包含块的 height 进行计算。
(2)文本中的百分比
在CSS中文本控制的属性有font-size、line-height 、vertical-align、 text-indent等。这些属性在使用百分比时,参照物不尽相同:
- font-size:根据父元素的font-size 进行计算;
- line-height:根据font-size进行计算;
- vertical-align:根据line-height进行计算;
- text-indent:如果是水平的,则根据width进行计算,如果是垂直的,则根据 height 进行计算。
(3)定位中的百分比
在CSS中用控制 position 位置的top、right、bottom、left都可以使用百分比作为单位。其参照物就是包含块的同方向的width和height。不同定位的包含块不尽相同:
- 如果元素为静态( static )或相对定位( relative ),包含块一般是其父容器;
- 如果元素为绝对定位( absolute ),包含块应该是离它最近的 position 为 absolute 、 relative 或 fixed 的祖先元素;
- 如果元素为固定定位( fixed ),包含块就是视窗( viewport )。
(4)变换中的百分比
CSS 中的 transform 属性中的 translate 和 transform-origin 值也可以设置百分比。
- translateX() 根据容器的 width 计算
- translateY() 根据容器的 height 计算
- transform-origin 中横坐标( x )相对于容器的 width 计算;纵坐标( y )相对于容器的 height 计算
注意,在 translate 还有一个 z 轴的函数 translateZ() 。它是不接受百分比为单位的值。
- 上一篇:教你初步了解响应式网页设计
- 下一篇:VS Code当中的15个神仙插件,值得收藏
相关推荐
- DNF无色流派还在继续,重力之泉龙战八荒测评
-
作者:礁石22222前言本篇为115级套装天天鉴栏目,来帮助各位读者对于新版本的装备有一个更清晰的认知。115级套装分为了稀有到太初5个品级,所有套装的稀有品级属性是一致的,从神器开始出现分歧。通过积...
- 《暗黑破坏神2重制版》常用符文之语P3
-
大家好我是游戏小白,继续补充一下《暗黑破坏神2重制版》常用的符文之语,主要给大家总结一下前期过渡常用符文之语。没看过之前关于符文之语总结的小伙伴可以翻翻前面的文章。1、钢铁符文之语钢铁造价极低但性价比...
- 魔兽怀旧服:P1一款法系BIS披风,获取方式隐蔽,需完成875个任务
-
在魔兽怀旧服WLK版本,依旧存在许多实用的制造业装备,特别是在P1阶段,制造业装备的耐用性和性价比是最高的,不仅可以帮助玩家快速过渡到团本,甚至还有个别制造业装备超越了团本掉落的强度,除了玩家近期讨论...
- 分手类型——过渡阶段
-
过度阶段一.内涵:类似于反复期,在这个阶段儿可能会出现两种可能性。1.感性想分手,但理性上舍不得。感性上我完全不想跟他相处,但理性上我又觉得他身上有很多对我有利的,对我未来有机会有利的东西。二.理性...
- 《最后的信仰》新手开局保姆级指南职业选择、属性加点与开荒策略
-
《最后的信仰》作为类魂动作游戏,开局选择直接影响开荒体验。本文针对新手玩家,从职业特性、属性分配到武器过渡,提炼高效开荒公式,助你避开陷阱,快速掌握战斗节奏。一、职业选择:斗士/盗贼优先,法系/...
- DNF回血秘方揭示,夏日前买必看篇
-
作者:辽宁吴彦祖前言(省流速览)夏日礼包购买理由:夏日礼包是DNF四大礼包之一(新春&耕耘&夏日&金秋),错过销售日期后续想获得部分道具难度极大。主打暖暖时装、特色补齐、海量打...
- DNF手游:55级粉装有大作用!强化继承大法,可节省大量幸运符
-
55级粉装的自身属性,实际上比较一般,但它可以用来作为“过渡胚子”,能够帮大家节省很多幸运符和宇宙精华!1、强化继承大法因为不断有玩家翻出了55级团本武器,这把武器肯定是当前版本毋庸置疑的版本答案,但...
- 魔兽世界50级职业任务装备如何选择,手把手教学
-
魔兽世界50级职业任务,我们装备应该如何选择,今天分身一个文章告诉你,我们知道BWL开放,也会开放50级的职业任务,那么50级的职业任务,对某些职业来说还是非常重要的,因为给的装备。有的甚至可以用到7...
- 暗牧的T5与散件如何取舍?认准自己的团队地位才最重要
-
牧师作为《魔兽世界》中的老牌职业历经许久已经收获了不少的信仰者,而在笔者看来牧师的最大特色便是风格完全不同的三系专精,在TBC时期,Raid本中的牧师大多为神牧,而戒律牧基本只活跃在竞技场和战场上,而...
- DNF:魂异界传说宝珠曝光!属性设计一般般,男枪第五转职专属
-
魂异界地下城“炒冷饭”,定位新春活动副本,奖励道具覆盖面广,涉及白金徽章、转职书、矛盾材料等等。解锁魂异界次元等级,还能兑换传说宝珠,属性也逐渐浮出水面,却比较鸡肋,“抠门”发挥的淋漓尽致!太“抠门”...
- SwiftUI入门五:让视图和过渡动起来
-
在使用SwiftUI的时候,无论效果在哪里,我们都可以单独的让视图的变化动起来,或者让视图的状态的变化动态化。SwiftUI会为我们处理那些组合的、层叠的以及可中断的动画的复杂性。在这个教程中,我们会...
- DNF:又是变强的一年?2024耕耘礼包提升率揭晓
-
作者:assddde前言国服耕耘礼包的内容已经爆料了。对去年拉满耕耘的奶系职业的而言,今年的提升点为纹章加入了1%的增益量增幅。对C而言,今年换装称号中还加入了buff换装词条。而对于错过了新春套的C...
- 魔兽世界:TBC第一阶段还有必要刷T4套吗,D3套能否过渡到T5套?
-
T4套真的不如D3套?TBC怀旧服P1阶段目前已经走过大半,作为这个阶段装备等级最高的套装T4套装,游戏中有很大争议。比如猎人玩家会选择D3套,直接跳过T4到T5阶段,而法师甚至会选择继续使用T3套装...
- 《异世界勇者》390版本开荒&毕业攻略——狂暴战
-
虽然说这个版本是防战的本命版本,但是从大家催更的频率来看,狂暴战依旧是碾压的优势,今天给大家分享一下390版本狂暴战的毕业游玩思路,希望对你有帮助。今天给大家带来的是手动速刷版的攻略,想要挂机过本需要...
- 飞飞重逢:装备属性卡全攻略,五色神卡助你战力飙升快速获取
-
在游戏中,装备属性卡是提升战斗力的关键道具,它能赋予装备特殊的元素属性,不仅大幅提升攻击力,还能针对不同怪物打出克制伤害。属性卡分为火、水、风、土、电五种元素,每种都能为装备附加独特的攻击特效。那么如...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML文本框样式 (31)
- HTML滚动条样式 (34)
- HTML5 浏览器支持 (33)
- HTML5 新元素 (33)
- HTML5 WebSocket (30)
- HTML5 代码规范 (32)
- HTML5 标签 (717)
- HTML5 标签 (已废弃) (75)
- HTML5电子书 (32)
- HTML5开发工具 (34)
- HTML5小游戏源码 (34)
- HTML5模板下载 (30)
- HTTP 状态消息 (33)
- HTTP 方法:GET 对比 POST (33)
- 键盘快捷键 (35)
- 标签 (226)
- HTML button formtarget 属性 (30)
- opacity 属性 (32)
- transition 属性 (33)