Skip to content

移动开发

常见分辨率

设备尺寸(英寸)物理分辨率开发尺寸(px)物理像素与CSS像素比(dpr)
iPhone 3GS3.5320*480320*4801
iPhone 4/4s3.5640*960320*4802
iPhone 5/5s4640*1136320*5682
iPhone 6/6s4.7750*1334375*6672
iPhone6 Plus/6s Plus5.51242*2208414*7363

viewport 视口

  • layout viewport 布局视口: 早期解决 pc 网页在手机上展示的问题, 一般是 980 px
  • visual viewport 视觉视口: 用户能看到的网站区域
  • ideal viewport 理想视口: 讲布局视口为视觉视口, 通过 meta 标签通知浏览器
html
"<meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">"

最标准的viewport设置

  • 视口宽度和设备保持一致
  • 视口的默认缩放比例1.0
  • 不允许用户自行缩放
  • 最大允许的缩放比例1.0
  • 最小允许的缩放比例1.0

移动端的特殊样式

css
/*CSS3盒子模型*/
 box-sizing: border-box;
 -webkit-box-sizing: border-box;
 /*点击高亮我们需要清除  设置为transparent 完成透明*/
 -webkit-tap-highlight-color: transparent;
 /*在移动端浏览器默认的外观在iOS上加上这个属性才能给按钮和输入框自定义样式*/
 -webkit-appearance: none;
 /*禁用长按页面时的弹出菜单*/
 img,a { -webkit-touch-callout: none; }

移动端常见布局

  • 流式布局: 也就是百分比布局
  • flex 弹性布局
  • less + res 媒体查询
  • 混合布局

百分比布局

vw vh

  • vw viewport width 视口宽度
  • vh viewport height 视口高度

flex 布局

https://ruanyifeng.com/blog/2015/07/flex-grammar.html

容器的属性

  • flex-direction:设置主轴的方向
    • flex-direction: row | row-reverse | column | column-reverse;
  • flex-wrap:设置子元素是否换行
    • `flex-wrap:nowrap | wrap | wrap-reverse;
  • flex-flow:复合属性,相当于同时设置了 flex-direction 和 flex-wrap
    • flex-flow: <flex-direction> || <flex-wrap>;
  • justify-content:设置主轴上的子元素排列方式
    • justify-content: flex-start | flex-end | center | space-between | space-around;
    • between 是左中右, around 是三等距
  • align-items:设置侧轴上的子元素排列方式(单行)
    • align-items: flex-start | flex-end | center | baseline | stretch;
  • align-content:设置侧轴上的子元素的排列方式(多行)
    • `align-content: flex-start | flex-end | center | space-between | space-around | stretch;

项目的属性

  • flex-grow: <number>; 项目的放大比例 (===占用剩余的比例===), 默认 0
    • 如果一个项目为 2, 其它为 1, 那么它占用剩余空间的比例是其它的两倍
  • flex-shrink: <number>; 项目的缩小比例, 默认为 1
    • 如果空间不足, 该项目将缩小.
    • 如果多个项目都为 1, 那么空间部足将等比缩小.
    • 如果一个为 0, 其它为 1, 那么空间不足, 为 0 的不缩小
  • flex-basis: <length> | auto; 在分配多余空间之前,项目占据的主轴空间,默认值 auto
    • 可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间
  • flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]; 是 flex-grow flex-shrink flex-basis 的缩写
    • 有两个快捷值 auto (1 1 auto) 和 none (0 0 auto), 建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值
  • order: int; 属性定义子项的排列顺序, 默认为 0, 数值越小, 越靠前
  • align-self: auto | flex-start | flex-end | center | baseline | stretch; 控制子项自己在侧轴的排列方式, 覆盖掉 align-items

rem 布局

root em 相对 html 根字体大小的百分比 根元素(html)设置font-size=12px; 非根元素设置width: 2rem; 则换成px表示就是24px

媒体查询

css
@media mediatype and|not|only (media feature) {
    CSS-Code;
}
  • 查询类型: all 所有设备 print 打印机 scree 电脑平板手机
  • 关键字 and not only 将媒体类型或多个媒体特性连接到一起做为媒体查询的条件
  • 特性: width min-width max-width

书写顺序: 从低分辨率到高(推荐), 或者从高到低.

css
/* 第一档x<540, 第二档540=<x<970, 第三档x>=970 */
@media screen and (max-width: 539px) {
    body {
      background-color: pink;
    }
}
@media screen and (min-width: 540px) {
    body {
      background-color: green;
    }
}
@media screen and (min-width: 970px) {
    body {
      background-color: green;
    }
}

/* screen and 不能省略 */
/* 媒体查询最好从小到大*/

淘宝的方案 flexible

有 vw vh, 不再需要了

10 等分, 每一份 rem 等于视口的 1/10 px

github地址:https://github.com/amfe/lib-flexible

  • 需要装 vscode 插件 cssrem 自动转换
less
/* 为了整体的效果更佳的美观,我们需要写死小于320px屏幕 大于750px 的字体大小  */
@media screen and (max-width: 320px) {
  html {
    font-size: 32px !important;
  }
}
@media screen and (min-width: 750px) {
  html {
    font-size: 75px !important;
  }
}

bootstrap 响应式布局

中文网: http://www.bootcss.com/

官网: http://getbootstrap.com/

推荐网站 http://bootstrap.css88.com/

栅格系统

特点:

  • 媒体查询从小到大写
  • 小屏幕的样式写了, 宽屏幕的样式没写, 切换到宽屏幕时会应用小屏幕的样式
  • 小屏幕的样式写了, 宽屏幕的样式也写了, 切换到宽屏幕时只会应用宽屏幕的样式

规则:

  • 按照不同屏幕划分为1~12 等份
  • 行(row) 可以去除父容器作用15px的边距
  • xs-extra small:超小; sm-small:小; md-medium:中等; lg-large:大;
  • 列(column)大于 12,多余的"列(column)"所在的元素将被作为一个整体另起一行排列
  • 每一列默认有左右15像素的 padding
  • 可以同时为一列指定多个设备的类名,以便划分不同份数 例如 class="col-md-4 col-sm-6"