1、px和视口
1)
- 像素分两种 物理像素和 css像素 我们使用的是css像素
- 那么我们使用的px是固定的吗?
- 我们尝试使用默认 font-size: 16px 看看在pc端和移动端的展示情况
- pc
- 移动端
2)两个重要的概念
- 设备像素
1 DPR = 物理像素/分辨率 在不缩放的情况下,一个css像素就对应一个dpr,也就是说,在不缩放- 1 CSS像素 = 物理像素/分辨率
<meta id="viewport" name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1; user-scalable=no;">
3) 需要注意的点 px 可以自适应
2、媒体查询 @media
@media screen and (max-width: 960px){
body{
background-color:#FF6699
}
}
@media screen and (max-width: 780px){
body{
background-color:#00FF66;
}
}
@media screen and (max-width: 550px){
body{
background-color:#6633FF;
}
}
@media screen and (max-width: 350px){
body{
background-color:#FFFF00;
}
}
定义了几套样式,通过max-width设置样式生效时的最大分辨率,上述的代码分别对分辨率在0~350px,350px~550px,550px~780px以及780px~960px的屏幕设置了不同的背景颜色
- 问题在于
跨度比较大,而且针对不同场景需要 配置不同的内容
3、百分比
- 子元素的百分比完全相对于直接父元素,height百分比相对于height,width百分比相对于width...盒模型元素
4、rem + px2rem
- 小问题:在响应式布局中,必须通过
js来动态控制根元素font-size的大小1) 相对于根元素 font-size 布局- 默认情况下,
html元素的font-size为16px,所以: 1 rem = 16px - 为了计算方便,通常可以
将html的font-size设置成: html{ font-size: 62.5% } - 设置后
1 rem = 10px
2)
- 下面这个很常用 而且 很重要的是
常规写 px 到页面转成 rem - px2rem的原理也很简单,重点在于预处理以px为单位的css文件,处理后将所有的px变成rem单位
- 两种常见方式 方法一:
1) webpack loader的形式: npm install px2rem-loader
2) 在webpack的配置文件中:
module.exports = {
// ...
module: {
rules: [{
test: /\.css$/,
use: [{
loader: 'style-loader'
}, {
loader: 'css-loader'
}, {
loader: 'px2rem-loader',
// options here
options: {
remUni: 75,
remPrecision: 8
}
}]
}]
}
方法二:
webpack中使用postcss plugin:npm install postcss-loader
var px2rem = require('postcss-px2rem');
module.exports = {
module: {
loaders: [
{
test: /\.css$/,
loader: "style-loader!css-loader!postcss-loader"
}
]
},
postcss: function() {
return [px2rem({remUnit: 75})];
}
}
5、vw vh
1)
- 网页视口宽度
- 网页视口高度除去网页header footer两个导航栏之后的高度
2)
- 单位换算
将px换算成vw单位,只要确定视图的窗口大小(布局视口),如果我们将布局视口设置成分辨率大小,比如对于iphone6/7 375*667的分辨率,px可以通过如下方式换算成vw:
1px = (1/375)*100 vw
也可以通过postcss的相应插件,预处理css做一个自动的转换,postcss-px-to-viewport可以自动将px转化成vw。
postcss-px-to-viewport的默认参数为:
var defaults = {
viewportWidth: 320,
viewportHeight: 568,
unitPrecision: 5,
viewportUnit: 'vw',
selectorBlackList: [],
minPixelValue: 1,
mediaQuery: false
};
通过指定视窗的宽度和高度,以及换算精度,就能将px转化成vw。