2. 媒体查询
2.1 媒体查询是CSS3新语法
- 使用媒体查询,可以针对不同的媒体类型定义不同的样式/
- 媒体查询可以针对不同的屏幕尺寸设置不同的样式
- 当你重置浏览器大小的过程中,页面也会根据浏览器的宽带和高度重新渲染页面。
- 目前针对很多苹果手机、安卓手机、平板等设备都用到多媒体查询。
2.2 语法格式
@media mediatype and|not|only (media feature) {
CSS-Code;
}
- 用@media开头 注意@符号
- mediatype媒体类型
- 关键字and not only
- media feature 媒体特性 必须有小括号包含
2.2.1 mediatype查询类型
将不同的终端设备划分成不同的类型,称为媒体类型
- all:用于所有设备
- print:用于打印机和打印预览
- screen: 用于电脑屏幕、平板电脑智能手机等
2.2.2 关键字
关键字将媒体类型或者多个媒体特性连接到一起作为媒体查询的条件
- and:可以将多个媒体特性连接到一起,相当于“且”的意思。
- not:排除某个媒体类型,相当于“非”的意思,可以省略。
- only:指定某个特点的媒体类型,可以省略。
2.2.3 媒体特性
每种媒体类型都具有各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格。我们暂且了解3个。注意要加小括号。
- width:定义输出设备中页面可见区域的宽度
- min-width:定义输出设备中页面最小可见区域的宽度
- max-width:定义输出设备中页面最大可见区域的宽度
举例:
<style>
/* @media mediatype and|not|only (media feature) {
CSS-Code;
} */
/* 在我们屏幕上 并且 最大宽度是800像素 设置我们想要的样式 */
/* 如果在电脑屏幕上显示,且显示宽度小于等于800px,就将body的样式改成pink色 */
@media screen and (max-width: 800px) {
body {
background-color: pink;
}
}
@media screen and (max-width: 500px) {
body {
background-color: purple;
}
}
/* 若这两个media交换顺序,那么紫色就会被覆盖 */
</style>
2.3 案例:根据页面宽度改变背景颜色
<style>
/* min-width和max-width都是包含等于号的 */
/* 1. 媒体查询一般按照从大到小 或者 从小到大的顺序来 */
/* 2. 小于540px页面的背景颜色变为蓝色 */
@media screen and (max-width: 539px) {
body {
background-color: blue;
}
}
/* 3. 540~970px 大于等于540px 小于970px 我们的页面颜色改为绿色 */
/* @media screen and (min-width:540px) and (max-width:969px) {
body {
background-color: green;
}
} */
/* 利用CSS样式的层叠性简化540~970代码如下 */
@media screen and (min-width:540px) {
body {
background-color: green;
}
}
/* 4. 大于等于970px,将页面设置为红色 */
@media screen and (min-width:970px) {
body {
background-color: red;
}
}
</style>
注意:为了防止混乱,媒体查询我们要按照从小到大或者从大到小是顺序来写,但是我们最喜欢的还是从小到大来写,这样代码更加简洁。
2.4 案例:媒体查询+rem实现元素动态大小变化
<body>
<div class="top">购物车</div>
</body>
<style>
@media screen and (min-width: 320px) {
html {
font-size: 50px;
}
}
@media screen and (min-width: 640px) {
html {
font-size: 100px;
}
}
.top {
height: 1rem;
/* 这里的文字大小设置为html文字大小的一半 */
font-size: .5rem;
background-color: green;
color: #fff;
text-align: center;
/* 文字垂直居中 */
line-height: 1rem;
}
/* 这里可以保证字体高度(大小)是盒子高度的一半 */
</style>
2.5 引入资源(现阶段了解)
当样式比较多的时候,我们可以针对不同的媒体使用不同的sylesheets(样式),原理就是直接在link中判断设备的尺寸,然后引用不同的CSS文件。比如可以为大屏幕写一个样式,为小屏幕也写一个样式,然后在引入文件的时候对屏幕大小做出判断,判断引入大屏幕的样式还是小屏幕的样式。
语法规范:
<link rel="stylesheet" media="mediatype and|not|only (media feature)" href="mystylesheet.css">
<style>
/* 引入资源即:针对不同的屏幕尺寸 调用不同的css文件 */
/* 当我们屏幕大于等于640px以上的,我们让div一行显示两个 */
/* 当我们屏幕小于640 我们让div一行显示一个 */
/* 媒体查询最好的方法是从小到大 */
</style>
<!-- <link rel="stylesheet" media="mediatype and|not|only (media feature)" href="mystylesheet.css"> -->
<link rel="stylesheet" href="05_style320.css" media="screen and (min-width:320px)">
<link rel="stylesheet" href="05_style640.css" media="screen and (min-width:640px)">
<body>
<div>1</div>
<div>2</div>
</body>