响应式网页开发

响应式布局

  • 什么是响应式布局?
    • 可以让一个网站兼容不同分辨率设备的布局
  • 为什么要使用响应式布局?
    • 给用户更好的视觉使用体验
  • 怎么使用响应式布局?
    • CSS3-Media Query(媒体查询),推荐使用,最简单
    • 借助原生javascript ,不推荐使用,成本太高
    • 第三方开源框架,如:bootstrap是一个响应式布局应用的框架

响应式设计的原则

  • 移动优先:
    • 在设计初期就要考虑页面在多终端上展示(优先)
    • 传统网页再改移动端有些功能会损失,难度也比较大
  • 渐进增强:保证基本功能,再发挥设备支持的最大功能
  • 优雅降级(推荐)
    • 充分发挥硬件设备的最大功能(能支持最新技术的浏览器就使用最新的技术,不能最新技术的浏览器就降级或使用hack技术)

响应式网站设计理念

响应式网站是一个设计理念,它是多项技术的综合体

网站能够自动切换以适应不同分辨率,图像大小和脚本。他应该有一个灵活的网格和布局,图像和CSS能够智能的组合 使用

应用技术

1.flexible grid layout 弹性网格布局

2.flexible image 弹性图片

3.media queries 媒体查询

响应式网站的优点

  • 减少工作量
  • 节省时间
  • 适配所有设备
  • 搜索优化
  • 统计用户访问流量

响应式网站的缺点

  • 会加载更多的样式和脚本资源
  • 设计比较难精准定位和控制
  • 老版本浏览器兼容不好

该如何实现?

  • 图片:如何根据设备不同的分辨率及屏幕大小来加载对应的图片?

    • 思维:标签的data属性
    <img src="small.jpg" data-full="larger.jpg">
    
    <!--也可以使用picture 标签,但是浏览器兼容性不好,需要使用picturefill.min.js-->
    <div class="item">
          <picture>
          <source srcset="img/ad001-l.png" media="(min-width:50em)">
          <source srcset="img/ad001-m.png" media="(min-width:30em)">
          <img src="img/ad001.png" alt="2015年度报告">
          </picture>
    </div>
    
  • 视口:禁用图片的自动缩放

    <meta name="viewport" content="width=device-width; initial-scale=1.0">
    

  • 打造布局结构:不同设备的屏幕尺寸差异过大时应加载不同的样式文件以适配不同的结构或使用CSS media query。

    我们可以使用一个默认主样式表来定义页面的主要结构元素,比如#wrapper、#content、#sidebar、#nav等的默认布局方式,以及一些全局性的配色和字体方案。

    我们可以监测页面布局随着不同的浏览环境而产生的变化,如果它们变的过窄过短或是过宽过长,则通过一个子级样式表来继承主样式表的设定,并专门针对某些布局结构进行样式覆写。我们来看下代码示例:

    下面的代码可以放在默认主样式表style.css中:

    /* 大众化使用时的默认样式 */
    html,body{
       background...
       font...
       color...
    }
    h1,h2,h3{}
    p, blockquote, pre, code, ol, ul{}
    /* 主要结构样式 */
    #wrapper{
        width: 80%;
        margin: 0 auto;
        background: #fff;
        padding: 20px;
    }
    #content{
        width: 54%;
        float: left;
        margin-right: 3%;
    }
    #sidebar-left{
        width: 20%;
        float: left;
        margin-right: 3%;
    }
    #sidebar-right{
        width: 20%;
        float: left;
    }
    
    /* 下面代码可以放在子级样式表mobile.css中,专门针对移动设备进行样式覆写: */
    #wrapper{
        width: 90%;
    }
    #content{
        width: 100%;
    }
    #sidebar-left{
        width: 100%;
        clear: both;
        /* 不同设备上可以附加适合的样式 */
        border-top: 1px solid #ccc;
        margin-top: 20px;
    }
    #sidebar-right{
        width: 100%;
        clear: both;
        /* 不同设备上可以附加适合的样式 */
        border-top: 1px solid #ccc;
        margin-top: 20px;
    }*/
    

    大致的视觉效果如下图所示:

css.jpg
  • media query(媒体查询)

    CSS3支持CSS2.1所支持的所有媒体类型,例如screen、print、handheld等,同时添加了很多涉 及媒体类型的功能属性,包括 max-width(最大宽度)、device-width(设备宽度)、orientation(屏幕定向,横屏或竖屏)和color。

    在CSS3发布 之后出现的新玩具,如iPad或Android相关设备,都可以完美的支持这些属性。所以我们可以通过media query为新设备设置独特的样式,而忽略那些不支持CSS3的台式机中的旧浏览器。

    media query使用实例:屏幕宽度不超过480px,则加载shetland.css样式表。

    <link rel="stylesheet" type="text/css"  media="screen and (max-device-width: 480px)"    href="shetland.css" />
    

    我们可以创建多个样式表,以适应不同设备类型的宽度范围。但更有效率的做法是,将多个media queries整合在一个样式表文件中,减少请求数量。如下:

    /* CSS2.1与CSS3都支持的代码 */
    /* 智能手机 ----------- */
    @media only screen
    and (min-device-width : 320px)
    and (max-device-width : 480px) {
    /* Styles */
    }
    
    /* 或 ----------- */
    @media only screen
    and (min-width : 321px) {
    /* Styles */
    }
    
    /* 或 ----------- */
    @media only screen
    and (max-width : 320px) {
    /* Styles */
    }
    
  • 可以使用媒体查询过滤屏幕尺寸

    
    
  • 使用代码加载样式

    <script type="text/javascript" src="../jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $(window).bind("resize", resizeWindow);
            function resizeWindow(event) {
                var newWindowWidth = $(window).width();
                if (newWindowWidth < 600) {
                      // 手机
                    $("link[rel=stylesheet]").attr({href: "mobile.css"});
                } else if (newWindowWidth > 600) {
                      // 电脑
                    $("link[rel=stylesheet]").attr({href: "style.css"});
                }
            }
        });
    </script>
    

媒体查询详解

  • 外联CSS语法
  • 内嵌样式的语法
<style>
    body{
        background-color: pink;
    }

    /*内嵌式*/
    @media screen and (min-width: 992px){
        body{
            background-color: purple;
        }
    }
</style>

<!--外联式 : 外联式要在默认样式的后面-->
<link type="text/css" rel="stylesheet" href="media.css" media="screen and (max-width:480px)" />
<!-- 
css3的使用 

all : 可以省略不写,默认就是all
or  : 逻辑的操作符,代表或,只要匹配一个条件就是true
not :逻辑的操作符,代表非,
and : 逻辑的操作符,代表与,全部条件都要匹配才是true
only:逻辑的操作符, 代表仅仅,为了适配老版本的浏览器
-->
<!-- 1. --> 
@media all and (min-width:800px) and (orientation:landscape) {
    ...
}
等价于下面的
@media and (min-width:800px) and (orientation:landscape) {
    ...
}

<!-- 2. --> 
@media not all and (monochrome) {...}
等价于下面的
@media not (all and (monochrome)) {...}


<!-- 3. --> 
@media not screen and (color), print and (color) {...}
等价于下面的
@media not screen and (color) or print and (color) {...}
等价于下面的
@media (not (screen and (color))), print and (color) {...}

css3媒体属性

  • width : 视口宽度
  • height : 视口高度
  • device-width : 设备屏幕宽度
  • device-height : 设备屏幕高度
  • orientation : 检查设备处于横向还是纵向
  • aspect-ratio : 基于视口宽度和高度的宽高比(width/height) 如:16/9 , 4/3
  • device-aspect-ratio : 渲染表面的宽度,就是设备屏幕的宽度
  • color : 每种颜色的位数 bits 如 :min-color : 16位 ,8位
  • resolution : 检查屏幕或打印机的分辨率 如:min-resolution : 300dpi

viewport视口的概念

视口分 3 种

  1. 布局视口 960px ,布局视口不会被改变的
  2. 可视视口 即设备上可见的视口,使用手指缩放时改变的是可视视口的大小
  3. 理想视口 是指布局视口在一个设备上的最佳尺寸,便于使用浏览器浏览,阅读
<!--  指定下面的代码后,布局视口就成为理想视口,阅读体验会更好,网页不会出现被放到的效果 -->
<meta name="viewport" content="width=device-width"/>

<!--  还可以这样 -->
<meta name="viewport" content="width=device-width,
                               minimum-scale=1.0,   //最小的缩放比例
                               maximum-scale=1.0,   //最大的缩放比例
                               user-scalable=no     //禁用用户缩放
                               " />

响应式网站开发过程

1.分析页面结构

ui设计师根据需求文档做好ui设计图,前端拿到效果图后根据效果图进行页面分析,确定哪些部分可以复用,哪些不能复用。哪些内容是固定尺寸,哪些内容可以自适应等

2.依照设计原则

优先考虑优雅降级(渐进增强不太适合)

案例

案例1:改变浏览器的width加载不同的背景色

  1. media.html文件代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title> 媒体查询</title>
    
        <style>
            body{
                background-color: pink;
            }
    
            /*内嵌式*/
            @media screen and (min-width: 992px){
                body{
                    background-color: purple;
                }
            }
        </style>
    
        <!--外联式-->
        <link type="text/css" rel="stylesheet" href="media.css" media="screen and (max-width:480px)" />
    </head>
    <body>
    
    </body>
    </html>
    

  2. 外联文件media.css

    body{
        background-color: chartreuse;
    }
    

学习响应式开发的参考连接

http://gs.statcounter.com/ 可以按照国家来划分,浏览器使用率
http://caniuse.com/usage-table 浏览器使用统计, 面向世界
http://necolas.github.io/normalize.css/ 在保证各浏览器呈现一致的情况下,保留了各标签元素原有的特点
http://autoprefixer.github.io/ 自动补全各游览器前缀css代码
http://editor.method.ac/ 在线绘制SVG
https://icomoon.io/ 在线绘制SVG
http://dillinger.io/ markdown 文件在线编写
https://tinypng.com/ 图片压png
http://caniuse.com/ 查询属性、标签兼容性
http://www.genymotion.net/ 最快的安卓模拟器
http://owlcarousel.owlgraphic.com/ 幻灯片插件
https://modernizr.com/ 会主动检测浏览器对css3、HTML5等等功能性的支持情况。
http://browsehappy.com/ 最新游览器下载
http://www.browsersync.cn/ 各浏览器终端同步测试
http://browserhacks.com/ 各浏览器hack写法查询
https://github.com/aFarkas/html5shiv 让老版本浏览器支持HTML5新标签
https://github.com/scottjehl/Respond IE6-8支持媒体查询min/max-width特性
https://modernizr.com/ 检测浏览器是否支持某特性

链接:http://www.imooc.com/article/12343#parent_6

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,725评论 1 92
  • 笔记参考自《响应式Web设计:HTML5和CSS3实践》,2013年出版内容说不上最新。如下是全书的章的目录:第 ...
    于晓鱼阅读 914评论 0 1
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,727评论 0 2
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,301评论 0 11
  • 昨夜 独上高楼 见一片昏黄半月 梦中 故事起起伏伏 你的脸隐去 你的声音隐去 你的影子也隐去 一片昏黄半月 梦那么...
    罗什莲花阅读 218评论 0 1