最近接收了一份面试题,内容是移动端传播的H5(在中国通常这么叫)广告页。

秉承移动端web尽量少用px的概念,我使用rem进行了一次重构。对于rem,基本是给 html/body 元素定义一个字体大小,来作为整个页面的参考值。在移动端可以做到适配不同的手机分辨率,如果保持整体缩放,没有设计上的差异可以不需要用到`media query`。

在这份PSD中,设计师的视觉稿是按照640px宽度*900px高度来设计的,那么我们完全可以按照设计稿的尺寸设置浏览器尺寸,然后完全按照视觉稿上的尺寸来赋值给元素样式,比如视觉稿标尺显示宽度是50PX,我们可以直接写width:50px;页面中所有尺寸都按照这样来写。

之后只需要设置root单位,即页面的rem大小:

html {
font-size: calc(100vw/6.4);
}

其中100vw是设备的宽度,除以6.4可以让1rem的大小在640宽度的屏幕下等于100px(之所以让1rem等于100px,而不是1rem等于1px,是因为在chrome下针对中文的最小字体是12px)。

之后替换页面中的单位,把所有的px单位替换成rem,除以100,比如前面的50px,就是0.5rem这样在640屏幕下,所有元素的尺寸还是和视觉稿的尺寸一样。

而在其他尺寸的设备中,因为设备的宽度变小了,100vw/6.4得到的值,会相应的变小,即rem的单位值会变小,页面中所有的尺寸会等比例缩放。

这样就可以做到针对任何分辨率的设备保持视觉一致了。最后,前面用到vw单位,但是低版本的设备可能不支持,那么我们可以用JS来处理:

javascriptdocument.documentElement.style.fontSize = window.innerWidth/6.4 + 'px'

或者使用:

@media only screen {
html{
font-size: 30px;
}
}
@media only screen and (max-width: 479px) and (min-width: 321px) {
html {
font-size: 15px;
}
}
@media only screen and (max-width: 320px) {
html {
font-size: 13px;
}
}

昨晚实现完之后,发现了很多可以改进的地方:

在如此多的绝对定位和相对定位下,使用less去计算css尺寸会轻松很多。

写css的时候,可以直接写rem单位,按视觉稿除以100,其实也没有什么计算过程。

或者用预处理器的话,也可以写一个`px2rem`的函数。

不过这些都是后话了。

谈谈css3的字体大小单位[rem]的更多相关文章

  1. CSS3新的字体尺寸单位rem

    CSS3引入新的字体尺寸单位 rem ,可以简单记忆为root rm. CSS3的出现,他同时引进了一些新的单位,包括我们今天所说的rem.在W3C官网上 是这样描述rem的——“font size ...

  2. CSS3自适应字体大小(vw vh)

    viewpoint css3提供了一些与当前viewpoint相关的元素,vw,vh,vmin, vmax等. “viewpoint” = window size vw = 1% of viewpor ...

  3. css字体大小单位

    1:px: 这个应该是国内使用较多的单位,意思为像素.因此,其视觉的呈现效果是与分辨率相关的.例如在1024*768分辨率下看12px的字体就比960*640下看到的“小”,其实字体像素未改变,所以觉 ...

  4. Html 字体大小单位 px em pt

    网页上定义字体大小有常见三种单位,px.em.pt px px是pixel缩写,是基于像素的单位.在浏览网页过程中,屏幕上的文字.图片等会随屏幕的分辨率变化而变化,一个100px宽度大小的图片,在80 ...

  5. 用js判断屏幕的宽度,改变html字体大小用rem布局

    if (document.documentElement.clientWidth > 600) {//页面宽度大于600px让其宽度等于600px,字体大小等于60px,居中 document. ...

  6. CSS系列:长度单位&字体大小的关系em rem px

    em是相对长度单位.相对于当前对象内文本的字体尺寸.如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸. 任意浏览器的默认字体高都是16px.所有未经调整的浏览器都符合: 1em=1 ...

  7. 笔记:字体大小的几种不同的格式px,em,rem

    px px像素(Pixel),相对长度单位,像素px是相对于显示器屏幕分辨率而言的.(引自CSS2.0手册) 譬如,Windows的用户所使用的分辨率一般是96像素/英寸. 而MAC的用户所使用的分辨 ...

  8. 7个你可能不认识的CSS单位:rem vh vw vmin vmax ex ch

    rem 我们首先介绍下和我们熟悉的很相似的货.em 被定义为相对于当前对象内文本的字体大小.炒个栗子,如果你给body小哥设置了font-size字体大小,那么body小哥的任何子元素的1em就是等于 ...

  9. (转)CSS字体大小: em与px、pt、百分比之间的对比

    CSS样式最混乱的一个方面是应用程序中文本扩展的font-size属性.在CSS中,你可以用四个不同的单位度量来显示在web浏览器中的文本 大小.这四个单位哪一种最适合Web? 这个问题引起了广泛的争 ...

随机推荐

  1. 【HDU 2013 猴子吃桃子】 尾递归与迭代

    大一时的一道C语言练习题,可作为递归和尾递归转迭代的范例.HDU 2013 http://acm.hdu.edu.cn/showproblem.php?pid=2013 题意:猴子摘了sum个桃子,从 ...

  2. 【POJ 3669 Meteor Shower】简单BFS

    流星雨撞击地球(平面直角坐标第一象限),问到达安全地带的最少时间. 对于每颗流星雨i,在ti时刻撞击(xi,yi)点,同时导致(xi,yi)和上下左右相邻的点在ti以后的时刻(包括t)不能再经过(被封 ...

  3. 梦游前端,JavaScript兼容性

    前端兼容问题出现的原因 何为操作系统?操作系统(Operating System)是管理和控制计算机硬件与软件资源的计算机程序.是的,任何的应用软件必须在操作系统的支持下运行. 大家会疑问?为什么我要 ...

  4. UbuntuOpenStack core componennts

    <1,keystone安装配置> 1,yum -y install openstack-keystone python-keystoneclient; 2,配置实用mysql存储keyto ...

  5. Hortonworks HDP Sandbox定制(配置)开机启动服务(组件)

    定制Hortonworks HDP开机启动服务能够这样做:本文原文出处: http://blog.csdn.net/bluishglc/article/details/42109253 严禁不论什么形 ...

  6. 如何实现在O(n)时间内排序,并且空间复杂度为O(1)

    对于常见的排序算法,很难做到在O(n)时间内排序,并且空间复杂度为O(1),这里提供了一种方法可以达到要求. 可以使用哈希排序的思想,也就是将所有的数哈希到哈希表中,实现排序.具体的算法思想是,求出这 ...

  7. CSS3 背景属性

    CSS3 background-size 属性 div {background:url(bg_flower.gif);-moz-background-size:63px 100px; /* 老版本的 ...

  8. UVA 12219 Common Subexpression Elimination

    题意: 求最小的表达式树,也就是把相同的表达式子树给替换成最前面相同的编号. 分析: 用map<string,int>smp;存放子树对应的字符串,如果以后出现相同的子树则用相同编号表示. ...

  9. Oracle如何禁止并行

    PURPOSE -------   To explain how to disable Parallel Execution on Session/System level     SCOPE &am ...

  10. iOS开发那些事儿(六)Git分之策略

    git 分支策略 将要介绍的这个模型不会比任何一套流程内容多,每个团队成员都必须遵守,这样便于管理软件开发过程. 既分散又集中 我们使用的,且与这个分支模型配合的非常好的库,他有一个“真正”的中央仓库 ...