Media query 媒体查询

<link rel="stylesheet" href="common.css">
<link rel="stylesheet" href="web.css">
<link media="(max-width: 750px)" rel="stylesheet" href="mobile.css">
屏幕快照 2018-04-24 下午1.22.21.png

CSS媒体查询允许我们基于浏览网站的设备的特性来应用不同的样式申明,最常用的特性是视口宽度。通过查询视口宽度,我们可以实现如下功能:站点默认为两列式布局,如果屏幕(适口)宽度超过40em,则变成三列式布局

1、媒体查询操作方式

实际操作为:对设备提出询问(称作表达式)开始,如果表达式结果为真,媒体查询中的CSS被应用,如果表达式结果为假,媒体查询内的CSS将被忽略。

2、媒体查询结构

@media only screen and (min-width:40em) {
         body { background-color:blue;}
}

2.1 @media

以@media开头来表示这是一条媒体查询语句。

2.2 screen

紧跟在@media后面的是一个或者多个表达式,可以判别为真或假。在创建媒体查询时,必须以媒体类型(此处为screen)作为第一个表达式:@media only screen。与媒体类型相对应的有:print(打印机)、braille(盲文)或者all(全部)等其他类型。

2.3 and

and是一个关键字,表示有多个表达式,screen是第一个表达式,and后为另一个表达式。需前后表达式都为真时,整条查询结果才为真(也就是“且”的意思)。与and相对应的关键字有:or、not等。

2.4 (min-width:40em)

and之后的(min-width:40em)为第二个表达式(表达式在小括号内),所有的表达式都应包含在括号内,除非它是只有一个单词的媒体类型表达式(如:screen、print等)。
前缀min-表示“至少”,即“大于等于”的意思。
前缀max-表示“至多”,即“小于等于”的意思。

2.5 {}

花括号里面的内容表示整条媒体查询结果为真时的CSS 样式。

在使用媒体查询时,不要把所有样式都放入媒体查询中。正确做法是先声明适用于所有视口宽度的非媒体查询样式,然后只是用媒体查询去覆盖掉在特定宽度中用到的样式。

body {
        background-color:green;
}
@media only screen and (min-width:40em) {
        body {background-color:blue;}
}

3、在样式表链接中使用媒体查询

<link rel="stylesheet" href="styles/mainstyles.css">
<link rel="stylesheet" href="styles/widerscreen.css"
media="only and (min-width:40em)">

<link rel="stylesheet" href="styles/mainstyles.css">此样式表表示应用于所有设备,<link rel="stylesheet" href="styles/widerscreen.css" media="only and (min-width:40em)">表示仅在查询结果为真(视口宽度大于等于40em)时应用的设备。

4、媒体特性

媒体查询可以查询许多媒体特性,如:视口宽度和高度、屏幕宽度和高度、方向、宽高比和分辨率(屏幕上每个维度上的像素个数)等。
其中大多数都可以加上min-max-前缀。

4.1 视口宽度和高度(媒体查询中最常用到的设备属性)

  • 视口宽度:width
  • 视口高度:height
    视口指的是浏览器窗口中实际包含网页的那部分区域。浏览器窗口减去页面边上的滚动条,以及顶部或底部的工具栏和菜单,剩下的区域就是视口。

4.2 屏幕宽度与高度

  • 屏幕宽度:device-width
  • 屏幕高度:device-height
@media only screen and (max-device-width:40em) {...}

4.3 方向

  • 方向:orientation
    值为:横排方向( landscape)竖排方向(portrait
@media only screen and (orientation:landscape) {...}

4.4 宽高比

  • 视口宽高比:aspect-ratio
  • 设备屏幕宽高比:device-aspect-ratio

常见的显示器宽高比时16:9(如19201080或1366768像素)或者是16:10(1280800)。iphone 3和iphone 4s是3:2(480320和960640),而iPhone 5则是16:9(1136640)。安卓手机通常是4:3、3:2、16:10或16:9。

@media only screen and (min-device-aspect-ratio:16/9) {...}

4.5 分辨率

  • 设备屏幕的分辨率:resolution
@media only screen and (resolution:3oodpi) {...}

4.6其他媒体特性

  • color
  • color-index
  • monochrome
  • scan
  • grid

5、浏览器支持

需要担心的浏览器是IE8及其更早版本。
当需要在IE8及其更早版本中使用媒体查询时,我们可以使用条件注释使代码仅针对Internet Explorer。
条件注释也是一种查询,出现在HTML 中,而不是CSS中。
为了让网站能在老版的IE中正确显示,需要使用polyfill或利刃shive脚本。我们所要做的就是下载这个文件,然后在<head>元素中链接他,如:

<!--[if it IE 9]>
<script src="files/html5shiv.js"></script>
<![endif]>-->


js如何使用媒体查询

在利用媒体查询进行响应式布局开发时,用 js 写了一个动画,但不想让它在小屏幕上显示,这就要对屏幕尺寸进行筛选,那么在 js 中是如何使用媒体查询的呢?

    var result1 = window.matchMedia('(min-width:1200px)');
    var result2 = window.matchMedia('(min-width:992px)');
    var result3 = window.matchMedia('(min-width:768px)');
      if(result1.matches) {
            console.log("大屏幕(>=1200)");
        }else if(result2.matches){
            console.log("中等屏幕(>=992&<=1200)");
        }else if(result3.matches){
            console.log("小屏幕(>=768&<=992)");
        }else{
            console.log("超小屏幕(<=768)");
        }

请问怎样才能同时监听是否满足最大和最小值?
根据 mdn 测试媒体查询 的说法应该是没有'(min-width: 380px) and (max-width: 760px)',这种写法的
你可以试试这样

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