rem、rm、px、vw之间的相互转换

一、vw px rem em到底是什么
1.vw/vh:就是相对视口宽度或者高度,100vw 等于整个屏幕宽度 100vh等于整个屏幕高度。1vw = 1% * 视口宽度。意思是一个视口就是100vw。长度和宽度等于窗口长度或宽度的1/100
例如:1920x800的设计稿
换算1/1001920=19.2 所以 1vw=19.2px; 即:1vw/y=100vw/1920px
换算1/100
800=8 所以 1vh=8px;

2.px:px是屏幕设备物理上能显示出的最小的一点。是相对长度单位。在桌面浏览器中,1个像素往往是对着电脑屏幕的1个物理像素,但是在移动端,css中的1px并不等于设备的1px。比如iphone3,分辨率是320 x 480。iphone4变成了640 x 960,但是iphone4的实际屏幕尺寸并没有变化。这时候的1个css像素就是等于两个物理像素。

3.rem:相对于html根元素的字体大小(font-size)来计算的长度单位,可以设置,默认16px

4.em:所有现代浏览器下,默认字体尺寸都是16px。这时,1em = 16px。em会继承父级尺寸,也是相对单位。

二、vw px rem之间的换算
1.我们假设psd的设计稿是以1920px为标准的。那么:
100vw = 1920px => 1vw = 19.2px
假设: 1rem = 100px
那么:
1920px=19.2rem = 100vw => 1rem = 100/19.2 =5.208vw
100px = 1rem = 5.208vw
这时候,我们只要给html的根元素设置:
font-size: 5.208vw即可。

//如果屏幕宽度小于375像素(max-device-width: 375px)就加载tiny.css文件。
//写法1
 <link rel="stylesheet" type="text/css"
     media="screen and (max-device-width: 375px)"
     href="tiny.css" />
//写法2
@import  url("tiny.css") screen and (max-device-width: 375px);
//写法3
@media  screen and (max-device-width: 375px) {
    .column {}
   }

响应式布局:
一:使用百分比与rem
宽度% 高度rem 字号rem 在html中设置根元素的font-size大小

html{
  font-size:16px;
}
//1.媒体查询
html{font-size:10px}
@media screen and (min-width:321px) and (max-width:375px){html{font-size:11px}}
@media screen and (min-width:376px) and (max-width:414px){html{font-size:12px}}
@media screen and (min-width:415px) and (max-width:639px){html{font-size:15px}}
@media screen and (min-width:640px) and (max-width:719px){html{font-size:20px}}
@media screen and (min-width:720px) and (max-width:749px){html{font-size:22.5px}}
@media screen and (min-width:750px) and (max-width:799px){html{font-size:23.5px}}
@media screen and (min-width:800px){html{font-size:25px}}
//2.借助sass,less等,类似这种

@baseFontSize: 75;//基于视觉稿横屏尺寸得出的基准值font-size
/*rem = document.documentElement.clientWidth * dpr / 10
设备像素比(device pixel ratio) = 物理像素 / 设备独立像素
dpr=window.devicePixelRatio
以iphone6为例:
设备宽高为375×667,可以理解为设备独立像素(或css像素)。
dpr为2,根据上面的计算公式,其物理像素就应该×2,为750×1334。不同设备,dpr不同
*/
.px2rem(@px){
    @return @px / @baseFontSize * 1rem;
}
//使用示例:
.container {
    height: px2rem(240);
}
//less翻译结果:
.container {
    height: 3.2rem; 
} 
//同时也要借助js动态设置html的font-size

let deviceWidth = document.documentElement.clientWidth;
document.documentElement.style.fontSize = deviceWidth / 7.5 + 'px';
  
window.onresize = function(){
   let deviceWidth = document.documentElement.clientWidth;
   document.documentElement.style.fontSize = deviceWidth / 7.5 + 'px';
};

3.vw视口
//此时设计稿大小为750px,用/100的方式可以很容易进行rem的换算,几乎不
//需要借助其他工具,直接设计稿大小除以100即可,并不觉得麻烦,所以一直在用 
html{
    font-size: calc(100vw / 7.5);
}
let deviceWidth = document.documentElement.clientWidth;
document.documentElement.style.fontSize = deviceWidth / 7.5 + 'px';
  
window.onresize = function(){
   let deviceWidth = document.documentElement.clientWidth;
   document.documentElement.style.fontSize = deviceWidth / 7.5 + 'px';
};
4.使用插件
postcss-pxtorem:转换px为rem的插件
安装 postcss-pxtorem
npm install postcss-pxtorem --save

这样页面中的rem将根据根元素显示字号大小,2rem就是32px

二:使用百分比与px
单位设置px,移动端的px自动转为rem

// 自动计算 1080p 为 vw
@function vw($px, $isFontSize: 0) {
  @if $isFontSize == 1 {
    @return $px * 1px;
  }
  @return $px / 1920 * 100vw;
}

// 自动计算 750 屏幕的 rem
@function rem($px) {
  @return ($px / 32) * 1rem;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351