美文网首页需要近期研究的项目
使用动态rem方案适配不同屏幕尺寸

使用动态rem方案适配不同屏幕尺寸

作者: Yandhi233 | 来源:发表于2022-02-10 00:49 被阅读0次

大屏可视化项目在还原设计图时,需要考虑不同的屏幕尺寸,所以需要使用动态适配的方案来尽可能还原设计图。

要求

设计图比例为 16 / 9,需要在不同屏幕尺寸(浏览器视口尺寸)下,大屏页面都能保证比例不变,元素和字体大小根据屏幕大小自动适配。

设计方案

设计图尺寸为 16:9,屏幕尺寸有两种可能:

  • 屏幕宽度:屏幕高度 > 16:9

此时设计图需要等比例放大,直到 显示高度 = 屏幕高度
由于始终 设计图宽度 : 设计图高度 = 16:9
所以最终 显示宽度 = 屏幕高度 * (16 / 9)显示高度 = 显示宽度 / (16 / 9)

  • 屏幕宽度:屏幕高度 <= 16:9

此时始终 显示宽度 = 屏幕宽度显示高度 = 显示宽度 / (16 / 9)

rem

rem 就是 <html>元素的 font-size,默认为 16px (浏览器默认font-size)
em 是字体中 ‘一个字’ 的宽度
px 像素大小

考虑到需要动态适配,不能使用像素单位,所以单位以屏幕宽度为标准 页面显示宽度 / 100 = 1rem,就能完美还原设计稿;
在页面渲染之前,使用 JS 获取设备宽度并设置 页面显示宽度 = 100rem

计算公式
通过计算公式,只需要知道一个元素在设计图中的尺寸就可以计算出在页面的显示尺寸;
可以通过自定义一个函数来计算出页面显示尺寸,从而达到动态适配的效果

实施步骤

index.htmlhead中获取浏览器宽高

  <script>
    const clientWidth = document.documentElement.clientWidth
    const clientHeight = document.documentElement.clientHeight
    window.pageWidth = clientWidth / clientHeight > 16 / 9 ? clientHeight * (16 / 9) : clientWidth
    const pageHeight = pageWidth / (16 / 9)
    const string = `
        <style>html{
          font-size: ${pageWidth / 100}px
        }</style>
      `
    document.write(string)
  </script>

body 中将获得的尺寸给根组件

<body>
<div id="root"></div>
<script>
  root.style.width = pageWidth + 'px'
  root.style.height = pageHeight + 'px'
  root.style.marginTop = (clientHeight - pageHeight) / 2 + 'px'
</script>
<script type="module" src="/src/main.tsx"></script>
</body>

给根组件 div 样式

<style>
  #root {
    margin: 0 auto;
    background: lightgreen
  }
</style>

效果如下:


随意改变窗口大小,刷新之后页面始终保持水平垂直居中,而且页面元素大小自适应,页面字体始终为 pageWidth / 100 px,也就是 1rem。

将总结出来的计算公式封装成一个函数,使用时只需要引入文件即可

@function px($n) {
  @return $n / 设计图宽度* 100rem;
}

//  使用
.x {
  height: px(100)
  width: px(100)
}

相关文章

  • 使用动态rem方案适配不同屏幕尺寸

    大屏可视化项目在还原设计图时,需要考虑不同的屏幕尺寸,所以需要使用动态适配的方案来尽可能还原设计图。 要求 设计图...

  • 手机屏幕适配方案 ( REM )

    REM 简介 rem 是屏幕适配中得到重用的长度单位。使用 rem 前端开发者可以很方便的在各种屏幕尺寸下,通过等...

  • Flutter:适配学习

    flutter 屏幕适配方案,让你的UI在不同尺寸的屏幕上都能显示合理的布局! Flutter的适配可以使用flu...

  • vue3.x移动端适配px2rem

    1、什么是px2rem px2rem是一个插件能将px自动转换为rem,以适配各种不同的屏幕尺寸。前端开发可以直接...

  • iOS屏幕尺寸适配

    屏幕适配方法 针对不同屏幕尺寸的适配,主要有3种方式:1.不同屏幕尺寸下,元素的尺寸是固定的;2.不同屏幕尺寸下,...

  • Android屏幕适配

    屏幕适配相关概念主流适配方案 一、屏幕适配相关概念 1、屏幕尺寸单位:英寸表示:手机对角线的物理尺寸 2、屏幕分辨...

  • React 配置 rem (移动端适配)

    移动端适配方案介绍 在移动端中,为了设配不同的设备,通常使用rem来做适配。 rem是通过根元素进行适配的,网页中...

  • 移动端方面记录(持续更新)

    移动端适配 动态rem方案html的font-size 为 屏幕宽度 / 10记得给body写一个font-siz...

  • iOS 关于全面屏适配的方案及UI在不同尺寸下适配方案

    iOS 关于全面屏适配的方案及UI在不同尺寸下适配方案 iOS 关于全面屏适配的方案及UI在不同尺寸下适配方案

  • rem的使用

    rem主要用于移动web开发,以适配不同尺寸的屏幕。下面看两个实际案例效果图: 通过代码发现页面元素是通过rem控...

网友评论

    本文标题:使用动态rem方案适配不同屏幕尺寸

    本文链接:https://www.haomeiwen.com/subject/rhmgkrtx.html