-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rem自适应方案 #3
Comments
good job,解决了我周四的问题 |
实践所得——重构公众号首页
//规范在实现时可改
.test {
font-size: 12px#r; /* 转换为rem */
margin: 5px#nr; /* 不转换为rem */
}
.test-a {
font-size: 12px#22|34;
}
//自动生成以下代码,假设配置dpr: 1
.test-a { font-size: 12px; }
[data-dpr="2"] .test-a { font-size: 22px; }
[data-dpr="3"] .test-a { font-size: 34px; } |
good!很好的分享实践 |
为什么font-size和border不需要设置rem? |
@ousiri 这里主要是考虑后续我们希望能够直接通过工具生成rem或者font-size。 |
为什么咋 安卓上 布局会变大阿 怎么解决阿 |
@xrds 具体指哪里?详细描述下场景,展示和屏幕尺寸有关。 |
@herbertliu dpr的问题 第一次用不太了解。。。 谢谢 |
@xrds dpr本身是表示显示像素和物理像素的比。一般我们用的是2倍像素,这里借助data-dpr设置,来手动管理手机分辨率(再去掉了meta viewport二倍像素设置后)。根据这个data-dpr的设置,可以在css中设置对应的想要设置的值,如: |
@herbertliu 谢谢,河伯详细讲解 我现在已经有了大概的了解了。。。 |
好腻害,,,这能写个插件刁刁哒 |
background-position用rem定位雪碧图的话会出现偏差,请问你们是怎么处理了,是用px加dpr? |
@luckymore 插件我们看看尽快能否输出 |
@herbertliu 划擦O(∩_∩)O,,,河伯大爱无疆,期待 |
@qc-zhan 图片大小不是确定的么。。。为啥不用px定位,rem控制大小background-size。 |
@qc-zhan 图片问题@longyiyiyu回头再补充一下, 图片一般不用rem,直接用backgrunt-size 来解决 |
@luckymore 因为rem是比例的,会出现小数点(0.3px之类的),浏览器不支持的话,就会默认成1px |
@herbertliu 目前我自己的方案是用px,然后根据dpr控制background-size 和 background-position,不知你们是否也是这样,还是有更好的解决方案 |
@luckymore 河伯也说了rem是等比例的,雪碧图定位用rem的话,会出现错位的 |
@qc-zhan 有个疑问,,,按比例的话,div之类的宽高不会错位么 |
@luckymore 目前说的错位是我之前把background-position用rem方案会出现sprite图定位不准确。至于设置一个div之类的宽高没有什么错位的 |
@qc-zhan 我已经搞定啦,设置gulp.spritesmith的模板就可以了,公式如下:
|
Hi I am not interested to get emails from regarding your projects Thanks On Mon, Sep 14, 2015 at 7:03 PM, br notifications@github.com wrote:
|
@banrikun 简直太赞,看了你的文章了,学习了。目前完美解决这个问题,但目前只在几台手机测试过。 a {
display: block;
width: 28px;
height: 28px;
background-image: url('../img/icons-s1fc22bf1d4.png');
background-repeat: no-repeat;
background-position-y: 0;
background-position-x: -575px;
background-size: 2053px;
}
[data-dpr="2"] a {
width: 56px;
height: 56px;
background-size: 4106px;
background-position-x: -1150px;
}
[data-dpr="3"] a {
width: 84px;
height: 84px;
background-position-x: -1725px;
background-size: 6159px;
} 看了确实蛋疼。 |
1080*1920 |
@luckymore font-size是根据你自己的页面来,没有固定的值。一般按经验来算,采用1rem=10px(即html [font-size]为10px),比较好计算,宽度为:1080/10=108rem。不过这样一来,每个rem数字较大,这时采用1rem=40px(即html [font-size]为40px)。那么宽度为:1080/40=27rem,也是OK的。 |
河伯,我没表达清楚。。。 <html lang="en" data-dpr="2" style="font-size: 75px;"> 现在我不理解的是,我从拿到一个1080 × 1920设计稿开始,为它选择一个font-size基 ‘ s’ 来计算: .btn {
width: (300/s)rem;
heigth: (100/s)rem;
} 这其中的**’s‘**值是怎么确定的。。。有点白痴的问题呢😄 |
@luckymore 你说的是用那个js设置吧。首先根据iPhone6 375 × 627, 那么,实际开发中。从上面的分析可以看到,倍数是10,,针对1080 × 1920。1080->750(iphone6为例)->10rem;所以这里1rem=108px(这里指的是视觉稿1rem对应的108px)。因此针对,300 × 100的按钮。对应的rem为300/108=2.78rem。 另外,我们采用的是倍数是16,即:1rem=46.875px(iphone6为例),视觉稿中:1rem=67.5px。 |
|
说得很好 |
已经解决,应用这个js头部的它是需要去掉的,js会自动添加 demo:http://www.love85g.com/code/p { font-size: 12px; } /* dpr = 1 */ 下边两句为什么在我测试页面不起作用,求解 |
@majiang666 效果是什么样子?有测试路径吗? |
开发时,假如视觉稿宽度是640,则最好使用第二种方案,选择16作为因子,则比例为640/16=40。那么,页面所有的rem数值的换算公式为:在视觉稿中的px数值/40 这里为什么要使用16做为因子? 如果是640下设计稿,根字体计算出来为100,这样不是更好计算rem的大小吗? |
@git-lt 其实这里的用多少没关系的,而且计算这个可以通过插件来直接支持,开发仍然只需关注px,查看fis-parser-rem。 |
html 后面那个font-size可以动态取值的; |
@herbertliu 链接打不开404 |
@suming1016 OK了 |
没看到border怎么适配啊 |
H5自适应改造方案——rem方案
原理
之前我们H5页面使用的方案是设置viewport meta头,让浏览器帮我们把页面缩放,使得页面看起来好像是自适应。实际上这不是自适应,只是在中小屏设备上,看起来差距不大,问题不明显而已。
现在大屏高清设备流行,自适应的问题也越来越明显了。在大屏设备上,课程封面小,title被拉长,文字小,按钮扁等问题越来越突出,已经达到不能忍受的程度,因此需要一套自适应的方案。
页面缩放
在viewport meta头里,取消让浏览器自动缩放页面,页面的自适应由页面自身管理。
因为有dpr的问题,为了统一管理,让浏览器帮我们根据dpr缩小页面,比如dpr=2,就缩小0.5让页面统一处在dpr=1的环境中。
rem
rem是一个半相对单位,它相对的是html(或body)元素的font-size值,例如有html { font-size: 10px; },则1rem = 10px。
当html元素的font-size是根据设备宽度自适应时,使用rem的页面也就会有自适应的特性。
文字
根据以下两个原因,对于文字使用px:
没有浏览器帮助我们缩放页面,在高清设备里面需要我们手动对文字进行缩放,为了方便这个而不需要写media query,页面在计算html的font-size值的同时,会设置一个data-dpr的属性。这时文字的media query就可以这样写:
规范
在head头引入初始化js脚本,可以使用两种代码:
开发时,假如视觉稿宽度是640,则最好使用第二种方案,选择16作为因子,则比例为640/16=40。那么,页面所有的rem数值的换算公式为:在视觉稿中的px数值/40。
文字使用px单位,同时需要写media query,借助html元素上面的data-dpr属性,详见原理部分。
The text was updated successfully, but these errors were encountered: