美文网首页
CSS3 的 @media

CSS3 的 @media

作者: 2c4419e9dafa | 来源:发表于2018-04-20 15:25 被阅读0次

    首先要知道,我们为什么要写自适应的页面(响应式页面)

    众所周知,电脑、平板、手机的屏幕是差距很大的,假如在电脑上写好了一个页面,在电脑上看起来不错,但是如果放到手机上的话,那可能就会乱的一塌糊涂,这时候怎么解决呢?以前,可以再专门为手机定制一个页面,当用户访问的时候,判断设备是手机还是电脑,如果是手机就跳转到相应的手机页面,例如百度的就是,手机访问www.baidu.com就会跳转到m.baidu.com,这样做简直就是费力不讨好的活,所以聪明的程序员开发了一种自适应写法,即一次开发,处处显示!这到底是一个什么样的神器东西呢,接下来就揭晓它的神秘面纱。

    CSS3 的 @media 查询
    定义和使用
    使用 @media 查询,你可以针对不同的屏幕大小定义不同的样式。 @media 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@media 是非常有用的。 当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面,这对调试来说是一个极大的便利。
    css语法

    @media mediaType and|not|only (media feature) {
         /*CSS-Code;*/
    }
    

    媒体类型(mediaType )
    类型有很多,在这里不一一列出来了,只列出了常用的几个。

    描述
    all 用于所有设备
    print 用于打印机和打印预览
    screen 用于电脑屏幕,平板电脑,智能手机等。(最常用)
    speech 应用于屏幕阅读器等发声设备

    媒体功能(media feature)
    媒体功能也有很多,以下列出常用的几个

    描述
    max-width 定义输出设备中的页面最大可见区域宽度
    min-width 定义输出设备中的页面最小可见区域宽度

    and、not、only关键字的意义
    1.and
    Media Queries可以使用关键词"and"将多个媒体特性结合在一起。也就是说,一个Media Query中可以包含0到多个表达式,表达式又可以包含0到多个关键字,以及一种媒体类型。

    当屏幕在600px~900px之间时,body的背景色渲染为“#f5f5f5”,如下所示。

    @media screen and (min-width:600px) and (max-width:900px){
      body {background-color:#f5f5f5;}
    }
    
    1. not关键词
      使用关键词“not”是用来排除某种制定的媒体类型,也就是用来排除符合表达式的设备。换句话说,not关键词表示对后面的表达式执行取反操作,如:
    @media not print and (max-width: 1200px){样式代码}
    

    上面代码表示的是:样式代码将被使用在除打印设备和设备宽度小于1200px下所有设备中。

    3.only关键词
    only用来指定某种特定的媒体类型,可以用来排除不支持媒体查询的浏览器。其实only很多时候是用来对那些不支持Media Query但却支持Media Type的设备隐藏样式表的。其主要有:支持媒体特性的设备,正常调用样式,此时就当only不存在;表示不支持媒体特性但又支持媒体类型的设备,这样就会不读样式,因为其先会读取only而不是screen;另外不支持Media Queries的浏览器,不论是否支持only,样式都不会被采用。如

    <linkrel="stylesheet" media="only screen and (max-device-width:240px)" href="android240.css" />
    

    在Media Query中如果没有明确指定Media Type,那么其默认为all,如:

    <linkrel="stylesheet" media="(min-width:701px) and (max-width:900px)" href="mediu.css" />
    

    另外在样式中,还可以使用多条语句来将同一个样式应用于不同的媒体类型和媒体特性中,指定方式如下所示。

    <linkrel="stylesheet" type="text/css" href="style.css" media="handheld and (max-width:480px), 
    screen and (min-width:960px)" />
    

    上面代码中style.css样式被用在宽度小于或等于480px的手持设备上,或者被用于屏幕宽度大于或等于960px的设备上。

    到目前为止,CSS3 Media Queries得到了众多浏览器支持,除了IE6-8浏览器不支持之外,在所有现代浏览器中都可以完美支持。还有一个与众不同的是,Media Queries在其他浏览器中不要像其他CSS3属性一样在不同的浏览器中添加前缀。

    开始编写响应式页面
    编写之前呢,有几个要准备的工作

    准备工作1:设置Meta标签

    首先我们在使用 @media 的时候需要先设置下面这段代码,来兼容移动设备的展示效果:

    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    

    这段代码的几个参数解释:

    • width = device-width:宽度等于当前设备的宽度
    • initial-scale:初始的缩放比例(默认设置为1.0,即代表不缩放)
    • user-scalable:用户是否可以手动缩放(默认设置为no,因为我们不希望用户放大缩小页面)

    其他还有很多参数呢,想要了解的童鞋可以直接去百度

    准备工作2:加载兼容文件JS

    因为IE8既不支持HTML5也不支持CSS3 @media ,所以我们需要加载两个JS文件,来保证我们的代码实现兼容效果:

    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
      <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
    <![endif]-->
    

    准备工作3:设置IE渲染方式默认为最高(可选)

    现在有很多人的IE浏览器都升级到IE9以上了,所以这个时候就有又很多诡异的事情发生了,例如现在是IE9的浏览器,但是浏览器的文档模式却是IE8 为了防止这种情况,我们需要下面这段代码来让IE的文档渲染模式永远都是最新的

    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    

    这段代码后面加了一个chrome=1,如果用户的电脑里安装了 chrome,就可以让电脑里面的IE不管是哪个版本的都可以使用Webkit引擎及V8引擎进行排版及运算,如果没有安装,就显示IE最新的渲染模式。

    代码实例
    1、如果文档宽度小于等于 300px 则应用花括号内的样式——修改body的背景颜色
    (background-color):

    @media screen and (max-width: 300px) {
        body {
            background-color:lightblue;
        }
    }
    

    从上面的代码可以看出,媒体类型是屏幕(screen),使用 一个 and 连接后面的媒体功能,这里写的是 max-width:300px ,也就是说,当屏幕的最大宽度 小于等于 300px 的时候,就应用花括号里面的样式。

    2、当文档宽度大于等于300px 的时候显示的样式

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

    注意,这里的媒体功能使用的是 min-width 而不是 max-width,我已经标红高亮显示出来了。

    3、当文档宽度大于等于 300px 并且小于等于500px ( width >=300 && width <=500)的时候显示的样式

    @media screen and (min-width:300px) and (max-width:500px) {
        /* CSS 代码 */
    }
    

    注意,这里使用了两个 and ,用来连接 两个媒体功能,一个用于限制最小,一个用于限制最大。

    ※ 需要注意的地方(划重点)
    1、通过灵活应用以上技巧,开发出一个响应式页面,还不是近在咫尺的感觉(:з」∠)

    2、不要被 min-width 和 max-width 所迷惑,初学者很容易误以为 min-width 的意思是小于xxx的时候才应用,然而这就陷入误区了,其实它的意思是:当设置了 min-width 的时候,文档的宽度如果小于设置的值,就不会应用这个区块里的CSS样式,所以 min-width 它才能实现大于等于设置的值得时候,才会应用区块里的CSS样式,max-width 也是如此。

    3、或者这样想想,先看代码,这句代码的意思是宽度大于等于 300px ,小于等于 500px ( width >=300 && width <=500)的时候应用样式

    @media screen and (min-width:300px) and (max-width:500px) {
        /* CSS 代码 */
    }
    

    min-width:300px 的作用是当文档宽度不小于 300px 的时候就应用 {} 里的CSS代码块,即大于等于 300px,max-width:500px 的作用是当文档宽度不大于 500px 的时候就应用{} 里的CSS代码块,即小于等于 500px 是不是这样想就容易明白了些呢?

    参考:https://www.cnblogs.com/baiyii/p/6973437.html
    https://www.cnblogs.com/zyl-Tara/p/5519144.html

    相关文章

      网友评论

          本文标题:CSS3 的 @media

          本文链接:https://www.haomeiwen.com/subject/fybakftx.html