计量单位的使用
CSS 的计量单位有三种选择:
px: 固定的相素值
em: 相对父级元素的 font-size 设置来作为当前元素 1em 所代表的像素值, 如父节点的 font-size:10px, 当前节点的 font-size:1.2em, 则当前节点的 font-size 实为 12px;
rem: 相对根节点 html 的 font-size 设置来作为当前元素 1rem 所代表的像素值, 与 em 的区别就是 rem 的基本度量单位与父节点无关, 只与根节点 font-size 的设置有关, 如设置 html{font-size:10px;}后当前 dom 所有节点的 1rem 都表示 10px;
移动端开发中我们使用 rem 作为基本计量单位, 同时将根节点默认字号大小设为 font-size:62.5%, 因移动端浏览器默认字号大小为 16px;16*62.5% 刚好为 10px; 具体设置方法及使用示例
- html{font-size:62.5%;/* 刚好为 10px;*/}
- #example{font-size:1.2rem}/* 设置 #example 的字体大小为 12px;*/
- #example div{font-size:1.4rem; width:10rem;height:10rem}/* 设置 #example 子节点 div 的字体大小为 14px; 宽度为 100px; 高度 100px*/
安卓下 < textarea > 标签的内容字体大小不支持 rem 设置, 如有需要使用响应式及 px 单位设置其字体大小, 暂时还未找到具体原因
不同分辨率的终端
在对主流手机终端进行统计得出, 大部分手机的 device-width 为 320px,360px,375px,384px,400px,414px, 另外安卓 pad 的 device-width 为 600px\800px. 手机屏幕分辨率宽度则在 320px-1080px 间, 有少部分手机已经达到 1152px 和 1440px.PS:ipad 访问移动端建议跳转去对应的 PC 页面.
viewport 设置
在移动端开发中, 我们使用如下 viewport 设置
- <!--viewport 的设置 -->
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
注: device-width 实际上并不等于设备宽度, 而是 css 宽度, 它是根据设备屏幕宽度和屏幕像素密度换算得出的用于网页显示的 css 宽度
移动端设计稿 750px*1134px 的制作规范
css 部分
- /*reset.less*/
- /* CSS Document */
- html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%; font-size:62.5%;}
- ul,li,div,p,body,h1,h2,h3,h4,h5,h6,dl,dt,dd{margin:0;padding:0;}
- li{list-style:none;}
- a{text-decoration:none; color: #2a2a2a; }
- input{ -webkit-appearance:none;outline:none}
- *{outline: none; webkit-focus-ring-color: rgba(0, 0, 0, 0);-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;}
- .hide{display:none;}
body, html {width: 100%; font-family: "Microsoft YaHei","Helvetica Neue",Arial, HelveticaNeue, Helvetica, "BBAlpha Sans", sans-serif;font-weight: normal;display: -webkit-box;-webkit-box-orient: vertical; -webkit-box-align: center;}
- /* *{-webkit-backface-visibility: hidden;-moz-backface-visibility: hidden;-ms-backface-visibility: hidden;backface-visibility: hidden;} 用于解决某些情况下出现闪屏的问题, 若无则不加 */
- body{opacity: 1;-webkit-transition:opacity 500ms ease-in;transition:opacity 500ms ease-in; }
- p,a,li{font-size:1.2rem; color:#434343}
- html{ font-size: 312.5%; }
- @media screen and (max-width:359px) and (orientation:portrait) {
- html { font-size: 266.67%; }
- }
- @media screen and (min-width:360px) and (max-width:374px) and (orientation:portrait) {
- html { font-size: 300%; }
- }
- @media screen and (min-width:384px) and (max-width:399px) and (orientation:portrait) {
- html { font-size: 320%; }
- }
- @media screen and (min-width:400px) and (max-width:413px) and (orientation:portrait) {
- html { font-size: 333.33%; }
- }
- @media screen and (min-width:414px) and (max-width:431px) and (orientation:portrait){
- html { font-size: 345%; }
- }
- @media screen and (min-width:432px) and (max-width:479px) and (orientation:portrait){
- html { font-size:360%; }
- }
- @media screen and (min-width:480px)and (max-width:639px) and (orientation:portrait){
- html{ font-size:400%;}
- }
- @media screen and (min-width:640px) and (orientation:portrait){
- html{ font-size:533.33%;}
- }
例如 750px 设计稿上 320px*200px 字体大小为 32px 的区域样式为:
- html{ font-size: 312.5%; }
- .div{
- width:3.2rem;
- height:2rem;
- font-size:0.32rem
- }
js 部分
主要处理短屏下缩放, 以及初始化时固定页面大小, 防止竖屏下弹出键盘或横屏时页面发生缩放的情况
- var initScreen=function(callback){// 初始化 html font-size
- $("html").css("font-size",document.documentElement.clientHeight/document.documentElement.clientWidth<1.5 ? (document.documentElement.clientHeight/603*312.5+"%") : (document.documentElement.clientWidth/375*312.5+"%")); // 单屏全屏布局时使用, 短屏下自动缩放
- //$("html").css("font-size",document.documentElement.clientWidth/375*312.5+"%");// 长页面时使用, 不缩放
- if(callback)callback();
- }
- function _onorientationchange(e){
- if(window.orientation==90||window.orientation==-90){
- $("#forhorview").css("display", "-webkit-box"); // 显示竖屏浏览提示框
- }else{// 竖屏下恢复默认显示效果
- var st=setTimeout(initScreen,300);
- $("#forhorview").css("display", "none");
- }
- _resize(e);
- }
- $(function(){
- initScreen();
- window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", function(e){_onorientationchange(e);}, false);
- })
html 示例
- <!doctype html>
- <html>
- <head>
- <title > 标题</title>
- <meta name="keywords" content="关键字" />
- <meta name="description" content="描述" />
- <meta name="format-detection" content="telephone=no" />
- <meta name="format-detection" content="address=no" />
- <!--for baidu 识别移动端页面并禁止百度转码 -->
- <meta name="applicable-device"content="mobile">
- <meta http-equiv="Cache-Control" content="no-transform" />
- <meta http-equiv="Cache-Control" content="no-siteapp" />
- <!--viewport 设置, 如果页面实际情况不允许缩放请加上, user-scalable=no-->
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
- <meta name="apple-mobile-web-app-capable" content="yes" />
- <link rel="stylesheet" type="text/css" href="css/index.less" />
- </head>
- <body>
- <div id="forhorview">
- <p > 推荐使用竖屏浏览哦~</p>
- </div>
- <script src="js/zepto.min.js"></script>
- </body>
- </html>
移动端开发细节和优化
在移动端使用新的 css3 样式代替原来在 PC 上的开发习惯
新的布局实现方式: 使用 display:box,box-flex 代替 float\display:inline-block; 实现更强大, 更完美的流体布局, 尤其在宽度为 100% 的布局中, 实现横向并排元素宽度的自动伸缩以及水平垂直居中平均分布, 首尾分布排列等.
垂直居中的实现方式: 使用 display:-webkit-box;-webkit-box-align: center; 实现垂直居中.
尽量使用 border-radius,box-shadow,text-shadow 等 css3 样式实现诸如圆角, 渐变色, 盒子投影, 字体投影, 减少使用图片.
对于单色的 icon 图标, 我们将会整理出一套常用图标, 并制作成字体, 利用 css3 的 @font-face 使用自定义字体导入, 这样的话, 可以像修改字体一样随意地修改图标的颜色, 大小, 背景色, 特殊效果 (如投影) 等, 而不再需要每一种颜色就需要切一份图片.
利用 - webkit-transform:rotate(90deg)来获取旋转了不同角度的 icon, 避免每个角度需要切一张图片
在动画中, 利用 css3 动画属性如 - webkit-transform:translate(10px,12px)来改变元素的偏移位置, 减少使用 left 和 top 来做位移动画
来源: http://www.jianshu.com/p/650819820c86