CSS3 多媒体查询


CSS2 多媒体类型

@media 规则在 CSS2 中有介绍,针对不同媒体类型可以定制不同的样式规则。

例如:你可以针对不同的媒体类型(包括显示器、便携设备、电视机、平板等等)设置不同的样式规则。

但是CSS2的这些多媒体类型在很多设备上支持还不够友好。这就需要我们掌握CSS3中优秀的多媒体查询了


CSS3 多媒体查询

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

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

  • viewport(视窗) 的宽度与高度
  • 设备(device)的宽度与高度
  • 朝向 (智能手机横屏,竖屏) 。
  • 分辨率

目前很多针对苹果手机,Android 手机,平板等设备的H5页面,都会使用到多媒体查询。


浏览器支持

表格中的数字表示支持该属性的第一个浏览器的版本号。

属性ChromeIEFirefoxSafariOpera
@media21.09.03.54.09.0

多媒体查询语法

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

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

如果指定的多媒体类型匹配设备类型则查询结果返回 true,文档会在匹配的设备上显示与之对应的指定的样式效果。

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

  • not: not是用来排除掉某些特定的设备的,比如 @media not print(非打印设备)。

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

  • all: 所有设备。

你也可以在不同的媒体上使用不同的样式文件:

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

CSS3 多媒体类型

描述
all用于所有多媒体类型设备
print用于打印机
screen用于电脑屏幕,平板,智能手机等。
speech用于屏幕阅读器

多媒体查询简单实例

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

以下实例中在屏幕可视窗口尺寸大于 480 像素的设备上修改背景颜色:

代码如下:

<!DOCTPYE html>  
<html lang="zh">  
<head>  
    <link rel="icon" href="beyond.jpg" type="image/x-icon"/>
    <meta charset="UTF-8">
    <meta name="author" content="beyond">
    <meta http-equiv="refresh" content="520">
    <meta name="description" content="免费零基础教程">
    <meta name="viewport" content="width=device-width, 
    initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=0" />
    <meta name="keywords" content="HTML,CSS,JAVASCRIPT">
    <title>beyondの心中の动漫神作</title>
    <link rel="stylesheet" type="text/css" href="beyondbasestylewhite3.css">

    <!--[if lt IE 9]>
        <script src="//apps.bdimg.com/libs/html5shiv/3.7/html5shiv.min.js"></script>
    <![endif]-->
  
    <style type="text/css">  
        body{  
            font-size: 100%;  
            /*background-image: url("sakura4.png");  
            background-repeat: no-repeat;  
            background-position: center center;  */
            /*声明margin和padding是个好习惯*/  
            margin: 0;  
            padding: 0; 
        }
        /*默认的背景颜色*/
        body {
            background-color: pink;
        }
        /*当屏幕大于480时,显示淡绿色*/
        @media screen and (min-width: 480px) {
            body {
                background-color: lightgreen;
            }
        }
    </style>  
</head>  
  
<body>  
        <header>
            <h1 style="color:white;text-shadow:2px 2px 4px #000;letter-spacing:5px;" class="sgcontentcolor sgcenter">  
        未闻花名
            </h1>
        </header>
        <p class="sgcontentcolor sgcenter" style="clear:left;">
            <b>注意:</b>当窗口大于480px时,显示淡绿色
        </p>
        <footer id="copyright">
            <p style="font-size:14px;text-align:center;font-style:italic;">  
            Copyright © <a id="author">2018</a> Powered by <a id="author">beyond</a>  
            </p>        
        </footer>
    </div>
</body>  
</html>  

效果如下:


核心代码:(大于480的屏幕显示淡淡的绿色喔~)

@media screen and (min-width: 480px) {
    body {
        background-color:  lightgreen;
    }
}

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

代码如下:

<!DOCTPYE html>  
<html lang="zh">  
<head>  
    <link rel="icon" href="beyond.jpg" type="image/x-icon"/>
    <meta charset="UTF-8">
    <meta name="author" content="beyond">
    <meta http-equiv="refresh" content="520">
    <meta name="description" content="免费零基础教程">
    <meta name="viewport" content="width=device-width, 
    initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=0" />
    <meta name="keywords" content="HTML,CSS,JAVASCRIPT">
    <title>beyondの心中の动漫神作</title>
    <link rel="stylesheet" type="text/css" href="beyondbasestylewhite3.css">

    <!--[if lt IE 9]>
        <script src="//apps.bdimg.com/libs/html5shiv/3.7/html5shiv.min.js"></script>
    <![endif]-->
  
    <style type="text/css">  
        body{  
            font-size: 100%;  
            /*background-image: url("sakura4.png");  
            background-repeat: no-repeat;  
            background-position: center center;  */
            /*声明margin和padding是个好习惯*/  
            margin: 0;  
            padding: 0; 
        }
        div#id_div_content {
            margin-left: 4px;
        }
        ul#id_ul_menulist {
            margin: 0;
            padding: 0;
        }
        li.class_li_item {
            background: #CDF0F6;
            border:1px solid #d4d4d4;
            border-radius: 4px;
            list-style-type: none;
            margin: 4px;
            padding: 2px;
        }
        /*核心代码*/
        @media screen and (min-width: 490px) {
            div#id_div_siderbar {
                /*大于490的窗口上,左浮动*/
                float: left;
                width: 100px;
            }
            div#id_div_content {
                margin-left: 104px;
            }
        }
    </style>  
</head>  
  
<body>  
        <div class="class_div_container">
            <div id="id_div_siderbar">
                <ul id="id_ul_menulist">
                    <li class="class_li_item">那朵花</li>
                    <li class="class_li_item">龙与虎</li>
                    <li class="class_li_item">石头门</li>
                    <li class="class_li_item">轻音少女</li>
                    <li class="class_li_item">来自深渊</li>
                </ul>
            </div>
        
            <div id="id_div_content">
                <h2 style="color:white;text-shadow:2px 2px 4px #000;letter-spacing:5px;" class="sgcontentcolor sgcenter">  
                    未闻花名
                </h2>
                <p>
                    在我们走过的季节里,路旁盛开的花朵也在不断变化,那个季节盛开的花是叫什么来着?轻轻摇曳着,一碰会微微刺痛,靠近一闻,隐约有股青涩的阳光的气息。那气息渐渐地淡去,我们也在慢慢长大。可是,那朵花一定还在某个地方盛开着……对,我们永远都会继续实现那朵花的愿望。
                </p>
            </div>
        </div>
        <p class="sgcontentcolor sgcenter" style="clear:left;">
            <b>注意:</b>当窗口大于490px时,栏目列表将float至left
        </p>
        <footer id="copyright">
            <p style="font-size:14px;text-align:center;font-style:italic;">  
            Copyright © <a id="author">2018</a> Powered by <a id="author">beyond</a>  
            </p>        
        </footer>
    </div>
</body>  
</html>  

效果如下:


核心代码:

@media screen and (min-width: 480px) {
    #leftsidebar { width:  200px;  float:  left;}
    #main { margin-left: 216px;}
}

CSS3 @media 参考

更多多媒体查询内容可以参考@media 规则。