CSS移动端适配方案

移动端适配方案

1、viewport适配(全部等比缩放)

假设设计稿的宽高是 750*1334

根据设计稿标准(750px宽度开发页面),写完之后页面和元素自动缩小,适配375宽度的屏幕

head:

<meta name="viewport" content="width=750,initial-scale=0.5">

initial-scale = 屏幕的宽度 / 设计稿的宽度

为了适配其他屏幕,需要动态地设置initial-scale的值

const WIDTH = 750 // 设计稿的宽度
const mobileAdapter = () => {
  let scale = screen.width / WIDTH // 求initial-scale的值
  let content = `width=${WIDTH}, initial-scale=${scale}, maximum-scale=${scale}, minimum-scale=${scale}`
  let meta = document.querySelector('meta[name=viewport]')
  // 如果meta不存在,则创建一个meta
  if (!meta) {
    meta = document.createElement('meta')
    meta.setAttribute('name', 'viewport')
    document.head.appendChild(meta)
  }
  meta.setAttribute('content',content)
}
// 调用
mobileAdapter()
// 屏幕翻转时再次执行
window.onorientationchange = mobileAdapter

缺点就是边线问题,不同尺寸下,边线的粗细是不一样的(等比缩放后),全部元素都是等比缩放,实际显示效果可能不太好


2、vw适配(部分等比缩放)

假如设计稿的宽高是 750*1334

对设计稿的标注进行转换,把px转换成vw。比如说页面的元素字体的大小是32px,那换算成vw就是(100/750)*32

对于需要等比缩放的元素,CSS使用转换后的vw单位

对于不需要缩放的元素,比如说边框的阴影,则使用固定单位px

为了方便开发,利用自定义属性,CSS变量:

const WIDTH = 750
// 算出1像素等于多少vw,0.13333...
document.documentElement.style.setProperty('--width', (100 / WIDTH))
header {
  font-size: calc(28vw * var(--width)); // 28像素的字体,根据屏幕宽度动态换算成vw
}

3、rem适配(部分等比缩放)

假设计稿的宽高是 750*1334

假设设计稿的某个字体大小是 40px, 手机屏幕上的字体大小应为 (420/750)*40 = 22.4px (体验好)。

换算成rem(假设html的font-size=100px),则这个字体的大小为22.4/100 = 0.224 rem

根据不同的屏幕宽度,设置html的font-size的值:

const WIDTH = 750 //设计稿尺寸
const setView = () => {
  document.documentElement.style.fontSize = (100 * screen.width / WIDTH) + 'px'
}
window.onorientationchange = setView
setView()

对于需要等比缩放的元素,使用rem单位。

对于不需要等比缩放的元素,使用px固定单位。

使用sass库的时候:

JS 处理还是一样的。

@function px2rem($px) {
  @return $px * 1rem / 100;
}

header {
  font-size: px2rem(28);
}

4、弹性盒适配(合理布局)

以上三种适配方案,都是等比缩放,放到ipad上的时候,因为设计稿是以手机屏幕设计的,页面元素会很大很丑。

有些场景下,并不需要页面正题缩放,有时候只需要合理的布局就可以了。

<meta name="viewport" content="width=device-width">

然后使用flex布局

什么样的页面需要做适配(等比缩放)呢?

  • 页面中的布局是栅格化的。

换了屏幕之后,到底有多宽有多高很难去做设置,整体都需要改变,所以需要整体的缩放。

  • 头屏大图,宽度自适应,高度固定的话,对于不同的屏幕,形状就会发生改变(变形)。
  • 宽度变化后,高度也要保持等比例变化。

以上所有的适配,都是宽度的适配,但是在某些场景下,也会出现高度的适配。

  • 比如大屏幕,需要适配很多电视尺寸,要求撑满屏幕。
  • 此时就需要考虑宽高都要vh去表示,中间的大块去自适应。
posted @ 2022-08-12 11:16  笔下洛璃  阅读(906)  评论(0编辑  收藏  举报