CSS 最佳实践 + 套路(四) -- 移动端适配

脚本实现自动创建移动端适配的相关文件

概述

手机上显示网页是将整个网页缩小,模拟页面宽度 980px ,可以使用 document.documentElement.clientWidth 来获取到页面宽度为 980px。在移动端加上 <meta> 标签才是自适应,否则就是 980px ,即网页整体缩小。

meta 标签

<meta name=' viewport ' content=' width=device-width user-scalable=no initial-scale=1.0 maximum=1.0 minimum-scale=1.0 '>

说明:

  • width=device-width ==> 网页宽度默认等于屏幕宽度
  • user-scalable=no ==> 用户是否可以缩放
  • initial-scale=1.0 ==> 原始缩放比例为 1.0 ,即网页初始大小占屏幕面积的 100%
  • maximum=1.0 ==> 最大缩放比例
  • minimum-scale=1.0 ==> 最小缩放比例

<meta> 标签可以防止手机模拟 980px,防止页面在用户双击的时候放大和防止用户横屏

Media Query (媒体查询)模块

由一个可选的媒体类型和零个或多个使用媒体功能的限制了样式表范围的表达式组成,即对媒体进行某些条件的查询

  1. 目前来说只用两种模式 :

    • 移动端
    • PC 端
  2. 两种技术:

    • mobiles-first ==> 先做移动端页面后做 PC 端页面(推荐)
    • desktop-first ==> 先做 PC 端页面后做移动端页面
  3. 两种方案:

    • 移动端和 PC 端分别跳转不同网站(京东、淘宝)
    • 渲染不同的 HTML+CSS(知乎)

<link> 元素中的 CSS 媒体查询

满足查询条件,则生效,否则不生效。但是无论生效与否都会下载

<link rel="stylesheet" media="(max-width: 800px)" href="example.css" />

样式表中的CSS媒体查询

满足查询条件,则生效,否则不生效。

<style>
@media (max-width: 600px) {
  .facet_sidebar {
    display: none;
  }
}
</style>

操作符

  • and 操作符 ==> 把多个媒体属性组合成一条媒体查询,对成链式的特征进行请求,只有当每个属性都为真时,结果才为真
(min-width: 700px) and (max-width: 960px) { ... }
  • 逗号分隔列表 ==> 使用逗号分隔效果等同于or逻辑操作符。当使用逗号分隔的媒体查询时,如果任何一个媒体查询返回真样式就是有效
@media (min-width: 700px), handheld and (orientation: landscape) { ... }
  • not 操作符 ==> 应用于整个媒体查询,在媒体查询为假时返回真

  • only 操作符 ==> 防止老旧的浏览器不支持带媒体属性的查询而应用到给定的样式

<link rel="stylesheet" media="only screen and (color)" href="example.css" />

说明:若使用了not或only操作符,必须明确指定一个媒体类型。

媒体特征

  • device-width ==> 设备宽度
  • width ==> 宽度。描述了输出设备渲染区域的宽度。接受 mix/min 前缀

响应式

响应式即不同的屏幕得到不同的样式

长度单位

  • px ==> 绝对长度单位,像素
  • em ==> 相对长度单位,这个单位表示元素的 font-size 的计算值
  • rem ==> 相对长度单位,这个单位代表根元素(<html>)font-size 大小
    说明:网页默认的 font-size: 16px
  • vh ==> viewport hight,相对长度单位,视口高度的 1/100。
  • vw ==> viewport width,相对长度单位,视口宽度的 1/100。
    说明:vh 和 vw 的兼容性比较差,使用较少

动态 REM

由于手机上分辨率太多,不是做响应式,只能退而求其次

  • 百分比布局:高度问题,宽度不知道具体大小,仅仅知道百分比。造成了宽度不确定导致高度和宽度不能做任何配合
  • 动态REM:一切单位以宽度为基准(vw 啊,但是 vw 兼容性较差),退而求其次:rem

rem ==> html font-size =(JS实现)=> page width(页面宽度)

<head>
    <script>
        var pageWidth = window.innerWidth
        document.write( '<style>html{font-size:' + pageWidth/10 + 'px;}</style>' )
    </script>
    <style>
        body{
            font-size: 16px;
        }
    </style>
</head>

将 rem 变为 pageWidth/100 即可以表示 vw(视口宽度的 1/100),Chrome 浏览器默认最小字号 12px,此时的 font-size 被 Chrome 浏览器强制为 12px。所以将 rem 变为 pageWidth/10 。

最佳实践 & 套路

SASS 实现将 px 自动变为 rem

LUNIX 安装SASS
SASS 文件内容

@function px( $px ){
  @return $px/$designWidth*10 + rem; // 此处的 10 是 html{font-size:' + pageWidth/10 + 'px;} 中的10 
}
$designWidth : 640; // 640 是设计稿的宽度,需要根据设计稿的宽度填写

相关知识点

  1. 移动端中没有 hover 事件,但是有 touch 事件
  2. 移动端中没有 resize 事件,并且没有滚动条(隐藏滚动条)
  3. 使用相对大小的字体 rem
  4. 流动布局,各个区块都是浮动的
  5. 选择加载 CSS ,Media Query 模块(CSS3)自动探测屏幕宽度,然后加载相应的 CSS 文件
  6. CSS 的 @media 规则
  7. 图片自适应 max-width: 100%;
  8. 很小很小的地方使用 px ==> 1px
  9. rem 单位和其他单位混用,例如:font-size: 16px
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,741评论 1 92
  • 写在前面 本文参考了大量关于移动端适配的资料 侵删 谢谢 基础介绍 在说明移动端的适配之前我们需要理解一个重要的东...
    熊蛋子17阅读 743评论 1 3
  • 响应式布局的实现依靠媒体查询( Media Queries )来实现,选取主流设备宽度尺寸作为断点针对性写额外的样...
    iyimao阅读 539评论 0 0
  • 我们第一次接触移动web的时候,直观印象样应该是:屏幕比pc小很多,所以对pc端设计的界面,不一定(或者说不完全)...
    Scaukk阅读 16,835评论 6 46
  • 我知道,你一直都在,从未走开。 我知道,你很害怕。 我知道,你很孤单。 我知道,你一直在压抑着...
    爱自满溢阅读 194评论 0 0