前端大屏适配几种方案

这篇具有很好参考价值的文章主要介绍了前端大屏适配几种方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       记录一下前端大屏的几种适配方案。
我们是1920*1080的设计稿。


       大屏是适配是前端开发必不可少的技能,适配各种大屏也是为了给用户更好的体验。


一、方案一:rem+font-size

       动态设置HTML根字体大小和body字体大小,会使用到lib-flexible.js插件
lib-flexible.js

(function flexible(window, document) {
  var docEl = document.documentElement
  var dpr = window.devicePixelRatio || 1

  // adjust body font size
  function setBodyFontSize() {
    if (document.body) {
      document.body.style.fontSize = (16 * dpr) + 'px'
    }
    else {
      document.addEventListener('DOMContentLoaded', setBodyFontSize)
    }
  }
  setBodyFontSize();

  function setRemUnit() {
    var rem = docEl.clientWidth / 24
    docEl.style.fontSize = rem + 'px'
  }

  setRemUnit()

  // reset rem unit on page resize
  window.addEventListener('resize', setRemUnit)
  window.addEventListener('pageshow', function (e) {
    if (e.persisted) {
      setRemUnit()
    }
  })

  // detect 0.5px supports
  if (dpr >= 2) {
    var fakeBody = document.createElement('body')
    var testElement = document.createElement('div')
    testElement.style.border = '.5px solid transparent'
    fakeBody.appendChild(testElement)
    docEl.appendChild(fakeBody)
    if (testElement.offsetHeight === 1) {
      docEl.classList.add('hairlines')
    }
    docEl.removeChild(fakeBody)
  }
}(window, document))

我们可以将它下载下来。打开js文件,将设计稿的宽度(1920px)平均分成24等份,每一份为80px。将这个值设置为html字体大小,既1rem = 80px; 24rem = 1920px。


tips:rem是根据html字体大小来计算的,假如html字体为16px,则1rem就等于16px;
前端大屏适配几种方案
       在移动端通常会分成10份,PC端分成24份。
       安装cssrem插件,根节点的字体大小设置为80px。这个是px单位转rem的参考值。
前端大屏适配几种方案
配置插件的基准值:
前端大屏适配几种方案
这样的话放我们在书写px的适合,这个插件就会自动帮我们转化成rem。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      body {
        width: 24rem;
        height: 13.5rem;
        border: 3px solid red;
        box-sizing: border-box;
      }
      ul {
        display: flex;
        flex-direction: row;
        flex-wrap: wrap;
        width: 100%;
        height: 100%;
      }

      li {
        width: 33.333%;
        height: 50%;
        font-size: 0.375rem;
        list-style: none;
        border: 3px solid green;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
      <li>6</li>
    </ul>
  </body>
  <script src="./js/lib-flexible.js"></script>
</html>

1.查看适配情况

1.1 1920*1080情况下

前端大屏适配几种方案

1.2 3840*2160(4k屏)情况下

3840也是分成24等份:3840 / 24 = 160
前端大屏适配几种方案

1.3 7680*2160 超宽屏下

超宽屏情况下只显示了上半部分,这种适配方式比较适合16:9的情况下使用,后面会有其他方案解决这个问题。
前端大屏适配几种方案

二、方案二:vw(单位)

      直接使用vw单位,屏幕宽度默认为100vw,那么100vw = 1920px;1vw = 19.2px。这个也是使用cssrem插件,直接将body的宽高(1920px * 1080px),将px转成vw单位。
前端大屏适配几种方案
这种方案和第一个方案类似,超宽屏的情况下也是不能全部显示。


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      body {
        width: 100vw;
        height: 56.25vw;
        border: 3px solid red;
        box-sizing: border-box;
      }
      ul {
        display: flex;
        flex-direction: row;
        flex-wrap: wrap;
        width: 100%;
        height: 100%;
      }

      li {
        width: 33.333%;
        height: 50%;
        font-size: 1.5625vw;
        list-style: none;
        border: 3px solid green;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
      <li>6</li>
    </ul>
  </body>
</html>

三、方案三:scale(缩放)强烈推荐

      很多的大屏适配都是使用的这种方案。
这种方案的原理就是根据宽高比例进行缩放。

1、根据宽度比率进行缩放

(宽度比率=网页当前宽度/设计稿宽度)

<script>
    // 设计稿:1920 * 1080
    // 1.设计稿尺寸
    let targetWidth = 1920;
    // 2.拿到当前设备(浏览器)的宽度
    // document.documentElement  获取html的宽度
    let currentWidth =
      document.documentElement.clientWidth || document.body.clientWidth;
    // 3.计算缩放比率(屏幕过宽,根据高度计算缩放比例)
    let scaleRatio = currentWidth / targetWidth; 
    // 4.开始缩放网页
    document.body.style = `transform: scale(${scaleRatio})`;
  </script>

      上面这种根据宽度比例进行缩放的,针对1920 * 1080,3840 * 2160(4k)是没有问题的,但是在超宽屏的情况下还是存在只显示一半的问题。
分析原因:

我们的设计稿:
1920 * 1080 => 要适配 (1920*2=3840, 1080*2=2160, 4k屏) 3840 * 2160
也要适配=> ( 1920*4 = 7680 : 1080 * 2 = 2160) 7680 * 2160 

我们当前是根据宽度比率进行缩放的:

先设配3840 * 2160

scaleRatio = 3840 / 1920  = 2

根据这个缩放比率

我们的设计稿宽高都会被缩放两倍

1920 * 2 = 3840

1080 * 2 = 2160



设配7680 * 2160

scaleRatio = 7680 / 1920  =  4

根据这个宽度比例我们的设置稿宽高都会被缩放41920 * 4 = 7680

1080 * 4  = 4240 
这个原先的比例是 4 : 2,现在变成了 44 ,这也是为什么我们只看到一半高度的原因。 

2、动态计算

      动态计算网页宽高比,决定是按照宽度的比例还是高度的比例进行缩放。

  <script>
    // 设计稿:1920 * 1080
    // 1.设计稿尺寸
    let targetWidth = 1920;
    let targetHeight = 1080;

    let targetRatio = 16 / 9; // 宽高比率 (宽 / 高)

    // 2.拿到当前设备(浏览器)的宽度和高度
    let currentWidth =
      document.documentElement.clientWidth || document.body.clientWidth;

    let currentHeight =
      document.documentElement.clientHeight || document.body.clientHeight;

    // 3.计算缩放比率(屏幕过宽,根据高度计算缩放比例)
		// 若currentWidth是4k屏宽度 3840 除于 我们设计稿的宽度 1920  3840/1920 = 2
		// 这样页面就行进行2倍缩放
    let scaleRatio = currentWidth / targetWidth; // 参照宽度进行缩放(默认情况下)
		
    // 当前页面宽高比例,当页面越宽currentRatio值就越大
    let currentRatio = currentWidth / currentHeight;
		
		// 判断是根据宽度进行缩放,还是根据高度进行缩放
    if (currentRatio > targetRatio) {
      // 根据高度进行网页的缩放
      scaleRatio = currentHeight / targetHeight; // 参照高度进行缩放(屏幕很宽的情况下)
      document.body.style = `transform: scale(${scaleRatio}) translateX(-50%)`;
    } else {
      // 根据宽度进行网页的缩放
      document.body.style = `transform: scale(${scaleRatio})`;
    }
  </script>

2.1、超宽屏最终适配效果

前端大屏适配几种方案


完整demo代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      body {
        position: relative;
        width: 1920px;
        height: 1080px;
        border: 3px solid red;
        /* 设置缩放原点 */
        transform-origin: left top;
        box-sizing: border-box;
      }
      ul {
        display: flex;
        flex-direction: row;
        flex-wrap: wrap;
        width: 100%;
        height: 100%;
      }

      li {
        width: 33.333%;
        height: 50%;
        font-size: 30px;
        list-style: none;
        border: 3px solid green;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
      <li>6</li>
    </ul>
  </body>
  <script>
    // 设计稿:1920 * 1080
    // 设配目标:1920 * 1080 ( 1 : 1) | 3840* 2160 ( 2 : 2 ) | 7680 * 2160 ( 4 : 2)

    // 1.设计稿尺寸
    let targetWidth = 1920;
    let targetHeight = 1080;

    let targetRatio = 16 / 9; // 宽高比率 (宽 / 高)

    // 2.拿到当前设备(浏览器)的宽度
    let currentWidth =
      document.documentElement.clientWidth || document.body.clientWidth;
    let currentHeight =
      document.documentElement.clientHeight || document.body.clientHeight;
    // 3.计算缩放比率(屏幕过宽,根据高度计算缩放比例)
    let scaleRatio = currentWidth / targetWidth; // 参照宽度进行缩放(默认情况下)

    // 当前宽高比例
    let currentRatio = currentWidth / currentHeight;

    if (currentRatio > targetRatio) {
      scaleRatio = currentHeight / targetHeight; // 参照高度进行缩放(屏幕很宽的情况下)
      document.body.style = `transform: scale(${scaleRatio}) translateX(-50%); left: 50%;`;
    } else {
      // 4.开始缩放网页
      document.body.style = `transform: scale(${scaleRatio})`;
    }
  </script>
</html>

      最近看网上一直在说前端,Java的行情不好,不够也确实如此,我好几个朋友都在找工作,也是说现在工作挺难找的,不知道讲何区何从,怕是会转行吧。唉,工作是为了生活,当时在当下的社会里,很多人包括我自己,都被工作给填满了,没有空余的时间发展自己的爱好了,挺难过的,我这种从农村出来的人,刚出社会也是信心满满,想要干出一番事业,何曾想被每天的工作堆满,可能很多人从出生就注定了只能当螺丝钉啊,但是我希望我这个螺丝钉是在最重要的部分,哈哈,见笑了,吐槽一下就行了。生活还要继续,明天会更好,加油吧,同志。文章来源地址https://www.toymoban.com/news/detail-413323.html

到了这里,关于前端大屏适配几种方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue项目业务实现,视频监控-文件流,大屏适配方案(v-scale-screen),websocket前端

    最近把以前的业务场景及解决方案整理了一下,具体实现的工具如下: 监控-视频文件流==video.js + videojs-contrib-hls 大屏适配方案== v-scale-screen websocket==sockjs-client+ webstomp-client 下载video插件, 使用方法 (1)导入 (2)模板中写入标签 (3)页面渲染时调用函数,渲染视频 option

    2024年02月16日
    浏览(41)
  • 最简单的大屏适配解决方案---autofit.js

    在工作开发当中,我们避免不了要去做大屏。那么做大屏其实最难的点和最核心的问题就是适配, 下面为大家介绍最好用的大屏解决方案——autofit.js。 效果图展示,可根据窗口大小进行自动适配。 使用方法: 1.npm下载: 2.项目中引入使用: 3.init()初始化加载:注意一定要

    2024年02月08日
    浏览(42)
  • 前端可视化大屏适配/自适应三种实现方式

    可视化大屏适配/自适应现状 三大常用方式 vw/vh方案 概述:按照设计稿的尺寸,将px按比例计算转为vw和vh 优点:可以动态计算图表的宽高,字体等,灵活性较高,当屏幕比例跟 ui 稿不一致时,不会出现两边留白情况 缺点:每个图表都需要单独做字体、间距、位移的适配,比

    2024年02月15日
    浏览(76)
  • 记录一下C#深拷贝的几种方式

    一、C#中预定义数据类型         1》值类型          2》引用类型 两种类型的不同点:        概念: 值类型直接存储其值,而引用类型存储对值的引用        存储: 值类型存储在堆栈 (stack) 上,而引用类型存储在托管堆上(managed heap)。 当使用值类型,进行赋值的

    2023年04月08日
    浏览(49)
  • 数据大屏--->前端实时更新数据的几种方式

    优点:最大的优点就是实现简单 缺点:(1)无用的请求多,客户端不知道服务端什么时候数据更新,只能不停的向服务端发送请求, (2)数据实时性差:客户端还是需要一段时间(3s)才能拿到最新的数据 优点:解决了短轮询每隔几秒向服务端频繁发送请求的问题; 缺点:(1)服务端资源大量消

    2024年04月17日
    浏览(64)
  • 记录--让我们来深入了解一下前端“三清”是什么

    在前端开发中,我们经常听到关于“三清”的说法,即 window 、 document 、 Object 。这三者分别代表了 BOM(浏览器对象模型)、DOM(文档对象模型)以及 JS 的顶层对象。在这个体系中,我们通过 JavaScript 与浏览器进行深度交互,构建出丰富多彩的网页应用。同时,JS 类也是前端

    2024年02月05日
    浏览(57)
  • Unity - UI适配方案记录

    1.背景图 界面背景图建议至少宽于21:9;其中16:9的范围为精细范围,12:9的范围为真机最小可见范围。 2.组件 各组件通过设置RectTransform属性来达到正确适配的效果。 3.预览 在unity中,设置Game窗口左上角的分辨率即可预览效果。注意:最终效果需以真机测试为准。 在所有需要缩

    2024年02月06日
    浏览(48)
  • 记录--盘点前端实现文件下载的几种方式

    前端涉及到的文件下载还是很多应用场景的,那么前端文件下载有多少种方式呢?每种方式有什么优缺点呢?下面就来一一介绍。 通过 a 标签的 download 属性来实现文件下载,这种方式是最简单的,也是我们比较常用的方式,先来看示例代码: 就上面的这个示例,我们点击下

    2024年02月13日
    浏览(53)
  • 目前最稳定和高效的UI适配方案,【时光隧道,前端开发特点

    points_geometry = new THREE.Geometry(); points_material = new THREE.PointsMaterial({ color: 0xffff50, size: 30, transparent: true, opacity: 0.8, map: texture, depthTest: false, blending: THREE.AdditiveBlending, }); points_geometry2 = new THREE.Geometry(); points_material2 = new THREE.PointsMaterial({ color: 0x99ffcc, size: 30, transparent: true, opacity: 0.8

    2024年04月16日
    浏览(34)
  • 前端实现读取word文件,并将其进行原样式展示的几种方案

    在前端直接读取并原样展示Word文档是一个相对复杂的任务,因为Word文档的格式(如.doc或.docx)与Web技术栈使用的格式(HTML、CSS)不兼容。要实现这一功能,通常需要将Word文档转换为Web友好的格式。以下是实现这一目标的几种方法: 1. 使用第三方库 一些JavaScript库可以帮助你

    2024年04月16日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包