一、px
px
其实是一个相对单位的虚拟像素。
因为不同的设备在大小宽高相同时,他们的物理像素 (pt)
大小也可能是不同的。物理像素高的设备,单位面积内存放的像素点就多,因此画质看起来更精细。
通常,在 PC 端,CSS 的 px
就接近与实际的物理像素大小。
但移动端上,根据机型的分辨率大小,css 中的 px
可能对应不同数量的物理像素点。
比如 iPhone 5 使用的是 Retina 视网膜屏幕,使用 2px 2px 的 设备像素 代表 1px 1px 的 css 像素。所以设备像素数为 640 x 1136px时,CSS 逻辑像素数为 320 x 568px
特点:常用基本单位,可以固定设置布局或者元素的大小
缺点:没有弹性,大小死板,使用在多端的页面上时,无法做到适应效果
二、%
不同的 css 属性,使用%
,百分比参考的对象是不同的
先理解元素的包含块是谁,不能简单的认为是父元素
- 元素是静态定位和相对定位,其包含块是其父元素
- 元素是绝对定位,其包含块应该是离它最近的 position 为非 static 属性的祖先元素
- 如果是固定定位的元素,它的包含块是视窗(viewport)
下面列出不同 css 属性的参考对象
- 参考包含块的宽度
left / right / width / max-width / min-width / margin / padding / text-indent
- 参考包含块的高度
top / bottom / height / max-height / min-height
- 参考自身宽高
border-radius / background-size / transform: translate() / transform-origin / zoom / clip-path
- 参考自身字体大小
line-height
- 参考自身的行高
vertical-align
- 参考继承字体大小
font-size
百分比的继承
如果某个元素设置了百分比的属性,则后代元素继承的是计算后的值。例如
p {
font-size: 10px;
line-height: 130%;
}
// 由于 p 的行高计算值为13px,所以其子元素,行高也为13px
三、vh (css3)
view height
的缩写。
它相对于视窗的高度, 1vh
即视窗高度的 1%
四、vw (css3)
view width
的缩写。
它相对于视窗的宽度, 1vw
即视窗宽度的 1%
五、vmax (css3)
vmax
是在视口中选取宽度或高度其中大的一个,然后像 vw
和 vh
一样分为 100
等分。
六、vmin (css3)
vmin
是在视口中选取宽度或高度其中小的一个,然后像 vw
和 vh
一样分为 100
等分。
七、em
它是相对于字体大小来计算的一个尺寸,它是字体大小的倍数,如 em
相对的字体大小为 16px
,那么 1em = 16px
使用 em
单位的元素如果自身设置了字体大小,那么就相对于自身进行计算。否则就会相对最近的有设置字体大小的祖先元素进行计算。如果页面中没有设置字体大小,那么就会以浏览器的默认字体大小 16px
为基准。
八、rem (css3)
rem
只会相对于 html
根元素的字体大小,也就是说如果根元素字体设置为 18px
,那么全局内 rem
的值换算都为 1rem = 18px
补充:
rem
在响应式页面中经常使用到,因为我们可以根据不同的设备尺寸,去动态调整根元素的大小,使用rem
单元达到适配不同尺寸设备的效果,有些自适应的页面框架单位上的使用就是基于此特性。- 有时我们为了换算方便会将根元素的字体大小先设置为
62.5%
,然后根据需要进行调整,原因是62.5% * 16px = 10px
,此时也就是1rem = 10px
九、rpx (upx)
响应式 px
单位
由小程序最先提出,为了解决 px
在移动端上不同机型容易出现的变形问题
以 微信小程序 对rpx
实现为例
微信小程序规定屏幕的基准宽度为 750rpx
对 iPhone6 而言,屏幕宽度为 375px,把它分为 750rpx 后, 1rpx = 0.5px