最近接收了一份面试题,内容是移动端传播的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. js LocalStorage

    此对象主要有两个方法:保存数据:localStorage.setItem(Key, value);读取数据:localStorage.getItem(Key);Key:表示你要存入的键名称,此名称可以 ...

  2. H264源码分析(二)

    原文出自http://blog.csdn.net/xfding/article/details/5476763(转载收集) (四)图像参数集语义 pic_parameter_set_rbsp( ) { ...

  3. opengl笔记——旋转,一段代码的理解

    重看:opengl笔记——OpenGL好资料备忘 在找到这段代码,对理解opengl旋转很有帮助 ... glPushMatrix(); // initialze ModelView matrix g ...

  4. iOS 各种传值方式

    属性传值 将A页面所拥有的信息通过属性传递到B页面使用 B页面定义了一个naviTitle属性,在A页面中直接通过属性赋值将A页面中的值传到B页面. A页面DetailViewController.h ...

  5. javascript如何判断访问网页的设备及是否支持触屏功能

    var system ={}; var p = navigator.platform; system.win = p.indexOf("Win") == 0; system.mac ...

  6. C#实现MD5字符串加密

    public string Md5Encrypt(string str, string str2) { byte[] result = Encoding.Default.GetBytes((str+s ...

  7. Fiddler 跟踪 手机页面数据包

    随着 HTML5 的急速增长,现在越来越多的人,开始涉及到移动终端的 Web 开发领域,但手机端始终没有 PC 端这么多的调试工具.即使 PC 端浏览器模拟 user-agent 进行开发,也可能会发 ...

  8. 导入已有的vmdk文件,发现网络无法连通

    把以前的节点都删除了,重新载入镜像.发现每一个都ping不同,ifconfig发现eth0端口都没有打开.. 解决: 进入: vim /etc/sysconfig/network-scripts/if ...

  9. VS2012 黑色护眼主题

    在黑色主题基础上,更改了字体 Ms Comic Sans 字号也增大了 附件中有两个 一个是原版主题下载自https://studiostyl.es/ 第二个是如下改完后的主题 vssettings. ...

  10. spark on yarn :state: ACCEPTED一直 出现

    今天运行spark on yarn 一直出现 16/09/20 18:40:41 INFO yarn.Client: Application report for application_147417 ...