zoukankan      html  css  js  c++  java
  • 响应式开发

    现在屏幕分辨率的范围很大,从 320px (iPhone) 到 2560px (大型显示器),甚至更大。用户也不只是使用台式电脑访问web站点了,他使用手机、笔记本电脑、平板电脑。所以传统的设置网站宽度为固定值,已经不能满足需要了。web设计需要适应这种新要求,页面布局需要能够根据访问设备的不同分辨率自动进行调整。这也就是页面的响应式设计。

    一、媒体查询

    响应式设计,主要用到的技术就是媒体查询。
    使用@media查询,你可以针对不同的媒体类型定义不同的样式。
    @media可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@media 是非常有用的。
    当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。

    比如下面这段代码,新建一个html文件将代码粘贴过去,打开后缩小浏览器窗口的宽度,观察背景颜色的变化,这就是一个典型的媒体查询:

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <style>
        body {
            background-color:lightgreen;
        }
        
        @media screen and (max- 500px) {
            body {
                background-color:lightblue;
            }
        }
        </style>
    </head>
    <body>
        <p>重置浏览器查看大小。当浏览器窗口的宽度小于 500 像素时,背景颜色会变成淡蓝,否则是淡绿色。</p>
    </body>
    </html>
    

    1、CSS 语法

    @media mediatype and|not|only|or (media feature) {
        CSS-Code;
    }
    

    你也可以针对不同的媒体使用不同 stylesheets :

    <link rel="stylesheet" media="mediatype and|not|only (media feature)" href="mystylesheet.css">
    

    2、媒体类型

    描述
    all 用于所有设备
    print 用于打印机和打印预览
    screen 用于电脑屏幕,平板电脑,智能手机等
    speech 应用于屏幕阅读器等发声设备

    all可以不写,如果不写默认就为all

    3、运算符

    运算符有:andnotonly、和or,这里不多介绍。
    重点说一下only

    先说结论:当只针对某一个设备去应用媒体查询的话,最好带上only
    因为only的作用就是:防止老旧的浏览器,不支持带媒体属性的查询,而应用到给定的样式。

    比如下面的两句媒体查询:

    image_1c7diui1f1c7sjeg691quo1fog4e.png-125.4kB

    虽然两句含义都是一样,仅仅是一个only的区别,但如果在老浏览器中,不支持媒体查询,则会在第一个空格处把后面的文字都给忽略掉,只会解释到第一个单词。
    这样一来,第一句话得到的结果就是:only,样式不被应用,因为没有一个叫only的设备;
    第二句话则是:screen,不管后面的条件是怎么写的,对于老浏览器来说,都会应用这段样式。

    4、常用的媒体属性

    描述
    width 视口宽度
    height 视口高度
    device-width 渲染表面的宽度,就是设备屏幕的宽度
    device-height 渲染表面的高度,就是设备屏幕的高度
    orientation 检查设备处于横向还是纵向
    aspect-ratio 基于视口宽度和高度的宽高比,如:16/9, 4/3
    device-aspect-ratio 定义输出设备的屏幕可见宽度与高度的比率
    color 每种颜色的位数bits,如:min-color:16位、8位
    resolution 检测屏幕或打印机的分辨率。如:96dpi, 300dpi, 118dpcm

    以上属性都可以添加 min- max- 前缀。

    这里只是介绍常用,完整的看这里

    5、viewport 视口(视口宽度和设备宽度的区别)

    桌面浏览器只有一个视口,这个视口就是浏览器主窗口的区域。

    image_1c7dk6istqqp175412je1eirocs4r.png-78.5kB

    但是到了手机浏览器,却有了三个视口的概念:布局视口、可视视口、理想视口。

    image_1c7dkgl1r1pmh1mr8f4uv21ekr58.png-298.5kB

    简单来说,用户通过对手机屏幕的缩放,可以改变可视视口,但是布局视口是不会变的。这两个视口只需了解其概念就好,因为我们不能对其做任何操作。

    而理想视口,就是布局视口在一个设备上的最佳尺寸。理想视口下的页面便于浏览器浏览、阅读。

    因此:理想视口就是为构建手机浏览器优化的页面而添加的。

    使用理想视口
    在html页面上添加下面的标签:

    <meta name="viewport" content="width=device-width" />
    

    表示手机使用理想视口,这个理想视口的宽度等于手机布局视口的宽度,这时候布局视口就成为了理想视口。
    用户不需要再缩放,就可以把整个页面展示出来了。
    甚至很多网站直接禁用了用户的缩放,默认放大倍数为1.
    比如百度就是这么做的:

    <meta name="viewport" content="width=device-width, 
        minimum-scale=1.0, 
        maximum-scale=1.0, 
        user-scalable=no" />
    

    将最小的缩放比例、最大的缩放比例设置为1,且禁用了用户缩放。

    二、响应式网站设计实践原则

    1、分析设计图

    通过观察设计稿,观察每一个模块在大屏幕、中屏幕、小屏幕中的变化,然后为中等屏幕、小屏幕选择合适的断点,然后为其分别写样式。

    2、断点确定的原则和方式

    断点就是媒体查询中的临界点,一般来说,媒体查询最常用的属性就是宽度,而宽度数值的选择,决定了响应式设计的临界点。这个宽度的数值,就是断点。

    最好不要为某种移动设备指定断点(如为iPhone5、iPhone6单独指定断点),而应该是对屏幕的大小进行分割,如下:

    image_1c7dmaio1qsd3en1mfo1gmc1dsum.png-72.3kB

    确定完断点之后,然后就是写三段媒体查询,比如在顶部导航的css下方,写三段媒体查询:

    image_1c7d4o445v0ivv91ji0glg2u2q.png-147.3kB

    需要注意的是,如果屏幕宽度小于480px,那么第一段的样式(屏幕宽度<=800px的样式)也会被继承,会被应用到页面上,但是第二段样式则不会。

    然后在浏览器中打开开发者工具,选择移动设备,切换到『Responsive』,也就是进入到响应式调试模式,拖动窗口大小观察变化。

    谷歌浏览器中,还可以显示标尺和媒体查询,方便调试:

    image_1c7d53uq91o0dk791vhfrn11do937.png-50kB

    3、选择媒体查询单位

    回到上面的三段媒体查询

    image_1c7d4o445v0ivv91ji0glg2u2q.png-147.3kB

    这里的断点单位,使用的是绝对的像素值,但是在样式的撰写中,我们优先使用相对的单位:em或者rem。使用相对单位的好处,就是用户可以自行调整文本的大小。其实用户通常有以下几种调整页面字体大小的方式:

    • 调整html的font-size,当然,用户很少会去调整这个,只有开发才回去调整;
    • 调整浏览器设置中的字号;
    • 缩放。

    用户在调整字体大小的同时,其实也就是改变了相对单位的参考值。之前我们设置的断点是800px,但是当用户将文字放大的时候,800px的情况下再进行换行或者缩小文字的间距,有可能就显得不够了,甚至造成文字换行的问题。

    那么,如果让断点随着文字的大小而变化,这样会不会更好呢?

    从用户的体验来说,如果断点可以相对的变化,是比较好的,不过这个也不绝对。
    如果网站针对特定的分辨率,确实有功能的不同,那么建议断点都设置为绝对的像素值;
    如果网站只是展示样式不同,但是功能都一样的话,那么媒体查询使用相对的长度单位,会让用户的体验变得更好。

    在这里,因为不同屏幕下没有功能上的区分,因此断点使用相对单位。

    image_1c7d70r4o1kj31hhg10k113vj1dlu3k.png-145.5kB

    4、px、em、rem

    在css文件中,首先设置一下基本默认值:

    html{
        font-size: 62.5%;
        color: #222;
    }
    

    一般现在字体颜色都不选择纯黑,多数是采用#222这种深灰色,看起来不会太费眼,也会雅致一些;
    那么font-size: 62.5%;的设置有什么作用?还需从下面三个单位说起:

    • px
    • em
    • rem

    px 固定的单位,不会因为页面的改变而发生变化,在以前做固定设计的时候,因为要100%还原设计稿,所以很多人喜欢使用px

    但是在响应式布局中,更多使用的是相对距离,而且很多东西会随着屏幕尺寸的变化而发生改变,所以不需要100%还原设计稿,设计稿是存在伸缩性的。所以在响应式设计中,使用emrem这种相对长度单位比较流行。

    em 相对的长度单位

    1. em相对参照物为父元素font-size
    2. em具有继承的特点,也就是如果父元素没有设置font-size,就会一直往上去找;
    3. 如果直到html节点,还是没有找到font-size,那么会使用浏览器默认的em设置:1em=16px;
    4. 缺点:容易混乱。因为依赖父元素的字体大小,不同父元素的字体尺寸不一定是一样的,有时会带来布局上的不确定性。

    rem 相对的长度单位

    1. rem的相对参照物为根元素html,与父元素无关,只根据htmlfont-size设置;
    2. 如果html没有设置font-size,浏览器会有一个默认的rem设置:1rem=16px;
    3. 缺点:兼容性没有em好(其实大部分浏览器也都支持了,除了ie8)。

    em、rem与px换算
    font-size:100%时,1rem=16px, 1em=16px;
    font-size:62.5%时,1rem=10px, 1em=10px;

    怎么得出font-size:62.5%呢?其实就是:10/16*100%

    利用em、rem的特性,只需要改变html字体大小这一个值,就可以改变整个页面的字体、和各种宽度之间的大小。

  • 相关阅读:
    (转)JVM参数的说明、简单记法和GC调优策略
    深度学习论文翻译解析(十二):Fast R-CNN
    深度学习论文翻译解析(十一):OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks
    vue中组建的创建和使用
    CountDownLatch的理解和使用
    java多线程并发编程中对一些概念和关键字的理解
    spring中访问变量的用法
    mysql中group by优化
    vue中实现标题的国际化
    mysql中的覆盖索引,二级索引和索引排序
  • 原文地址:https://www.cnblogs.com/VitoYi/p/8520408.html
Copyright © 2011-2022 走看看