媒体查询
媒体查询可以根据设备显示器的特性(如视口宽度、屏幕比例、设备方向:横向或纵向)为其设定 CSS 样式。使用媒体查询,可以在不改变页面内容的情况下,为特定的一些输出设备定制显示效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 语法: 媒体查询包含一个可选的媒体类型和零个或多个满足CSS3规范的表达式. @media mediatype and|not|only (media feature) {CSS-Code;} 媒体设备类型: all:用于所有设备--默认值 print:用于打印机和打印预览 screen:用于电脑屏幕,平板电脑,智能手机等(前端写这个就好了) speech:应用于屏幕阅读器等发声设备 媒体属性: max-height:定义输出设备中的页面最大可见区域高度。 max-width:定义输出设备中的页面最大可见区域宽度。 min-height:定义输出设备中的页面最小可见区域高度。 min-width:定义输出设备中的页面最小可见区域宽度。 width:定义输出设备中的页面可见区域宽度。 height:定义输出设备中的页面可见区域高度。 orientation:定义输出设备中的页面是横屏还是竖屏。 landscape横屏 portrait竖屏 max-device-height:定义输出设备的屏幕可见的最大高度。 max-device-width:定义输出设备的屏幕最大可见宽度。 min-device-width:定义输出设备的屏幕最小可见宽度。 min-device-height:定义输出设备的屏幕的最小可见高度。 device-height:定义输出设备的屏幕可见高度。 device-width:定义输出设备的屏幕可见宽度。 操作符not、and、only和逗号(,)可以用来构建复杂的媒体查询 (1)and 关键字用来把多个媒体属性和媒体类型组合成一条媒体查询,只有当每个属性都为真时,结果才为真。 @media all and (min-width: 700px) and (orientation: landscape) { ... } 在可视区域宽度不小于700像素并在在横屏时有效 (2)逗号: 媒体查询中使用逗号分隔,效果等同于 or 逻辑操作符,使用逗号分隔的媒体查询,任何一个媒体查询返回真,样式就是有效的。逗号分隔的列表中每个查询都是独立的,一个查询中的操作符并不影响其它的媒体查询。 @media all and (min-width: 700px),handheld and (orientation: landscape) { ... } (3)not 关键字用来对一条媒体查询的结果进行取反,在媒体查询为假时返回真,在逗号媒体查询列表中 not 仅会否定它应用到的媒体查询上而不影响其它的媒体查询 例如: @media not screen and (color), print and (color) 等价于: @media (not (screen and (color))), print and (color) (4)only关键字用来排除不支持css3媒体查询的浏览器。 对于支持Media Queries的设备来说,存在only关键字,移动设备的 Web 浏览器会忽略only关键字并直接根据后面的表达式应用样式文件。对于不支持Media Queries的设备但能够读取Media Type类型的Web浏览器,遇到only关键字时会忽略这个样式文件 所以,在使用媒体查询时,only最好不要忽略 css2,css3的版本媒体查询的区别: 一般认为媒体查询是CSS3的新增内容,实际上CSS2已经存在了,CSS3新增了媒体属性和使用场景(IE8-浏览器不支持) 在CSS2中,媒体查询只使用于<style>和<link>标签中,以media属性存在media属性用于为不同的媒介类型规定不同的样式,媒体属性是CSS3新增的内容; <link rel="stylesheet" href="css/wide.css" media="screen " /> <link rel="stylesheet" href="css/mobile.css" media="screen and (min-width:320px) and (max-width:640px)" />
常见适配范围 1 2 3 4 5 6 7 8 9 10 /* 手机等小屏幕手持设备 */ @media screen and (min-width: 320px) and (max-width: 480px) {} /* 平板之类的宽度 1024 以下设备 */ @media only screen and (min-width: 321px) and (max-width: 1024px) {} /* PC客户端或大屏幕设备: 1028px 至更大 */ @media only screen and (min-width: 1029px) {} /* 竖屏 */ @media screen and (orientation:portrait) {对应样式} /* 横屏 */ @media screen and (orientation:landscape){对应样式}
视口-viewport 1 2 3 4 5 6 7 8 9 10 11 12 13 14 许多智能手机都使用了一个比实际屏幕尺寸大很多的虚拟可视区域(980px),主要目的就是让pc页面在智能手机端阅读时不会因为实际可视区域变形。所以你看到的页面还是普通样式,即一个全局缩小后的页面。为了让智能手机能根据媒体查询匹配对应样式,让页面在智能手机中正常显示,特意添加了一个meta标签。这个标签的主要作用就是让智能手机浏览页面时能进行优化,并且可以自定义界面可视区域的尺寸和缩放级别。 语法: <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> 属性值: width:可视区域的宽度,值可为数字或关键词device-width; height:可视区域的高度,值可为数字或关键词device-height; initial-scale:页面首次被显示时的缩放级别(0-10.0),取值为1时页面按实际尺寸显示,无任何缩放 minimum-scale:设定最小缩小比例(0-10.0),取值为1时将禁止用户缩小至实际尺寸之下 maximum-scale:设定最大放大比例(0-10.0),取值为1时将禁止用户放大至实际尺寸之上 user-scalable:设定用户是否可以缩放(yes/no) 含义为:宽为手机移动设备默认宽度,初始缩放比例为1.0,最大缩放比例为原始像素大小,不允许用户放大或者缩小;
CSS3 单位 1 2 3 4 5 6 7 8 9 10 11 12 相对单位: em:表示相对于应用在当前元素的字体尺寸; ex: 表示英文字母小x的高度 ch: 数字0的宽度 rem: 根元素(html)的font-size vw: viewpoint width,视窗宽度,1vw=视窗宽度的1% vh: viewpoint height,视窗高度,1vh=视窗高度的1% vmin: vw和vh中较小的那个。 vmax: vw和vh中较大的那个。 px: 编程中使用的开发单位; 绝对单位:cm mm in pt pc px
分辨率,PPi,DPI,DPR,物理像素,逻辑像素区别 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1、屏幕尺寸:指的是屏幕对角线的长度(1英寸 = 2.54 厘米) 2、分辨率:是指宽度上和高度上最多能显示的物理像素点个数 3、点距:像素与像素之间的距离,点距和屏幕尺寸决定了分辨率大小 4、PPI:屏幕像素密度,即每英寸(1英寸=2.54厘米)聚集的像素点个数,这里的一英寸还是对角线长度; 手机屏幕距离你的眼睛10-12英寸(约25-30厘米)时,它的分辨率只要达到300PPI这个神奇数字(每英寸300个像素点)以上,你的视网膜就无法分辨出像素点了,这样的屏幕被称为“视网膜屏幕”-Retina 5、DPI:每英寸像素点,印刷行业术语。对于电脑屏幕而言和PPI是一个意思 6、设备像素(又称为物理像素): 指设备能控制显示的最小物理单位,意指显示器上一个个的点。 7、设备独立像素(也叫密度无关像素或逻辑像素):可以认为是计算机坐标系统中得一个点,这个点代表一个可以由程序使用的虚拟像素(比如: css像素),这个点是没有固定大小的,然后由相关系统转换为物理像素。 8、DPR(设备像素比):设备像素比 = 设备像素 / 逻辑像素。(在Retina屏的iphone上,DPR为2,1个css像素相当于2个物理像素) window.devicePixelRatio
其他设置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 忽略Android平台中对邮箱地址的识别 <meta name="format-detection" content="email=no" /> iPhone会将看起来像电话号码的数字添加电话连接,应当关闭(可选yes no) <meta name="format-detection" content="telephone=no" /> 当网站添加到主屏幕快速启动方式,可隐藏地址栏,仅针对ios的safari <meta name="apple-mobile-web-app-capable" content="yes" /> 在web app应用下状态条(屏幕顶部条)的颜色; <meta name="apple-mobile-web-app-status-bar-style" content="black" /> 默认值:default(白色) black(黑色) black-translucent(灰色半透明)。 网站开启对web app程序的支持 <meta name="apple-mobile-web-app-capable" content="yes" /> 添加到主屏幕后,全屏显示 <meta name="apple-touch-fullscreen" content="yes"> 就是删除默认的苹果工具栏和菜单栏 <meta name="apple-mobile-web-app-capable" content="yes" /> content有两个值”yes”和”no”,当需要显示工具栏和菜单栏时,这个行meta就不用加了,默认就是显示。 应用信息,保留系统历史记录,运动效果 <meta name=”App-Config” content=”fullscreen=yes,useHistoryState=yes,transition=yes”/>
xx 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1. pt 即 point:有两个含义: 一是印刷行业常用单位,是一个标准长度单位,绝对大小,1pt = 1/72 英寸 = 0.35mm; 二是 iOS 开发用的基本单位; 2. dp (也称 dip) dp 是安卓开发用的基准单位,在 dpi (屏幕像素密度,即每英寸包含的像素点) 为 160 的屏幕为上,1dp = 1px。为了简单起见,Android 把屏幕密度分为了 5 种:mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi; 3. sp (可缩放独立像素) 在安卓系统里,sp 与 dp 类似,不同的是 sp 可以根据用户的字体大小首选项进行缩放,而 dp 则不会。 尽量使用 dp 作为空间大小单位,sp 作为文字相关大小单位。
媒体查询 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 @media screen and (min-width : 320px ) { html { font-size : 42.66666666px ; } } @media screen and (min-width : 360px ) { html { font-size : 48px ; } } @media screen and (min-width : 375px ) { html { font-size : 50px ; } } @media screen and (min-width : 384px ) { html { font-size : 51.2px ; } } @media screen and (min-width : 400px ) { html { font-size : 53.33333334px ; } } @media screen and (min-width : 414px ) { html { font-size : 55.2px ; } } @media screen and (min-width : 424px ) { html { font-size : 56.53333334px ; } } @media screen and (min-width : 480px ) { html { font-size : 64px ; } } @media screen and (min-width : 540px ) { html { font-size : 76px ; } } @media screen and (min-width : 720px ) { html { font-size : 96px ; } } @media screen and (min-width : 750px ) { html { font-size : 100px ; } }
js 动态改变 html 的 font-size
除了媒体查询,还可以用 js 来改变 html 根元素的 font-size,下面写了 rem.js 逻辑,需要全局引用
1 2 3 4 5 6 7 8 9 10 11 function font ( ) { document .documentElement.style.fontSize = document .documentElement.clientWidth / 3.75 + "px" ; } font(); window .onresize = font;
参考的博客链接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> <meta name ="apple-mobile-web-app-capable" content ="yes" /> <meta name ="apple-mobile-web-app-status-bar-style" content ="black" /> <meta name ="format-detection" content ="telephone=no, email=no" /> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-status-bar-style" content="black" /> <meta name="format-detection" content="telphone=no, email=no" /> <meta name ="renderer" content ="webkit" /> <meta http-equiv ="X-UA-Compatible" content ="IE=edge" /> <meta name ="HandheldFriendly" content ="true" /> <meta name ="MobileOptimized" content ="320" /> <meta name ="screen-orientation" content ="portrait" /> <meta name ="x5-orientation" content ="portrait" /> <meta name ="full-screen" content ="yes" /> <meta name ="x5-fullscreen" content ="true" /> <meta name ="browsermode" content ="application" /> <meta name ="x5-page-mode" content ="app" /> <meta name ="msapplication-tap-highlight" content ="no" />