`

让我们来学学css3 media queries的使用吧

阅读更多
原帖地址:http://www.cnblogs.com/my_front_research/archive/2013/05/30/3079825.html

这几天就是在折腾博客,换肤,使用pretty code,css3技巧,以及响应式布局实践。


不过,响应式布局确实挺费时间的。对此,把自己实践的经验分享下。内容将涉及如下:



  1. 语法

  2. 语法注意的事项

  3. 响应式适用的范围

  4. 一些实例演示

  5. 其他问题


好啦。这就是要讲的内容,不过,在开始之前,我们先热热身。



  1. 先声明html文档为html5的文档类型,即<!DOCTYPE HTML>

  2. IE9版本以下浏览器不支持media queries规则,所以请加入以下条件注释的js

    <!--[if lt IE 9]>
    <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
    <![endif]
    -->



  3. 对手持设备的支持声明:

    <meta name=“viewport” content=“width=device-width,minimum-scale=1.0,maximum-scale=1.0″ />



  4. 好啦,然后了解下css3 中的media queries的一些简单规则,就可以随心所欲啦。


一. 语法


 viewport的语法



  • width: 手机模拟PC浏览器的宽度,然后手机浏览器根据这个宽度把页面同比缩放到手机屏幕上。width:的特殊值device-width的是设备宽度;

  • height:同width;

  • user-scalable:是否允许用户缩放,有yes和no两个值;

  • initial-scale:初始缩放比例;

  • minimum-scale和maximum-scale:最小和最大缩放比例;


media queries的规则


首先,这里涉及的基本翻译自:https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Media_queries,并且舍弃了一些原英文中的废话,所以不会有错的哦,除非本人翻译不够专业。


-------------------分割线------------------------------


语法:


media query(媒介查询) 由媒介类型和媒介特性组成,作为css3的规范,包含一个或多个表达式,用以解决不同的媒介适配问题。当文档显示完成之时,指明了媒介设备类型,表达式没有错误的话,那么查询结果也就正确了(就是规则正确响应了)。


css 代码 :



<!-- CSS media query on a link element -->
<link rel="stylesheet" media="(max-width: 800px)" href="example.css" />

<!-- CSS media query within a style sheet -->
<style>
@media (max
-width: 600px) {
.facet_sidebar {
display: none;
}
}
</style>


media query正确,那么相应的样式表或者样式规则(怎么会有或?因为使用响应式,可以分好多外链css文件,也可以只写在一个样式表中,本人就喜欢写在一张样式表中)就会被请求,跟正常的级联规则一样样的。Style sheets with media queries attached to their <link> tags will still download even if their media queries would return false (they will not apply, however).尼玛,不会翻译了。


若不声明媒介类型,比如使用not,only运算符,那么默认是所有媒介。


逻辑运算符:




关键字 说明

















only 限定某种设备类型
and 逻辑与,连接设备名与选择条件、选择条件1与选择条件2
not 排除某种设备
, 设备列表

使用逻辑运算符 not,and,only,可以构建复杂的media queries。注意,在使用not和only时,必须指明媒介类型。


使用逗号“,”可以合并多个media queries,其实这跟css选择符是一个道理,多个选择符应用统一规则,就用逗号合并。


and:


用来连接多种媒介特性(media features)以及媒介类型(media types)。一个简单的media query示例:



@media (min-width: 700px) { ... }


但是,如果你想让上面的规则仅仅是竖屏显示的话,你可以使用and运算符连接媒介特性。



@media (min-width: 700px) and (orientation: landscape) { ... }


当然,如果你怕在TV上显示出岔子,也可以做如下限制:



@media tv and (min-width: 700px) and (orientation: landscape) { ... }


现在,上面的media query规则将只会对媒介类型是TV,可视宽度至少为700px,竖屏进行响应。


逗号


懒得去翻译那一长串了,写过css的都明白,这里的逗号,跟不同的css选择器应用同一样式的逗号是一样的。给出对比:



.music img , .news img { height: 40px; width: 60px;}



@media (min-width: 700px), handheld and (orientation: landscape) { ... }


上面的规则呢,如果你拿了个800px宽的电脑屏设备,那么@media (min-width: 700px)这个规则会被应用,虽然你这个不是手持设备;如果你拿了个500px宽的手持设备,handheld and (orientation: landscape)这个规则会被应用,虽然你丫的屏宽还不到700px。(为何不用or呢,我比较纳闷儿!)


not



  • not关键字将会作用域整个的media query,除非有其他情况致使该media query返回错误,比如,单色monochrome作用于彩色(color)显示,或者600px的screen屏和一个min-width:700px的特性查询(feature query)

  • 若有逗号分隔,那么not只能作用在逗号前面的media query上


  • not关键字不能用来否定单个的feature query,只能否定整个media query




下面来看代码示例:



@media not all and (monochrome) { ... }


以上代码就相当于:



@media not (all and (monochrome)) { ... }


而不是:



@media (not all) and (monochrome) { ... }


再看看另一个示例:



@media not screen and (color), print and (color)


就相当于:



@media (not (screen and (color))), print and (color)


这个否定规则,可以参考否定的第二条,逗号的作用。


only


我原先还以为only就是仅仅的意思,那如果是“仅仅”,我指定media type,或者 media feature,也不需要only啊,多此一举。好吧,看看官方解释:



The only keyword prevents older browsers that do not support media queries with media features from applying the given styles:



<link rel="stylesheet" media="only screen and (color)" href="example.css" />



什么意思呢,就是说,only关键字啊,是阻止那些不支持media queries,media feature的老古董浏览器请求已给出的样式。你丫是穷屌丝,就只能对白富美望而却步了。


哎,就是这个意思么,有事儿没事儿加上吧。


-----------------------再次割鸡鸡----------------------------


上面说了一大堆,有两个专业名词,一个是media types,一个是media feature,下面列出来,让你们端详端详。


媒介类型(media types)




类型 解释











































all 所有设备
braille 盲文
embossed 盲文打印
handheld 手持设备
print 文档打印或打印预览模式
projection 项目演示,比如幻灯
screen 彩色电脑屏幕
speech 演讲
tty 固定字母间距的网格的媒体,比如电传打字机
tv 电视

媒介特性(media features):




媒体特性 值 可用媒体类型 接受min/max 简介




























































































width <length> 视觉屏幕/触摸设备 yes 定义输出设备中的页面可见区域宽度(单位一般为px)
heigth <length> 视觉屏幕/触摸设备 yes 定义输出设备中的页面可见区域高度(单位一般为px)
device-width <length> 视觉屏幕/触摸设备 yes 定义输出设备的屏幕可见宽度(单位一般为px)
device-heigth <length> 视觉屏幕/触摸设备 yes 定义输出设备的屏幕可见高度(单位一般为px)
orientation portrait | landscape 位图介质类型 no 定义’height’是否大于或等于’width’。值portrait代表是,landscape代表否即设,备手持方向:portait为横向,landscape为竖向
aspect-ratio <ratio> 位图介质类型 yes 定义’width’与’height’的比率,即浏览器的长宽比
device-aspect-ratio <ratio> 位图介质类型 yes 定义’device-width’与’device-height’的比率,即设备屏幕长宽比。如常见的显示器比率:4/3, 16/9,16/10
color <integer> 视觉媒体 yes 定义每一组输出设备的彩色原件个数。如果不是彩色设备,则值等于0
color-index <integer> 视觉媒体 yes 定义在输出设备的彩色查询表中的条目数。如果没有使用彩色查询表,则值等于0
monochrome <integer> 视觉媒体 yes 定义在一个单色框架缓冲区中每像素包含的单色原件个数。如果不是单色设备,则值等于0
resolution <resolution> 位图介质类型 yes 定义设备的分辨率。如:96dpi,300dpi,118dpcm
scan progressive | interlace 电视类 no 定义电视类设备的扫描工序, progressive逐行扫描,interlace隔行扫描
grid <integer> 栅格设备 no 用来查询输出设备是否使用栅格或点阵。只有1和0才是有效值,1代表是,0代表否

二. 语法注意的事项



  1. 一个以上的响应式规则,媒体属性设置后面如有宽度规则,必须使用and连接,否则,将只使用最后一个规则中的相同样式(不同规则的选择器交集的样式)。

  2. 只设置了最大宽度值的样式设置将会被继承。以上代码中的1280px下的border属性将会被1280px宽度以下的规则继承。对于这种情况,可以使用min-width和max-width配合,防止继承,以减少属性覆盖产生的一些麻烦。比如,float属性还有none,好覆盖,但是position:relative你怎么覆盖?蛋疼吧。针对这种情况,可以采取宽度区间段设置的方式,把差异化的样式放在这个区间段声明中就OK啦。

  3. 如果只设置max-width为m像素,小于m的设置则是在一个区间,即该设置包含了最小到最大的设置,那么是否会继承max-width为m像素的设置的样式呢?会继承的。

  4. DOCTYPE设置。DOCTYPE设置需要设置成DOCTYPE HTML,其他设置方式将导致在手持设备上无法响应。当然,电脑上还是可以响应的。比如我的这个博客,博客园采用的是过渡式的声明,我就只好限制响应规则的设备为screen了。


三. 响应式适用的范围


我个人觉得适合做页面内容不太丰富,结构不复杂的项目。如果只是针对电脑屏的话,任何项目都不限,只要折腾得起,不差钱和时间。


对于手机来说,隐藏的内容越多,就越不合适了。因此,博客和论坛还是比较合适的。


四. 一些实例演示


可以参照本博客,或者国外的这个站点http://blog.teamtreehouse.com/


一淘网的首页也做了响应式处理,不过他们针对的是screen,最小宽度为768px,对于手机,则另做了。


五. 图片的自适应


前景图片img怎么自适应呢?常见的做法是:



img { max-width: 100%; }


另外,记得不要在img元素中限定图片宽高哦。另外不建议直接设置width=”100%”,因为会把小图拉大,模糊显示。


同理,video标签和iframe标签的宽度也可以这样做,而且最好不要使用iframe,宽度是个问题,性能也是一个方面吧。


 另外一种做法是使用css3 image  


我们都知道可以用::before和::after伪元素+content属性来动态显示一些内容或者做其它很酷的事情,而且在CSS 2.1中即被支持。不过content属性在CSS 2.1中只能用于这两个伪元素中,而在CSS3中,任何元素都可以使用content属性了,这个方法就是结合css3 的attr属性和HTML自定义属性的功能:



<img src="image.jpg" data-src-600px="image-600px.jpg" data-src-800px="image-800px.jpg" alt="">


然后用media query来动态赋值:



@media (min-device-width:600px) { 
img[data
-src-600px] {
content: attr(data
-src-600px, url);
}
}
@media (min
-device-width:800px) {
img[data
-src-800px] {
content: attr(data
-src-800px, url);
}
}


不爽的是,你得准备多张图片啊。。。


背景图咋自适应呢?我看只能准备多张图片了。


参考文章



 

本文链接

分享到:
评论

相关推荐

    学学吧CISCO方面

    学学吧比玩游戏好多了

    热工基础 张学学 课后习题答案

    张学学的书中,通过习题让学生理解并应用这些基本原理,例如如何计算热机效率、分析闭口系统的能量平衡等。 2. **流体力学**:这部分涉及流体的运动规律和性质,如连续性方程、动量方程和能量方程(伯努利方程)。...

    学学Python_54标准模块3 集合

    在"学学Python_54标准模块3 集合"这个主题中,我们将深入探讨Python集合的特性、用法以及在实际编程中的应用。 首先,集合的创建有两种主要方式。一是通过花括号 `{}` 包裹元素,例如 `my_set = {1, 2, 3}`;二是...

    学学Python_49类的成员08 生成器的使用:递归

    本节我们将深入探讨生成器在递归中的应用,以标题“学学Python_49类的成员08 生成器的使用:递归”为例,结合描述中提到的文章链接,我们将讨论如何结合这两种强大的概念。 递归是一种编程技术,其中函数或方法调用...

    二叉树教案--你也来学学啊

    本教案《二叉树教案--你也来学学啊》将深入讲解这些概念,并提供实例分析和练习,帮助学习者从基础到实践全面掌握二叉树。文档“二叉树.doc”和“二叉树教案”很可能是详细的理论介绍和习题解答,而“二叉树”可能是...

    学学Python_22语句_条件语句3(比较运算符)

    在处理字典时,我们同样可以使用比较运算符来比较字典的键、值或整个字典的大小。例如,比较两个字典的键是否完全相同,或者比较它们的值的大小关系。 `sentenceCondition2.py`和`sentenceCondition3.py`的文件名...

    教你给华为手机设置第三方的默认应用,简单又好用,快来学学.mp4

    教你给华为手机设置第三方的默认应用,简单又好用,快来学学.mp4

    宝珑网创始人:要赚女人钱 先学学星座吧.docx

    【宝珑网创始人:要赚女人钱 先学学星座吧】 本文主要讲述了宝珑网创始人丁力如何从星座与女性消费者的关系中发现商机,创立个性化定制珠宝饰品平台的故事。珠宝饰品行业正面临互联网和新技术的挑战,个性化定制...

    无线网络 大家可以看看学学

    无线网络 大家可以看看学学 无线网络 大家可以看看学学

    学学Python_40类_06 多继承

    在“学学Python_40类_06 多继承”这个主题中,我们将会深入探讨Python中的多继承机制及其实际应用。 首先,多继承的基本语法是通过在类定义中列出所有父类,中间用逗号分隔。例如: ```python class DerivedClass...

    6142_学学网.apk

    6142_学学网.apk

    学学51单片机电路图

    51单片机是微电子技术领域中一种广泛使用的微控制器,尤其在嵌入式系统设计中占有重要地位。它的核心是Intel的8051内核,具有8位数据处理能力,内置RAM、ROM、定时器/计数器、并行I/O口等资源,适合初学者学习基础的...

    学学Python_字符串05_字典的创建

    在这个主题“学学Python_字符串05_字典的创建”中,我们将深入探讨如何在Python 3.0版本中创建字典。 首先,字典的创建可以通过以下几种方式: 1. **空字典创建**:你可以使用花括号 `{}` 来创建一个空字典,就像...

    我国高等教育学学科建设前瞻.pdf

    总结来说,我国高等教育学学科建设已取得显著成绩,但仍有广阔的提升空间。未来,我们需要不断深化理论研究,创新研究方法,强化实践应用,以期在新的时代背景下,推动我国高等教育学学科向更高层次迈进,更好地服务...

    学学Python_31函数_创建函数01

    在"学学Python_31函数_创建函数01"的主题中,我们主要关注如何在Python中创建自定义函数。这通常是通过使用`def`关键字来实现的。 创建函数的基本语法如下: ```python def function_name(parameters): # 函数体 ...

    软件网络认证 --服务端.rar_R87P_arrivevl3_实例不错值得学习 学学上网_服务端_软件登陆的网络认证

    首先,我们来看一下压缩包中的三个文件: 1. **getinfo.asp**:这是一个ASP(Active Server Pages)文件,通常用于处理服务器端的动态网页内容。在这个上下文中,它可能负责获取用户登录信息,包括用户名和密码,...

    高中英语教材全套学学案(教师版)Unit 3(精品)新人教版必修1 学案.doc

    高中英语教材全套学学案(教师版)Unit 3(精品)新人教版必修1 学案.doc

    学学Python_字符串07_字典的格式化字符串

    首先,我们来看看标题提到的“学学Python_字符串07_字典的格式化字符串”。这表明我们将关注如何利用Python中的字典来格式化输出字符串。在Python 3.6及以后的版本中,引入了一种新的字符串格式化方法,即f-string...

    学学Python_32函数_创建函数02

    在Python中,我们使用`def`关键字来定义一个函数,后跟函数名和参数列表。例如: ```python def my_function(param1, param2): # 函数体 pass ``` 函数体内的代码是执行的逻辑,`pass`在这里表示函数没有实际...

Global site tag (gtag.js) - Google Analytics