最近接收了一份面试题,内容是移动端传播的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. Android面试题目及其答案

    转自:http://blog.csdn.net/wwj_748/article/details/8868640 Android面试题目及其答案 1.Android dvm的进程和Linux的进程, 应 ...

  2. ok6410驱动usb摄像头

    为了做图像处理,须要用摄像头,搜到实验室仅仅有一个摄像头,是国安的.详细參数在终端中看到: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGluZzEyM ...

  3. web api 文档声明

    namespaceHelloWebAPI.Controllers{     usingHelloWebAPI.Models;     usingSystem;     usingSystem.Coll ...

  4. mysql binlog解析概要

    1,dump协议: 根据数据库的ip+port创建socket,如果创建成功,说明链接建立成功,接下来是使用dump协议订阅binlog 链接建立成功之后,服务端会主动向客户端发送如下问候信息gree ...

  5. ChartConlrol二维图表类型

    WinForms Controls >Controls > Chart Control > Concepts > Creating Charts > 2D Chart T ...

  6. java中使用URLClassLoader访问外部jar包的java类

    很多时候 我们写的Java程序是分模块的,有很好的扩展机制,即我们可以为我们自己的java类添加插件,来运行将来某天我们可能开发出来的类,以下称这些类为插件类. 下边是一种简单的实现方法: Class ...

  7. Permutations,Permutations II,Combinations

    这是使用DFS来解数组类题的典型题目,像求子集,和为sum的k个数也是一个类型 解题步骤: 1:有哪些起点,例如,数组中的每个元素都有可能作为起点,那么用个for循环就可以了. 2:是否允许重复组合 ...

  8. nginx 学习笔记【持续更新...】

    1.如果在安装过程中出现以下错误 需要安装pcre库 解决方案:yum install pcre 2.如果nginx启动提示端口被占用,则停止该端口的服务再启动nginx,一般为httpd服务 解决方 ...

  9. Repeater控件实现数据绑定,并实现分页效果

    前台显示代码 <pre name="code" class="csharp"><asp:Repeater ID="Repeater1 ...

  10. LinkList的实现

    public class MyLinkedList<AnyType> implements Iterable<AnyType> { @Override public Itera ...