CSS3 多媒体查询

前言

  • @media 规则在 CSS2 中有介绍,针对不同媒体类型可以定制不同的样式规则。例如可以针对不同的媒体类型 (包括显示器、便携设备、电视机,等等) 设置不同的样式规则。

  • 但是这些多媒体类型在很多设备上支持还不够友好。

属性 描述 CSS 备注 🔗
display 指定 HTML 元素盒子类型
all 用于所有多媒体类型设备
print 用于打印机
screen 用于电脑屏幕,平板,智能手机等
speech 用于屏幕阅读器

1、多媒体查询

  • CSS3 的多媒体查询继承了 CSS2 多媒体类型的所有思想:取代了查找设备的类型,CSS3 根据设置自适应显示。

  • 媒体查询可用于检测很多事情,例如:

    • viewport (视窗) 的宽度与高度
    • 设备的宽度与高度
    • 朝向 (智能手机横屏,竖屏)
    • 分辨率
  • 目前很多针对苹果手机,Android 手机,平板等设备都会使用到多媒体查询。

1.1 语法

  • 多媒体查询由多种媒体组成,可以包含一个或多个表达式,表达式根据条件是否成立返回 true 或 false。

    1
    2
    3
    @media not|only mediatype and (expressions) {
    CSS 代码...;
    }
  • 如果指定的多媒体类型匹配设备类型则查询结果返回 true,文档会在匹配的设备上显示指定样式效果。

  • 除非你使用了 not 或 only 操作符,否则所有的样式会适应在所有设备上显示效果。

操作符 描述
not not 是用来排除掉某些特定的设备的,比如 @media not print(非打印设备)
only 用来定某种特别的媒体类型。对于支持 Media Queries 的移动设备来说,如果存在 only 关键字,移动设备的 Web 浏览器会
忽略 only 关键字并直接根据后面的表达式应用样式文件。对于不支持 Media Queries 的设备但能够读取 Media Type 类型的
Web 浏览器,遇到 only 关键字时会忽略这个样式文件
all 所有设备,这个应该经常看到
  • 可以在不同的媒体上使用不同的样式文件:

    1
    <link rel="stylesheet" media="mediatype and|not|only (expressions)" href="print.css">

1.2 实例

  • 使用多媒体查询可以在指定的设备上使用对应的样式替代原有的样式。

1.2.1

  • 以下实例中在屏幕可视窗口尺寸小于 600 像素的设备上修改背景颜色。

  • 实例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <style>
    body {
    background-color: pink;
    }

    @media screen and (max-width: 600px) {
    body {
    background-color: lightgreen;
    }
    }
    </style>
    1
    2
    <h1>重置浏览器窗口查看效果!</h1>
    <p>如果媒体类型屏幕的可视窗口宽度小于 600px ,背景颜色将改变。</p>
  • 效果


    重置浏览器窗口查看效果!


    如果媒体类型屏幕的可视窗口宽度小于 600px ,背景颜色将改变。


1.2.2

  • 以下实例在屏幕可视窗口尺寸大于 600 像素时将菜单浮动到页面左侧。

  • 实例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <style>
    .wrapper {
    overflow: auto;
    }
    #main {
    margin-left: 4px;
    }
    #leftsidebar {
    float: none;
    width: auto;
    }
    #menulist {
    margin: 0;
    padding: 0;
    }
    .menuitem {
    background: #CDF0F6;
    border: 1px solid #d4d4d4;
    border-radius: 4px;
    list-style-type: none;
    margin: 4px;
    padding: 2px;
    }

    @media screen and (min-width: 600px) {
    #leftsidebar {
    width: 200px;
    float: left;
    }
    #main {
    margin-left: 216px;
    }
    }
    </style>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <div class="wrapper">
    <div id="leftsidebar">
    <ul id="menulist">
    <li class="menuitem">Menu-item 1</li>
    <li class="menuitem">Menu-item 2</li>
    <li class="menuitem">Menu-item 3</li>
    <li class="menuitem">Menu-item 4</li>
    <li class="menuitem">Menu-item 5</li>
    </ul>
    </div>
    <div id="main">
    <h1>重置浏览器窗口查看效果!</h1>
    <p>在屏幕可视窗口尺寸大于 600 像素时将菜单浮动到页面左侧。</p>
    </div>
    </div>
  • 效果


    重置浏览器窗口查看效果!


    在屏幕可视窗口尺寸大于 600 像素时将菜单浮动到页面左侧。


1.2.3

  • 以下实例在屏幕可视窗口尺寸小于 600 像素时将 div 元素隐藏。

  • 实例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <style>
    div.example {
    background-color: yellow;
    padding: 20px;
    }
    @media screen and (max-width: 600px) {
    div.example {
    display: none;
    }
    }
    </style>
    1
    2
    3
    4
    5
    <h2>屏幕可视尺寸小于 600px 时,隐藏以下元素。</h2>

    <div class="example">我是会隐藏的元素。</div>

    <p>重置浏览器大小,查看效果。</p>
  • 效果


    屏幕可视尺寸小于 600px 时,隐藏以下元素。

    我是会隐藏的元素。

    重置浏览器大小,查看效果。


2、浏览器支持

属性
@media 21.0 9.0 3.5 4.0 9.0
  • 表格中的数字表示支持该属性的第一个浏览器版本号。
  • 紧跟在 -webkit-, -ms-, -o- 或 -moz- 前的数字为支持该前缀属性的第一个浏览器版本号。
文章目录
  1. 1. 前言
  2. 2. 1、多媒体查询
    1. 2.1. 1.1 语法
    2. 2.2. 1.2 实例
      1. 2.2.1. 1.2.1
      2. 2.2.2. 1.2.2
      3. 2.2.3. 1.2.3
  3. 3. 2、浏览器支持
隐藏目录