阿孜去面试-屏幕适配

99 阅读2分钟

社会不会来适应你,如果你没有提前准备(自适应),那么你就要积极学习(响应式),适应这个不断变化的世界。

Ringo_Bakuto_SE.jpg << 移动端和pc端的页面都是怎么适配的?

>> 自适应:通过检测视口分辨率,来判断当前访问的设备是:pc端、平板、手机,从而请求服务层,返回不同的页面(好几套)

响应式布局:根据屏幕大小变化,页面的内容排版布局会自动调整变动。(一套)

// rem
rem(font size of the root element)是指相对于根元素<html>来做计算的字体大小单位。
html { font-size: 75px }
1rem = 75px
4rem = 300px

// vw
vw是基于viewport视窗的长度单位。1vw等于window.innerWidth1%
设备物理宽度为375px时,1vw = 3.75px

// 百分比

// dpr 是什么
设备像素比device pixel ratio简称dpr,即物理像素和设备独立像素的比值。
想象一下,我们的屏幕像素是375,应该有375列小灯泡,但现在有750个小灯泡(物理像素),每两个小灯泡显示一个像素,那么dpr就是2// 1px问题
// 当我们使用rem作为单位时,假设2dpr的屏幕要展示1px高度的border,转化为px就是0.5
// 但浏览器对0.5对解释不一样
chrome:把小于0.5px的当成0,大于等于0.5px的当作1px
firefox:会把大于等于0.55px的当作1px
safiri:把大于等于0.75px的当作1px
// 解决方法 transform的scale

几种方案
// Flexible(前手淘做法,不建议使用)

// 使用插件postcss-px-to-viewport 可以选择输出vw和rem(使用这个就够了)
'postcss-px-to-viewport': {
  unitToConvert: 'px', // 需要转换的单位,默认为"px"
  viewportWidth: 375, // 视窗的宽度,对应设计稿的宽度
  viewportUnit: 'vw', // 指定需要转
  fontViewportUnit: 'vw', // 字体使用的视口单位
  unitPrecision: 13 // 指定`px`转换为视窗单位值的小数后 x位数
   ...
}

html {
  font-size: 26.6666666666666667vw;
  margin: 0 auto;
  body {
    // 重置字体大小
    font-size: 0.14rem;
  }
}

@media screen and (min-width: 768px) {
  html {
    font-size: 9vw;
    max-width: 768px;
  }
}

参考:

juejin.cn/post/722079…

juejin.cn/post/700500…

juejin.cn/post/686787…