博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《响应式web设计》读书笔记(二)媒体查询
阅读量:5935 次
发布时间:2019-06-19

本文共 1871 字,大约阅读时间需要 6 分钟。

一、什么是媒体查询?

    媒体查询就是向设备提问,如“你是一块屏幕吗?”,然后根据回答来进行处理。媒体查询其实不是一个新概念,在HTML4中就已经有了。你肯定见过它:

    在HTML4中,仅可以用来为不同的设备指定引入不同的样式文件,像上面的screen。功能太单一了所以没发挥什么大作用。但现在不同的,CSS3为它赋予了新的定义,媒体查询能问设备的问题大大增多,包括已经被大家熟知的视口宽度和设备宽度等。在响应式设计中,为了在不同尺寸的屏幕上显示不同的布局(样式),媒体查询是一把核心利器。

    媒体查询的支持程度如何呢?现代浏览器已经广泛支持了(Firefox3.6+、Safari4+、Chrome4+、Opera9.5+、IOS Safari3.2+、Opera Mobile10+、Android2.1+、IE9+)。对于低版本的浏览器(IE8及以下),也有相应的js修复办法。Respond.js()就是这样一个工具。但是我觉得,响应式设计主要是用户适配移动设备的,有谁会在移动设备上使用IE6吗?(大家看~我的ipad~刷了一个XP系统哦~)。个人觉得这个工具的开发简直多此一举。

二、媒体查询的语法

    在引入css文件的时候,media属性可以为表达式,如下:

    表示当设备是一块屏幕并且宽度在900像素以内时进入some.css这个文件。可以看到只是对原来的一种查询条件增强。当有多个条件时使用and连接。如果你想使用一个查询列表,当设备满足其中一项就返回真,这个时候用逗乐连接各查询语句,例如:

    表示当设备宽度在600px以内或者是竖屏时,引入some.css。

    另外一种使用方法是在css样式中写,只要一看例子就明白了,语法都一样:

 三、视口(viewport)这个东西

    关于这部分概念,我不得不吐槽一下,作者讲的也太粗略了,边举例边讲,似乎知识点部分给忘了介绍了。使我不得不从网上搜索其他资料。幸好,W3C的这篇文档讲的很详细。链接:。

    viewport其实就是指浏览器内容区域,不包括工具栏和状态栏。媒体查询使用的max-width这里的width就是指viewport的宽度啦。这里还有另一个概念,那就是虚拟画布。如果你用手机访问一个非手机版的网页,会发现该网页也可以很好的显示,只是页面被缩小了。其实,这就是页面先使用虚拟画布渲染好,然后再缩放为与实际视口相同的尺寸显示。IOS上默认使用980px的虚拟画布进行渲染,所以大部分网页在手机上都可以正常显示。

    当然,我这里说的正常是指布局没有混乱。但是我们在做响应式页面的时候,不希望页面没缩放。比如我想让我的横向导航栏在移动设备上变为纵向导航栏,而不是被缩小后的横向的。该怎么办呢?思路很简单,只要别让它按照虚拟画布的尺寸进行渲染就可以了。代码你肯定见过好多次了:

    它表示页面按照1:1缩放,并且渲染的宽度按照设备宽度,这样便不会再替你缩放了。我们可以从容的按照自己想要的显示方式来响应式设计了。

    其实我还想做一个工作,就是拿到各个设备的viewport临界值,比如:iPhone、ipad mini、ipad、还有更乱的android系统的各种屏幕。现在网上也有一些值,但是我在测试的时候发现有的对有的不对,所以还得靠自己啊。可惜现在手头没有设备,先记下来,以后有了设备,必定亲手测一遍。

四、关于内容优先和流式布局

    看到内容优先这几个字的时候,我小小的激动了一下,因为我曾几何时就有过这样的念头。

    我的想法是这样的:浏览器解析一个页面是从上到下进行解析的,如果某个页面是这样的:

    

    那相应的HTML代码应该是这样:

    这样用户真正想看到的东西是最后被加载的,在这之前还得加载并不关心的头部和左侧区域。如果能够把HTML代码变成这样:

    这样可以首先加载内容区域,减少用户等待的时间。同时页面显示还是原来的。

    作者此处用float布局来实现了这样的效果,但是个人觉得不是很好。首先用float进行布局本来就不是一种很好的选择,其次,在进行响应式设计的时候,势必得用流式布局。既然网页中的内容都是“流动”的,如何做到交换了元素的位置还能让它正常流动呢?

    这个问题我现在也在思考,还未有解决办法,如果哪位仁兄知道办法,务必跟我说一声哦,大家共同学习一下。

    今天的读书笔记到此结束了,感觉还是不够流畅,不够有水平。下一章将讲流式布局,希望能找到我问题的答案,同时也希望我的写作水平能提高。

转载地址:http://mdctx.baihongyu.com/

你可能感兴趣的文章
学 Win32 汇编[23] - 位测试与位扫描指令: BT、BTC、BTR、BTS、BSF、BSR
查看>>
服务端测试工具
查看>>
我的友情链接
查看>>
网络监控工具nicstat
查看>>
MTU和TCPMSS介绍
查看>>
MySQL编译安装多实例
查看>>
httpuseragent
查看>>
HTTP服务器加强版
查看>>
iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 解析JSON
查看>>
cisco3550/3560,vlan间路由,静态路由映射,dhcp地址池创建
查看>>
在spring-boot工程中添加spring mvc拦截器
查看>>
python调用mrjob实现hadoop的mapreduce日志解析
查看>>
Linux系统有关下载
查看>>
linux下密码生成器pwgen
查看>>
男女朋友关系是这么确定的.....
查看>>
Android Studio 快捷键
查看>>
Linux学习记录--服务
查看>>
Mac下Sublime Text3配置Python开发环境
查看>>
Android - eclipse快捷键与技巧大全
查看>>
Nginx 内置变量
查看>>