移动端适配的三种方法之(二)深入了解媒体查询

前言:正好最近有时间,给移动端适配这里做一个整理,全面并且深入地重新去理解这些代码的含义,不再只是代码的搬运工,不再只会像之前一样复制粘贴,如果觉得对你有帮助,麻烦点个赞~~

关键词:移动端适配,@media~~......

正文:

一、基本定义

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

二、使用方法

1.语法:

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

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


在Media Query中如果没有明确指定Media Type,那么其默认为all,如:


另外在样式中,还可以使用多条语句来将同一个样式应用于不同的媒体类型和媒体特性中,指定方式如下所示。


三、媒体类型--mediatype
移动端适配的三种方法之(二)深入了解媒体查询_第1张图片
image.png
四、媒体功能
描述
aspect-ratio 定义输出设备中的页面可见区域宽度与高度的比率
color 定义输出设备每一组彩色原件的个数。如果不是彩色设备,则值等于0
color-index 定义在输出设备的彩色查询表中的条目数。如果没有使用彩色查询表,则值等于0
device-aspect-ratio 定义输出设备的屏幕可见宽度与高度的比率。
device-height 定义输出设备的屏幕可见高度。
device-width 定义输出设备的屏幕可见宽度。
grid 用来查询输出设备是否使用栅格或点阵。
height 定义输出设备中的页面可见区域高度。
max-aspect-ratio 定义输出设备的屏幕可见宽度与高度的最大比率。
max-color 定义输出设备每一组彩色原件的最大个数。
max-color-index 定义在输出设备的彩色查询表中的最大条目数。
max-device-aspect-ratio 定义输出设备的屏幕可见宽度与高度的最大比率。
max-device-height 定义输出设备的屏幕可见的最大高度。
max-device-width 定义输出设备的屏幕最大可见宽度。
max-height 定义输出设备中的页面最大可见区域高度。
max-monochrome 定义在一个单色框架缓冲区中每像素包含的最大单色原件个数。
max-resolution 定义设备的最大分辨率。
max-width 定义输出设备中的页面最大可见区域宽度。
min-aspect-ratio 定义输出设备中的页面可见区域宽度与高度的最小比率。
min-color 定义输出设备每一组彩色原件的最小个数。
min-color-index 定义在输出设备的彩色查询表中的最小条目数。
min-device-aspect-ratio 定义输出设备的屏幕可见宽度与高度的最小比率。
min-device-width 定义输出设备的屏幕最小可见宽度。
min-device-height 定义输出设备的屏幕的最小可见高度。
min-height 定义输出设备中的页面最小可见区域高度。
min-monochrome 定义在一个单色框架缓冲区中每像素包含的最小单色原件个数
min-resolution 定义设备的最小分辨率。
min-width 定义输出设备中的页面最小可见区域宽度。
monochrome 定义在一个单色框架缓冲区中每像素包含的单色原件个数。如果不是单色设备,则值等于0
orientation 定义输出设备中的页面可见区域高度是否大于或等于宽度。
resolution 定义设备的分辨率。如:96dpi, 300dpi, 118dpcm
scan 定义电视类设备的扫描工序。
width 定义输出设备中的页面可见区域宽度。
zebra stripes are neat
五、举两个例子

eg1:

@media only screen and (max-width: 500px) {
    .gridmenu {
        width:100%;
    }

    .gridmain {
        width:100%;
    }

    .gridright {
        width:100%;
    }
}

eg2:

@media screen and (min-width: 320px) and (max-width: 750px)
{
    body{
        margin:0 auto;
        width:320Px;
    }
    .left{
        margin:0 auto;
        width:320px;
        height:300px;
        background-color:#99FFCC;
    }
}
六、详细分析举例媒体属性:

[注意]媒体属性必须用括号()包起来,否则无效
1、颜色color:指定输出设备每个像素单元的比特值。如果设备不支持输出颜色,则该值为0。向所有能显示颜色的设备应用样式表:


2、颜色索引(color-index):颜色索引指定了输出设备中颜色查询表中的条目数量,如果没有使用颜色查询表,则值等于0,向所有使用至少256个索引颜色的设备应用样式表(下列代码无显示,说明返回值为0):

    

3、宽高比(aspect-ratio):宽高比描述了输出设备目标显示区域的宽高比。该值包含两个以“/”分隔的正整数。代表了水平像素数(第一个值)与垂直像素数(第二个值)的比例,向可视区域是正方形或者是宽屏的设备应用样式表:


4、设备宽高比(device-aspect-ratio):设备宽高比描述了输出设备的宽高比。该值包含两个以“/”分隔的正整数。代表了水平像素数(第一个值)与垂直像素数(第二个值)的比例,向宽高比为16:9的特殊宽屏设备应用样式表:


5、设备高度(device-height):设备高度描述了输出设备的高度,向显示在最小高度1000px的屏幕上的文档应用样式表:


6、设备宽度(device-width):设备宽度描述了输出设备的宽度,向显示在最小宽度1000px的屏幕上的文档应用样式表:


7、网格(grid):网格判断输出设备是网格设备还是位图设备。如果设备是基于网格的(例如电传打字机终端或只能显示一种字形的电话),该值为1,否则为0,向非网格设备应用样式表:


8、高度(height):高度描述了输出设备渲染区域(如可视区域的高度或打印机纸盒的高度)的高度,向高度大于800px的可视区域的设备应用样式表:


9、宽度(width):宽度描述了输出设备渲染区域的宽度,向宽度大于800px的可视区域的设备应用样式表:


10、黑白(monochrome):黑白指定了一个黑白(灰度)设备每个像素的比特数。如果不是黑白设备,值为0,向非黑白设备应用样式表:


11、方向(orientation):方向指定了设备处于横屏(宽度大于宽度)模式还是竖屏(高度大于宽度)模式,值:landscape(横屏) | portrait(竖屏),向竖屏设备应用样式表:


12、分辨率指定输出设备的分辨率(像素密度):分辨率可以用每英寸(dpi)或每厘米(dpcm)的点数来表示,向每英寸至少90点的设备应用样式:


七:方法:window.matchMedia()方法

window.matchMedia()方法用来检查CSS的mediaQuery语句
[注意]IE9-浏览器不支持,可以使用第三方函数库matchMedia.js:https://github.com/paulirish/matchMedia.js/
1)属性

  • window.matchMedia()方法接受一个mediaQuery语句的字符串作为参数,返回一个MediaQueryList对象。
  • 该对象有media和matches两个属性
media:返回所查询的mediaQuery语句字符串
matches:返回一个布尔值,表示当前环境是否匹配查询语句
var result = window.matchMedia('(min-width: 600px)');
console.log(result.media); //'(min-width: 600px)'
console.log(result.matches); // true

可以根据matchMedia()方法的matches属性的不同结果,进行对应的设置

var result = window.matchMedia('(min-width: 600px)');
if (result.matches) {
  //
}else{
 //
}

[注意]如果window.matchMedia无法解析mediaQuery参数,matches属性返回的总是false,而不是报错

var result = window.matchMedia('123');
console.log(result.matches);//false

2)事件
window.matchMedia方法返回的MediaQueryList对象有两个方法,用来监听事件:addListener方法和removeListener方法.

// 指定回调函数
mql.addListener(mqCallback);
// 撤销回调函数
mql.removeListener(mqCallback);

注意,只有mediaQuery查询结果发生变化时,才调用指定的回调函数,所以,如果想要mediaQuery查询未变化时,就显示相应效果,需要提前调用一次函数,下面这个例子是当页面宽度小于1000px时,页面背景颜色为品红色;否则为淡蓝色.

var mql = window.matchMedia("(min-width: 1000px)");
mqCallback(mql);
mql.addListener(mqCallback);
function mqCallback(mql) {
  if (mql.matches) {
    document.body.background = 'pink';
  }else{
      document.body.background = 'lightblue';
  }
}
八:打印的样式

媒体查询的一个常用功能是打印样式的设置,主要是背景清除、字体颜色变黑等

@media print{
    *,*:before,*:after{
        background:transparent!important;
        color:#000 !important;
        box-shadow: none !important;
        text-shadow: none !important;
    }
    a,a:visited{
        text-decoration: underline;
    }
    a[href]:after{
        content:"(" attr(href) ")";
    }
    abbr[title]:after{
        content:"(" attr(title) ")";
    }
    a[href^="#"]:after,a[href^="javascript:;"]:after{
        content:"";
    }
    pre,blockquote{
        border: 1px solid #999;
        /*只有opera浏览器起作用,避免在元素内部插入分页符*/
        page-break-inside:avoid;
    }
    thead{
        display:table-header-group;
    }
    tr,img{
        page-break-inside:avoid;
    }
    img{
        max-width:100%!important;
    }
    p,h2,h3{
        /*元素内部发生分页时,最少保留3行*/
        orphans:3;
        /*元素内部发生分页时,元素顶部最少保留3行*/
        windows:3;
    }
    h2,h3{
        /*避免在元素后面插入一个分页符*/
        page-break-after:avoid;
    }
}

参考资料:深入理解CSS Media媒体查询 https://www.cnblogs.com/xiaohuochai/p/5848612.html

你可能感兴趣的:(移动端适配的三种方法之(二)深入了解媒体查询)