ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 响应式 Web 设计 - 媒体查询 ## 媒体查询 **CSS3 @media 查询** 如果文档宽度小于 300 像素则修改背景演示(background-color): ~~~ @media screen and (max-width: 300px) { body { background-color:lightblue; } } ~~~ ### 定义和使用 使用 @media 查询,你可以针对不同的媒体类型定义不同的样式。 @media 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@media 是非常有用的。 当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。 ### 浏览器支持 使用 @media 查询,你可以针对不同的媒体类型定义不同的样式。 ![](https://box.kancloud.cn/1499564ceb9009aced050aa8da6c5635_1273x730.png) ### CSS 语法 ~~~ @media mediatype and|not|only (media feature) { /* CSS-Code;*/ } ~~~ 你也可以针对不同的媒体使用不同 stylesheets : ~~~ <link rel="stylesheet" media="mediatype and|not|only (media feature)" href="mystylesheet.css"> ~~~ ### 媒体类型(mediatype) | 值 | 描述 | | --- | --- | | all | 用于所有设备 | | print | 用于打印机和打印预览 | | screen | 用于电脑屏幕,平板电脑,智能手机等。 | | speech | 应用于屏幕阅读器等发声设备 | 被废弃的类型: | 值 | 描述 | | --- | --- | |aural |已废弃。用于语音和声音合成器| |braille |已废弃。 应用于盲文触摸式反馈设备| |embossed |已废弃。 用于打印的盲人印刷设备| |handheld |已废弃。 用于掌上设备或更小的装置,如PDA和小型电话| |projection |已废弃。 用于投影设备| |tty |已废弃。 用于固定的字符网格,如电报、终端设备和对字符有限制的便携设备| |tv |已废弃。 用于电视和网络电视| ### 媒体功能(media feature) | 值 | 描述 | | --- | --- | |aspect-ratio| 定义输出设备中的页面可见区域宽度与高度的比率| |color| 定义输出设备每一组彩色原件的个数。如果不是彩色设备,则值等于0| |color-index| 定义在输出设备的彩色查询表中的条目数。如果没有使用彩色查询表,则值等于0| |device-aspect-ratio| 定义输出设备的屏幕可见宽度与高度的比率。| |device-height| 定义输出设备的屏幕可见高度。| |device-width |定义输出设备的屏幕可见宽度。| |grid |用来查询输出设备是否使用栅格或点阵。| |height |定义输出设备中的页面可见区域高度。| |max-aspect-ratio| 定义输出设备的屏幕可见宽度与高度的最大比率。| |max-color |定义输出设备每一组彩色原件的最大个数。| |max-color-index| 定义在输出设备的彩色查询表中的最大条目数。| |max-device-aspect-ratio| 定义输出设备的屏幕可见宽度与高度的最大比率。| |max-device-height| 定义输出设备的屏幕可见的最大高度。| |max-device-width| 定义输出设备的屏幕最大可见宽度。| |max-height| 定义输出设备中的页面最大可见区域高度。| |max-monochrome |定义在一个单色框架缓冲区中每像素包含的最大单色原件个数。| |max-resolution| 定义设备的最大分辨率。| |max-width| 定义输出设备中的页面最大可见区域宽度。| |min-aspect-ratio| 定义输出设备中的页面可见区域宽度与高度的最小比率。| |min-color |定义输出设备每一组彩色原件的最小个数。| |min-color-index |定义在输出设备的彩色查询表中的最小条目数。| |min-device-aspect-ratio| 定义输出设备的屏幕可见宽度与高度的最小比率。| |min-device-width| 定义输出设备的屏幕最小可见宽度。| |min-device-height |定义输出设备的屏幕的最小可见高度。| |min-height| 定义输出设备中的页面最小可见区域高度。| |min-monochrome |定义在一个单色框架缓冲区中每像素包含的最小单色原件个数| |min-resolution |定义设备的最小分辨率。| |min-width |定义输出设备中的页面最小可见区域宽度。| |monochrome| 定义在一个单色框架缓冲区中每像素包含的单色原件个数。如果不是单色设备,则值等于0| |orientation| 定义输出设备中的页面可见区域高度是否大于或等于宽度。| |resolution| 定义设备的分辨率。如:96dpi, 300dpi, 118dpcm| |scan| 定义电视类设备的扫描工序。| |width| 定义输出设备中的页面可见区域宽度。| ## 应用 之前写的网页它是响应式的,但在小屏幕上并不能友好的展示。 媒体查询可以帮我们解决这个问题。我们可以在设计稿的中间添加断点,不同的断点有不同的效果。 **桌面设备** ![](https://img.w3cschool.cn/attachments/uploads/2015/06/rwd_desktop.png) **手机设备** ![](https://img.w3cschool.cn/attachments/uploads/2015/06/rwd_phone.png) 使用媒体查询在 768px 添加断点: 当屏幕 (浏览器窗口) 小于 768px, 每一列的宽度是 100%: ~~~ /* For desktop: */ .col-1 {width: 8.33%;} .col-2 {width: 16.66%;} .col-3 {width: 25%;} .col-4 {width: 33.33%;} .col-5 {width: 41.66%;} .col-6 {width: 50%;} .col-7 {width: 58.33%;} .col-8 {width: 66.66%;} .col-9 {width: 75%;} .col-10 {width: 83.33%;} .col-11 {width: 91.66%;} .col-12 {width: 100%;} @media only screen and (max-width: 768px) { /* For mobile phones: */ [class*="col-"] { width: 100%; } } ~~~ ### 为移动端优先设计 移动端优先意味着在设计桌面和其他设备时优先考虑移动端的设计。 这就意味着我们必须对 CSS 做一些改变。 我们在屏幕小于 768px 进行样式修改,同样在屏幕宽度大于 768px 时也需要修改样式。以下是移动端优先实例: ~~~ /* 为移动端设计: */ [class*="col-"] { width: 100%; } @media only screen and (min-width: 768px) { /* For desktop: */ .col-1 {width: 8.33%;} .col-2 {width: 16.66%;} .col-3 {width: 25%;} .col-4 {width: 33.33%;} .col-5 {width: 41.66%;} .col-6 {width: 50%;} .col-7 {width: 58.33%;} .col-8 {width: 66.66%;} .col-9 {width: 75%;} .col-10 {width: 83.33%;} .col-11 {width: 91.66%;} .col-12 {width: 100%;} } ~~~ 你也可以使用添加其他的断点: 在屏幕为 600px 时添加媒体查询,并设置新的样式(屏幕大于600px但小于768px): ~~~ /* For mobile phones: */ [class*="col-"] { width: 100%; } @media only screen and (min-width: 600px) { /* For tablets: */ .col-m-1 {width: 8.33%;} .col-m-2 {width: 16.66%;} .col-m-3 {width: 25%;} .col-m-4 {width: 33.33%;} .col-m-5 {width: 41.66%;} .col-m-6 {width: 50%;} .col-m-7 {width: 58.33%;} .col-m-8 {width: 66.66%;} .col-m-9 {width: 75%;} .col-m-10 {width: 83.33%;} .col-m-11 {width: 91.66%;} .col-m-12 {width: 100%;} } @media only screen and (min-width: 768px) { /* For desktop: */ .col-1 {width: 8.33%;} .col-2 {width: 16.66%;} .col-3 {width: 25%;} .col-4 {width: 33.33%;} .col-5 {width: 41.66%;} .col-6 {width: 50%;} .col-7 {width: 58.33%;} .col-8 {width: 66.66%;} .col-9 {width: 75%;} .col-10 {width: 83.33%;} .col-11 {width: 91.66%;} .col-12 {width: 100%;} } ~~~ > 注意两组类样式是相同的,但名称不同 (col- 和 col-m-): 以上代码看起来很多余,但是他可以根据屏幕大小自动设置不同的样式,所以还是非常必要的。 ~~~ <div class="row"> <div class="col-3 col-m-3">...</div> <div class="col-6 col-m-9">...</div> <div class="col-3 col-m-12">...</div> </div> ~~~ > 针对桌面设备: 第一和第三部分跨越 3 列。中间部分跨域 6 列。 针对平板设备: 第一跨域 3列,第二部分跨越 9 列,第三部分跨域 12 列: ### 方向:横屏/竖屏 结合CSS媒体查询,可以创建适应不同设备的方向(横屏landscape、竖屏portrait等)的布局。 **语法:** ~~~ orientation:portrait | landscape ~~~ + portrait:指定输出设备中的页面可见区域高度大于或等于宽度 + landscape: 除portrait值情况外,都是landscape ~~~ @media only screen and (orientation: landscape) { body { background-color: lightblue; } } ~~~ > 如果是横屏背景将是浅蓝色: