这里介绍个方案包含5个点:1、meta viewport;2、媒体查询;3、动态rem方案;4、对rem微调;5、其他细节补充。
一、meta viewport
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
在head标签内部加上这段代码。
该meta标签的作用是让当前viewport的宽度等于设备的宽度,同时不允许用户手动缩放。也许允不允许用户缩放不同的网站有不同的要求,但让viewport的宽度等于设备的宽度。
width=device-width: 让当前viewport宽度等于设备的宽度
user-scalable=no: 禁止用户缩放
initial-scale=1.0: 设置页面的初始缩放值为不缩放
maximum-scale=1.0: 允许用户的最大缩放值为1.0
minimum-scale=1.0: 允许用户的最小缩放值为1.0
二、媒体查询(响应式)
1、格式一
@media ()and(){}
//满足()里的条件,就执行大括号里css的样式
举例:
<style>
@media (max-width:320px){
body{
background:red;
}
}
@media (min-width:321px) and (max-width:320px){
body{
background:orange;
}
}
@media (min-width:376px) and (max-width:425px){
body{
background:green;
}
}
@media (min-width:426px) and (max-width:768px){
body{
background:blue;
}
}
@media (min-width:769px){
body{
background:grey;
}
}
</style>
2、格式二
并举例
<link rel="stylesheet" href="style.css"media="(max-width:320px)">
注意点: 1、link标签会下载好,但是是否生效取决于media的条件; 2、有PC端经验,就有移动端经验,只是多了一个media查询; 3、通过添加多个css样式来满足不同的屏幕宽度;
三、动态rem方案
1rem等于根元素html的font-size的值,那么可以调整根元素的font-size值来调整页面缩放后的各个元素的尺寸和定位。
在script标签加入这段代码:
<script>
var pageWidth=window.innerWidth //获取屏幕宽度
document.documentElement.style.fontSize= `${pageWidth/60}px`
</script>
此处,fontSizede的值为屏幕宽的十分之一,那么在写CSS的时候可以这样写:
.xxx{
width:0.4rem;
height:0.2rem;
margin:0.05rem 0.05rem;
float:left;
}
用sass将px转化为rem:
@function px( $px ){
@return $px/$designWidth*10 + rem;
}
$designWidth: 320px;
那么1rem=32px
四、对动态rem进行微调
1、rem都是小数很不方便。所以让 html 的 font-size 的尺寸等于 window.innerWidth/10;
2、浏览器默认可设置的最小字体大小为12px,浏览器默认可设置的最小字体大小为12px,浏览器默认可设置的最小字体大小为12px;
3、在精细的地方,就直接写像素,混用px rem em
- 比如border:1px solid red;
- 比如页面字体的大小就直接写font-size:16px
五、其他补充
1、px em rem vh vw的区别
px:表示像素
em:一个字的高度 //1em == 自己font-size的值
rem:root em // 根元素html的font-size
vh:viewport height 视口高度=100vh
vw:viewport width 视口宽度=100vw
2、body默认字体为16px,其中chrome默认可设置的最小字体大小为12px,更改body的font-size是rem是不会变的,更改的必须是html的font-size。
3、百分比布局和整体缩放布局的区别
- 百分比布局:无法让高度跟着屏幕宽度改变而进行有比例的改变,高度和宽度无法做任何的配合;
- 整体缩放布局:一切单位以宽度为基准。