很多时候,前期使用HTML+CSS设计的样式非常精美,但可能由于对方设备、浏览器的原因,比如分辨率达不到要求、色深达不到要求,最后导致用户浏览页面时的显示效果非常丑陋。为了解决这个问题,从CSS 2.1开始就定义了各种媒体类型(如显示器、便携设备、电视机等),允许设计者针对不同的媒体设备定义不同的CSS样式。
  CSS 3强化了CSS 2.1的媒体类型支持,增加了media query功能,这种机制允许设计者在CSS样式中添加media query表达式,这种表达式不仅可以对媒体类型进行匹配,也可以对媒体分辨率、色深等各种细节进行匹配,因此可以针对不同类型、不同参数细节的媒体设备提供精确控制。

media query语法

  media query的语法稍微有点复杂,语法格式如下:

@media not|only 设备类型 [and 设备特性]*

  在上面语法格式中,[and设备特性]部分可以出现0~N次,通过使用多个[and设备特性]可以对多个设备特性进行匹配。   media query语法格式中的设备类型如下。
  ➢ all:适用于所有的设备类型。
  ➢ aural:适用于语音和音频合成器。
  ➢ braille:适用于触觉反馈设备。
  ➢ embossed:适用于凸点字符(盲文)印刷设备。
  ➢ handheld:适用于小型或手提设备。
  ➢ print:适用于打印机。
  ➢ projection:适用于投影图像,如幻灯片。
  ➢ screen:适用于计算机显示器。
  ➢ tty:适用于使用固定间距字符格的设备,如电传打字机和终端。
  ➢ tv:适用于电视类设备。
  media query语法格式中的设备特性如下图所示:


IT料理

针对浏览器宽度调整布局

  下面开发一个网页,这个网页可以针对浏览器的宽度来调整布局,从而保证该页面向用户呈现较好的视觉效果。
  下面定义了一个3栏布局的页面,这个页面在宽度大于1000px的浏览器中显示时,3个栏目将会并排显示;在宽度小于480px的浏览器中显示时,3个栏目会垂直排列显示。因此,页面需要针对这几种浏览器宽度分别定义不同的CSS样式。

例子
<!DOCTYPE html>  
<html>  
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 针对浏览器宽度调整布局 </title>
    <style type="text/css">
        /* 设置默认的CSS样式 */
        #container{
            text-align: center;
            margin: auto;
            width: 750px;
        }
        #container>div {
            border: 1px solid #aaf;
            text-align: left;
            /* 设置HTML组件的width属性包括边框 */
            box-sizing: border-box;
            -moz-box-sizing: border-box;
            border-radius: 12px 12px 0px 0px;
            background-color: #ffc;
            padding: 5px;
        }
        div#left {
            width: 300px;
            height: 230px;
            float: left;
        }
        div#main {
            width: 450px;
            height: 230px;
            float: left;
            /* 让该元素的右边不能出现float组件,即让后面的元素换行 */
            clear: right;
        }
        div#right {
            width: 750px;
            float: left;
        }
        /* 设置当浏览器宽度大于920px时的CSS样式 */
        @media screen and (min-width:1000px) {
            #container{
                text-align: center;
                margin: auto;
                width: 960px;
            }
            #container>div {
                border: 1px solid #aaf;
                /* 设置HTML组件的width属性包括边框 */
                box-sizing: border-box;
                -moz-box-sizing: border-box;
                border-radius: 12px 12px 0px 0px;
                background-color: #ffc;
                padding: 5px;
            }
            div#left {
                width: 240px;
                float: left;
                height: 240px;
            }
            div#main {
                width: 460px;
                float: left;
                height: 240px;
                /* 让左右两边都可以出现float组件 */
                clear: none;
            }
            div#right {
                width: 260px;
                float: left;
                height: 240px;
            }
        }
        /* 设置当浏览器宽度小于480px时的CSS样式 */
        @media screen and (max-width:480px) {
            #container{
                text-align: center;
                margin: auto;
                width: 450px;
            }
            #container>div {
                border: 1px solid #aaf;
                /* 设置HTML组件的width属性包括边框 */
                box-sizing: border-box;
                -moz-box-sizing: border-box;
                border-radius: 12px 12px 0px 0px;
                background-color: #ffc;
                padding: 5px;
            }
            div#left {
                width: 450px;
                float: left;
                height: 140px;
            }
            div#main {
                width: 450px;
                float: left;
                height: 220px;
                /* 让左右两边都不能出现float组件 */
                clear: both;
            }
            div#right {
                width: 450px;
                float: left;
                height: 160px;
            }
        }
    </style>
</head>  
<body>  
<div id="container">  
<div id="left">  
<h2>疯狂软件开班信息</h2>  
<ul>  
    <li>2011年11月10日&nbsp;已满已开班</li>
    <li>2011年12月02日&nbsp;爆满已开班</li>
    <li>2012年02月08日&nbsp;已满已开班</li>
</ul>  
</div>  
<div id="main">  
<h2>疯狂软件介绍</h2>  
&nbsp;&nbsp;&nbsp;&nbsp;疯狂Java品牌专注高级软件编程,以“十年磨一剑”的心态打造全国最强(不是之一)疯狂Java学习体系:包括疯狂Java体系原创图书,疯狂Java学习路线图,这些深厚的知识沉淀已被大量高校、培训机构奉为经典。<br/> 
&nbsp;&nbsp;&nbsp;&nbsp;疯狂Java怀抱“软件强国”的理想,立志以务实的技术来改变中国的软件教育。经过八年沉淀,疯狂Java强势回归。疯狂Java创始人李刚,携疯狂Java精英讲师团队肖文吉、李韩飞、黄勇、陈辉等老师将带给广大学习者“非一般”的疯狂。
</div>  
<div id="right">  
<h2>公司动态</h2>  
<ul>  
    <li>《疯狂Java讲义》(第2版)上市</li>
    <li>泰豪电网软件公司来校召开现场招聘会</li>
    <li>疯狂学子赴武汉光谷软件园入职</li>
    <li>新华南方来校现场招聘</li>
</ul>  
</div>  
</div>  
</body>  
</html>  

注:本博客内容节选自李刚编著的疯狂HTML 5/CSS 3/JavaScript讲义 ,详细内容请参阅书籍。