关于rem:Rem布局的原理解析
什么是Remrem和em很容易混同,其实两个都是css的单位,并且也都是绝对单位,现有的em,css3才引入的rem,在介绍rem之前,咱们先来理解下em。 em作为font-size的单位时,其代表父元素的字体大小,em作为其余属性单位时,代表本身字体大小——MDN 我在面试时常常问会一道和em无关的题,来看一下面试者对css细节的理解水平,如下,问s1、s2、s5、s6的font-size和line-height别离是多少px,先来想一想,结尾处有答案和解释。<div class="p1"> <div class="s1">1</div> <div class="s2">1</div></div><div class="p2"> <div class="s5">1</div> <div class="s6">1</div></div> .p1 {font-size: 16px; line-height: 32px;}.s1 {font-size: 2em;}.s1 {font-size: 2em; line-height: 2em;} .p2 {font-size: 16px; line-height: 2;}.s5 {font-size: 2em;}.s5 {font-size: 2em; line-height: 2em;} em能够让咱们的页面更灵便,更强壮,比起到处写死的px值,em仿佛更有张力,改变父元素的字体大小,子元素会等比例变动,这一变动仿佛预示了有限可能。有些人提出用em来做弹性布局页面,但其简单的计算让人诟病,甚至有人专门做了个px和em的计算器,不同节点像素值对应的em值,o(╯□╰)o。 em做弹性布局的毛病还在于牵一发而动全身,一旦某个节点的字体大小发生变化,那么其后辈元素都得从新计算,X﹏X。 rem作用于非根元素时,绝对于根元素字体大小;rem作用于根元素字体大小时,绝对于其出初始字体大小——MDN rem取值分为两种状况,设置在根元素时和非根元素时,举个例子:/ 作用于根元素,绝对于原始大小(16px),所以html的font-size为32px/html {font-size: 2rem} / 作用于非根元素,绝对于根元素字体大小,所以为64px /p {font-size: 2rem} rem有rem的长处,em有em的长处,尺有所短,寸有所长,我始终不感觉技术没有什么对错,只有适宜不适宜,有对错的是应用技术的人,卓越与优良的区别就在于是否抉择适合的技术,并让其发挥优势。我始终感觉em就是为字体和行高而生的,有些时候子元素字体就应该绝对于父元素,元素行高就应该绝对于字体大小;而rem的有点在于对立的参考系。Rem布局原理rem布局的实质是什么?这是我问过很多人的一个问题,但失去的答复都差强人意。其实rem布局的实质是等比缩放,个别是基于宽度,试想一下如果UE图可能等比缩放,那该如许美妙啊。假如咱们将屏幕宽度均匀分成100份,每一份的宽度用x示意,x = 屏幕宽度 / 100,如果将x作为单位,x后面的数值就代表屏幕宽度的百分比。p {width: 50x} / 屏幕宽度的50% / 如果想要页面元素随着屏幕宽度等比变动,咱们须要下面的x单位,可怜的是css中并没有这样的单位,侥幸的是在css中有rem,通过rem这个桥梁,能够实现神奇的x通过上面对rem的介绍,能够发现,如果子元素设置rem单位的属性,通过更改html元素的字体大小,就能够让子元素理论大小发生变化html {font-size: 16px}p {width: 2rem} / 32px/ html {font-size: 32px}p {width: 2rem} /64px/ 如果让html元素字体的大小,恒等于屏幕宽度的1/100,那1rem和1x就等价了html {fons-size: width / 100}p {width: 50rem} / 50rem = 50x = 屏幕宽度的50% / ...