背景
媒介查询是 css3 的一个新语法,用来对不同尺寸大小的设备来写不同的css样式。
语法
@media not|only mediatype and (mediafeature and|or|not mediafeature) {
// css代码
}
- not:否
- only:仅当
- and:将多个媒体查询规则组合成单条媒体查询
- 逗号:分隔多个媒体查询,将它们组合为一个规则。
媒体类型mediatype | 说明 |
---|---|
all | 用于所有设备 |
用于打印机和打印预览 | |
screen(最常用) | 用于电脑屏幕,平板电脑,智能手机等。 |
speech | 应用于屏幕阅读器等发声设备 |
媒体功能mediafeature | 说明 |
---|---|
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 | 定义输出设备中的页面可见区域宽度。 |
举例
比如想在 iphone 的这三个手机型号里执行某个 css 样式,可以这样写
@media /* iphoneX */ screen and (device-width: 375px) and (min-device-height: 724px) and (-webkit-device-pixel-ratio: 3),
/* iphoneXS Max */ screen and (device-width: 414px) and (min-device-height: 724px) and (-webkit-device-pixel-ratio: 3),
/* iphoneXR */ screen and (device-width: 414px) and (min-device-height: 724px) and (-webkit-device-pixel-ratio: 2) {
// css
}
这些手机尺寸的如何查询可以看我这篇文章 https://blog.csdn.net/weixin_43972437/article/details/119717046
也可以随便打开一个浏览器看这里
在 link 标签中使用
<!-- 宽度大于 900px 的屏幕使用该样式 -->
<link rel="stylesheet" media="screen and (min-width: 900px)" href="widescreen.css">
<!-- 宽度小于或等于 600px 的屏幕使用该样式 -->
<link rel="stylesheet" media="screen and (max-width: 600px)" href="smallscreen.css">
其他使用方式
.test {
width: 100%;
/* iphoneX */
@media screen and (min-device-height: 724px) {
width: 90%;
}
}
或者
.test {
width: 100%;
}
@media screen and (min-device-height: 724px) {
.test {
width: 90%;
}
}
小程序中使用
小程序中的使用略微不同,因为要考虑 tabbar 和顶部导航的高度
正常情况可视区域:
iPhone X:375*812
Iphone6:375*667
Iphone8p:414*736
有顶部导航时可视区域:
iPhone X:375*(812-88=724)(导航栏高度88)
Iphone6:375*(667-64=603)(导航栏高度64)
Iphone8p:414*(736-64=672)(导航栏高度64)(实际要按照414*736来算)
有顶部导航时、有底部tabbar可视区域:
iPhone X:375*(812-88=724-82=642)(tabbar高度82)
Iphone6:375*(667-64=603-48=555)(tabbar高度48)
Iphone8p:414*(736-64=672-48=624)(tabbar高度48)(实际要按照414*736来算)
比如要对 iPhone X 来做媒介查询,就得用有顶部导航时可视区域大小 375 * 724
,这个大小来计算了。如果有 tabbar 就用 375 * 642
来计算。
也可以用小程序专属的 match-media
标签,https://developers.weixin.qq.com/miniprogram/dev/component/match-media.html
<match-media min-width="300" max-width="600">
<view>当页面宽度在 300 ~ 600 px 之间时展示这里</view>
</match-media>
<match-media min-height="400" orientation="landscape">
<view>当页面高度大于等于 400 px 且屏幕方向为纵向时展示这里</view>
</match-media>