CSS(17) -- css3特性<7> 多媒体查询

41 阅读3分钟

一. 多媒体查询 @media

@media 可以针对不同的媒体类型(包括显示器、便携设备、电视机,等等)设置不同的样式规则,实现适应显示。

栗如:

  • viewport(视窗) 的宽度与高度
  • 设备的宽度与高度
  • 朝向 (智能手机横屏,竖屏) 。
  • 分辨率
<1> 语法
@media not|only mediatype and (expressions) {
    
}
  • 先指明设备的类型
  • 然后指明成立的条件(即设备需要满足怎样的条件才能显示指定的样式)
  • 如果指定的多媒体类型匹配设备类型则查询结果返回 true,文档会在匹配的设备上显示指定样式效果。
<2> 几个常用的操作符
  • not:  用来排除掉特定的设备,比如 @media not print(非打印设备)。

  • only:  用 来规定某种特别的媒体类型。 表示只有 仅仅,表示某一种的媒体类型设备。

    注意:对于支持Media Queries的移动设备来说,如果存在only关键字,移动设备的Web浏览器会忽略only关键字并直接根据后面的表达式应用样式文件。对于不支持Media Queries的设备但能够读取Media Type类型的Web浏览器,遇到only关键字时会忽略这个样式文件。

  • and: 表示并且,要求必须满足所有的表达式要求时,才能使用media定义样式

<3> 常见多媒体类型
all用于所有多媒体类型设备
print打印机
screen电脑、平板、智能手机屏幕...
speech屏幕阅读器
<4> 常用的条件
  • max-width: 输出设备中页面最大可视区域宽度,小于这个width时,其中的css生效

  • min-width: 输出设备中页面最小可视区域宽度,大于这个width时,其中的css生效

  • max-height: 输出设备中页面最大可视区域高度

  • min-height: 输出设备中页面最小可视区域高度

<5> 栗子
(1) 当屏幕的可视窗口宽度大于480px且小于560px时改变背景色
body {
    background-color: pink;
}
表示 匹配媒体类型为电脑屏幕等在宽度大于480px 并且小于560px@media screen and (min-width: 480px) and (max-width: 560px){
    body {
        background-color: lightgreen;
    }
}
(2) 当屏幕的可视窗口宽度大于480px时将菜单浮动到左侧
@media screen and (min-width: 480px) {
    #leftsidebar {
        width:200px;
        float:left;
    }
    #main {
        margin-left:216px;
    }
}
<6> 媒体查询的两种方式
(1) link 的方式
<link rel="stylesheet" media="screen and (min-width:600px) and (max-width:900px)" href="./css/green.css">
(2) css 样式
  /*使用关键词"and"将多个媒体特性结合在一起*/
       @media screen and (min-width:600px) and (max-width:900px){
            body {
                background-color:green;
           }
        }
<7> 使用 JS 操控 @media
(1) 查询 @media

在 JavaScript 中,可以使用 CSSMediaRuleCSS 对象模型接口访问使用 @media 创建的规则。通过 document.styleSheets[0].cssRules,可以访问到所有的 CSSrule!!!

2087.png

(2) 创建 @media

在 JavaScript 中,可以使用 matchMedia() 方法创建媒体查询:

window.matchMedia(mediaQueryString);
  • mediaQueryString: 必需,一个被用于媒体查询解析的字符串。

该方法返回一个新的 MediaQueryList 对象,表示指定的媒体查询字符串解析后的结果。

返回的MediaQueryList 对象有以下属性:

  • media :查询语句的内容。
  • matches :用于检测查询结果,如果文档匹配 media query 列表,值为 true,否则为 false

举栗:

if (window.matchMedia("(max-width: 700px)").matches) { 
/* 窗口小于或等于 700 像素 */ 
document.body.style.backgroundColor = "yellow";
} else {
/*窗口大于 700 像素 */
document.body.style.backgroundColor = "pink";
}