响应式 & 自适应
响应式布局:媒体查询(media query)
媒体查询就是对设备按照某些条件进行查询,使符合查询条件的设备显示对应的样式,从而达到不同设备显示不同样式的效果。
• 响应式页面的本质就是写了两个页面的内容(移动端+PC端)在同一个页面中,然后根据查询条件来切换该用哪个页面。
• 如果是同一个页面内之间的状态,用JS来切换状态
如果是不同屏幕之间的状态,用媒体查询来切换状态
• 适配移动端用 媒体查询 & meta viewport
• 移动端页面的交互方式和 PC 端页面不同
<style>
@media (max-width: 320px){ /*0~320*/
body{
background: pink;
}
}
@media (min-width: 321px) and (max-width: 375px){ /*321~768*/
body{
background: red;
}
}
@media (min-width: 376px) and (max-width: 425px){ /*376~425*/
body{
background: yellow;
}
}
@media (min-width: 426px) and (max-width: 768px){ /*426~768*/
body{
background: blue;
}
}
@media (min-width: 769px){ /*769~+∞*/
body{
background: green;
}
}
</style>
自适应:盒模型,图片,字体
盒模型:
基本是:flex 弹性布局 & 百分比布局 <br /> 高级:bootstarp element vant antd 等 栅栏式布局
图片:
重点:避免图片失帧
方式一:
img {
max-width: 100%;
max-height: 100%;
display: block;
margin: auto;
}
方式二:
img {
width:100%;
heigth:auto;
display: block;
}
字体:
px:
相对长度单位。像素(Pixels)。像素px是相对于显示器屏幕分辨率而言的。
px不会因为其它元素的尺寸变化而变化
px特点:比较稳定和精确,但在浏览器放大缩小会出现页面混乱。
pt:
点(Points),绝对长度单位。
印刷业上常使用的单位,磅的意思,一般用于页面打印排版。
不知道经常做设计的同学知不知道zeplin这个网站,它用的像素单位都是pt。
rem:
相对长度单位。相对于根元素(即html元素)font-size计算值的倍数。是CSS3新增的一个相对单位(root em=>rem);
rem可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。
em:
相对长度单位。相对于当前对象内文本的字体尺寸。
如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。
em特点:
(1)em的值并不是固定的
(2)em会继承父级元素的字体大小
使用em的注意点:
1. body选择器中声明Font-size=62.5%;
2. 将你的原来的px数值除以10,然后换上em作为单位;
3. 重新计算那些被放大的字体的em数值。避免字体大小的重复声明。
字号 | px | em | Percent | Points |
---|---|---|---|---|
八号 | 6px | 0.375em | 37.5% | 5pt |
七号 | 7px | 0.4375em | 43.75% | 5.5pt |
小六 | 8px | 0.5em | 50% | 6.5pt |
9px | 0.55em | 55% | 7pt | |
六号 | 10px | 0.625em | 62.5% | 7.5pt |
11px | 0.7em | 70% | 8pt | |
小五 | 12px | 0.75em | 75% | 9pt |
13px | 0.8em | 80% | 10pt | |
五号 | 14px | 0.875em | 87.5% | 10.5pt |
15px | 0.95em | 95% | 11pt | |
小四 | 16px | 1em | 10% | 12pt |
17px | 1.05em | 105% | 13pt | |
18px | 1.125em | 112.5% | 13.5pt | |
四号 | 19px | 1.2em | 120% | 14pt |
20px | 1.25em | 125% | 14.5pt | |
小三 | 21px | 1.3em | 130% | 15pt |
三号 | 22px | 1.4em | 140% | 16pt |
23px | 1.45em | 145% | 17pt | |
小二 | 24px | 1.5em | 150% | 18pt |
veu-rem适配:
公司设计稿:750尺寸 是 iPhone6/7/8 屏幕宽度的 2倍视图
方式一:
第一步,先用vue-cli快速构建出一个项目,然后,安装postcss,postcss-pxtorem,postcss-loader,postcss-import,postcss-url;
npm i --save postcss postcss-pxtorem postcss-loader postcss-import postcss-url
第二步,在项目根目录下添加.postcssrc.js文件,在里面写上
module.exports = {
plugins: {
'postcss-pxtorem':
{
rootValue: 32,//根目录的字体大小是32px
propList: ['*'],
minPixelValue: 2//最小转换单位是2px
}
}
};
第三步,动态设置根字体大小!一段简单的js插入在head里面;
<script>
(function() {
function autoRootFontSize() {
document.documentElement.style.fontSize = Math.min(screen.width,document.documentElement.getBoundingClientRect().width) / 750 * 32 + 'px';
// 取screen.width和document.documentElement.getBoundingClientRect().width的最小值;除以750,乘以32;懂的起撒,就是原本是750大小的32px;如果屏幕大小变成了375px,那么字体就是16px;也就是根字体fontSize大小和屏幕大小成正比变化!是不是很简单
}
window.addEventListener('resize', autoRootFontSize);
autoRootFontSize();
})();
</script>