文章目录
思考
- 页面布局能否随着屏幕大小变化而变化?
- 流式布局和flex布局主要针对于宽度布局,那高度如何设置?
- 怎么样让屏幕发生变化的时候元素高度和宽度等比例缩放?
一、rem基础
rem单位
rem(root em)是一个相对单位,类似于em,em是父元素字体大小。
不同的是,rem
的基准是
相对于html元素的字体大小
。
比如,根元素(html)设置font-size=12px;非根元素设置width:2rem;则换成px表示就是24px
二、媒体查询
1.什么是媒体查询
媒体查询(media query
)是css3新语法。
2.语法规范
@media mediatype and|not|only (media feature) {
CSS-Code;
}
- 用@media开头,注意@符号
- mediatype媒体类型
- 关键字and not only
- media feature媒体特性 必须有小括号包含
(1)mediatype查询类型
将不同的终端设备划分为不同的类型,称为媒体类型
值 | 解释说明 |
---|---|
all | 用于所有设备 |
用于打印机和打印预览 | |
screen | 用于电脑屏幕,平板电脑,智能手机等 |
(2)关键字
关键字将媒体类型或多个媒体特性连接到一起做为媒体查询的条件。
- and:可以将多个媒体特性连接到一起,相当于“且”的意思。
- not:排除某个媒体类型,相当于“非”的意思,可以省略。
- only:指定某个特定的媒体类型,可以省略。
(3)媒体特性
每种媒体类型都具有各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格。暂且了解三个。
注意它们要加小括号包含
值 | 解释说明 |
---|---|
width | 定义输出设备中页面可见区域的宽度 |
min-width | 定义输出设备中页面最小可见区域宽度 |
max-width | 定义输出设备中页面最大可见区域宽度 |
3.案例:根据页面宽度改变背景颜色
(1)实现思路
- 按照从大到小或者从小到大的思路
- 注意我们有最大值max-width和最小值min-width都是包含等于的
- 当屏幕小于540像素,背景颜色变为蓝色(x<=539)
- 当屏幕大于等于540像素并且小于等于969像素的时候背景颜色为绿色(540=<x<=969)
- 当屏幕大于等于970像素的时候,背景颜色为红色(x>=970)
注意:为了防止混乱,媒体查询我们要按照从小到大或者从大到小的顺序来写,但是我们最喜欢的还是从小到大来写,这样代码更简洁
。
/* 1.媒体查询一般按照从小到大或者从大到小的顺序来 */
/* 2.小于540页面 的颜色变为蓝色 */
@media screen and (max-width:539px) {
body {
background-color: blue;
}
}
/* 3.540~970页面的颜色改为绿色 */
/* @media screen and (min-width:540px) and (max-width:969px){
body{
background-color: green;
}
} */
@media screen and (min-width:540px) {
body {
background-color: green;
}
}
/* 4.大于等于970 页面的颜色改为红色 */
@media screen and (min-width:969px) {
body {
background-color: red;
}
}
/* 5.screen还有and必须带上不能省略 */
/* 6.数字后面必须跟单位970px 这个px不能省略 */
第三档会覆盖第二弹中冲突的部分,也就是大于等于970px的部分,因此第二档只有540到969之间有效。
4.媒体查询+rem实现元素动态大小变化
rem单位是跟着html走的,有了rem页面元素可以设置不同大小尺寸
媒体查询可以根据不同设备宽度来修改样式
媒体查询+rem 就可以实现不同设备宽度,实现页面元素大小的动态变化
5.案例:媒体查询+rem实现元素变化
<style>
/* html{
font-size: 100px;
} */
@media screen and (min-width:640px) {
html {
font-size: 50px;
}
}
@media screen and (min-width:960px) {
html {
font-size: 100px;
}
}
.top {
height: 1rem;
font-size: .5rem;
background-color: skyblue;
color: #fff;
text-align: center;
line-height: 1rem;
}
</style>
</head>
<body>
<div class="top">购物车</div>
</body>
6.引入资源(理解)
当样式比较繁多的时候,我们可以针对不同的媒体使用不同stylesheets(样式表)。
原理,就是直接在link中判断设备的尺寸,然后引用不同的css文件。
(1)语法规范
<link rel="stylesheet" media="mediatype and|not|only(media feature) "href="mystylesheet.css">