Chinaunix首页 | 论坛 | 博客
  • 博客访问: 34368
  • 博文数量: 19
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 185
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-08 17:27
文章分类

全部博文(19)

文章存档

2016年(5)

2015年(14)

我的朋友

分类: JavaScript

2015-12-14 16:03:58

手机页面设计稿一般是640px,但是,手机屏幕大小确是不确定的,想做出适应所有手机的手机页面解决方案有两种,rem布局和百分比布局。
这里介绍用rem布局来制作手机页面:
rem是css3中新增加的一个单位值,他和em单位一样,都是一个相对单位。不同的是em是相对于元素的父元素的font-size进行计算;rem是相对于根元素html的font-size进行计算。

js设置不同手机屏幕下html font-size的大小:

原理:首先根据设计稿的宽度和默认的字体大小(一般是100px)计算出一个比例rem,

   然后用js根据默认最大屏幕宽度(一般是640px)和当前设备宽度算出需要缩放的倍数,根据这个倍数值改变html默认的字体大小。

例:

设默认最大屏幕宽度(最大屏宽)为640px, 默认字体大小(默认fz)为100px, 设默认设计稿宽(默认物宽)为106px

则:rem=默认物宽/默认fz=106/100=1.06rem

设当前屏宽320px, 当前设计稿宽(当前物宽)为x, 当前字体大小(当前fz)为y

则:默认物宽/默认fz==当前物宽/当前fz=x/y=1.06rem , 

     最大屏宽/当前屏宽=默认物宽/当前物)=640/320=106/x

解:y=(106*320)/(640*1.06rem)=(100*320)/640=50 , 即 当前fz=(默认fz*当前屏宽)/默认屏宽

js代码:

点击(此处)折叠或打开

  1. <script>
  2.     new function() {
  3.         var _self = this;
  4.         var deviceWidth = (window.innerWidth > 0) ? window.innerWidth : screen.width;
  5.         console.log(deviceWidth); //hack某些浏览器获取手机屏幕宽度
  6.         _self.width = 640;
  7.         _self.fontSize = 100;
  8.         _self.actualWidth = function() {
  9.             if (_self.width < deviceWidth) {
  10.                 return _self.width;
  11.             } else {
  12.                 return deviceWidth;
  13.             }
  14.         };
  15.         document.getElementsByTagName("html")[0].setAttribute("style", "font-size:" + (_self.actualWidth() * _self.fontSize) / _self.width + "px !important");
  16.     };
  17. </script>


 sass中rem的使用:

在CSS中,实现px和rem转换非常简单,但每次使用都需进行计算,所以接下来介绍如何使用Sass实现px和rem之间的计算。

通过@function来实现px转为rem计算:

点击(此处)折叠或打开

  1. @function rem($px) {
  2.     @return $px * 1px / $browser-default-font-size * 1rem;
  3. }

在需要转换时调用函数:height: rem(106);


html中rem的使用:

div和元素的宽高,字体的大小和背景图片都可以用rem
如:

点击(此处)折叠或打开

  1. .close{
  2.     width: rem(50);
  3.     height: rem(50);
  4.     font-size: rem(30);
  5.     background:url(../../images/tikuweixin/icon.png) no-repeat ;
  6.     background-size:rem(90) rem(90);
  7.     background-position: rem(-174) rem(-54);
  8. }
但有一点要注意的是rem产生的小数像素问题,这个问题会导致背景图被裁掉一小部分,解决方法是切图时为背景图片留下一定的空白间隙


阅读(1106) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~