vite框架下大屏适配方案

前情

最近打算写几个大屏,作为后续工作的一个简历吧。毕竟现在技术类的找工作不单单的是得会忽悠,还得有点儿作品。

怎么好像在说UI岗一样,在网上扒了扒效果,想要写的炫酷一些,页面开发完了以后在公司给一哥们演示的时候拉跨了。

家里的电脑屏幕本身是2K的,而公司里的是普通的1080p的。

原本在家里适配的非常好的页面在公司非常别扭,而且大量的宽度、高度、字体因为是写死的,在1080p的屏幕上出现了换行。

唉,百密一疏啊!页面效果、动画展示、数据加载等等都考虑到了,就是没考虑屏幕兼容...

方案选择

紧急调研了一下,现在比较主流的兼容方案一般有以下几种:

  1. 相对单位适配:
  • 使用相对单位如vw、vh、vmin、vmax,这些单位会根据屏幕的宽度和高度进行适配,从而实现不同屏幕下的适配。
  • 但是问题在于这种情况下可能出现小屏幕拥挤、大屏幕空旷的问题。
  1. 媒体查询适配:
  • 通过媒体查询(@media)来实现不同屏幕下的适配。各种屏幕都考虑到了,并且针对性的进行优化,能够保证效果相对来说处于最佳。
  • 但是问题在于,如果要兼容的屏幕很多,那么代码就会很复杂,并且容易出错。
  1. 缩放适配
  • 通过使用transform: scale() 来实现不同屏幕下的适配。简单快捷,几乎不用额外的考虑极端情况。
  • 但是问题在于,缩放后的页面可能不太好看。尤其是特殊屏幕可能会出现大黑边的情况。

层层筛选还是打断用相对单位做,但是可以使用 less 函数来简化这个过程。

简单地说就是使用 less 函数让他在编译过程中自动的将 px 转化为 vw/vh,实现相对比较完美的显示效果。

代码开发

  1. 首先安装 less
bash 复制代码
npm i less --save-dev
  1. 创建一个util.less作为工具函数
less 复制代码
@charset "utf-8";

// 默认设计稿的宽度
@designWidth: 1920;

// 默认设计稿的高度
@designHeight: 1080;

// px 转 vw
.px2vw(@name, @px) {
  @{name}: (@px / @designWidth) * 100vw;
}

// px 转 vh
.px2vh(@name, @px) {
  @{name}: (@px / @designHeight) * 100vh;
}
  1. 在vite中使用 preprocessorOptions 为每个less插入工具函数
ts 复制代码
export default defineConfig({
    css: {
        preprocessorOptions: {
            less: {
                additionalData: `@import "@/assets/css/utils.less";`
            }
        }
    }
})
  1. vue 中使用
html 复制代码
<style scope lang='less'>
    .card {
        .px2vw(width, 400);
        .px2vh(height, 300);
    }
</style>

总结

非常简单的一个小方案,但是却实现了相当不错的效果。适配上来说也还算比较的好吧,但是肯定是不如媒体查询那么完美。

不过从实现上来说比媒体查询的难度下降了不是一个量级。

最大的难度或许来自于你在 css 中写 .px2vw(width, 200) 这种别扭的感觉。

相关推荐
梦65019 小时前
Vue 单页面应用 (SPA) 与 多页面应用 (MPA) 对比
前端·javascript·vue.js
清铎19 小时前
大模型训练_week3_day15_Llama概念_《穷途末路》
前端·javascript·人工智能·深度学习·自然语言处理·easyui
岛泪19 小时前
把 el-cascader 的 options 平铺为一维数组(只要叶子节点)
前端·javascript·vue.js
Kiyra20 小时前
阅读 Netty 源码关于 NioEventLoop 和 Channel 初始化部分的思考
运维·服务器·前端
冰暮流星20 小时前
javascript的switch语句介绍
java·前端·javascript
做科研的周师兄21 小时前
【MATLAB 实战】|多波段栅格数据提取部分波段均值——批量处理(NoData 修正 + 地理信息保真)_后附完整代码
前端·算法·机器学习·matlab·均值算法·分类·数据挖掘
da_vinci_x21 小时前
图标量产:从“手绘地狱”到“风格克隆”?Style Reference 的工业化实战
前端·游戏·ui·prompt·aigc·设计师·游戏美术
利刃大大21 小时前
【ES6】变量与常量 && 模板字符串 && 对象 && 解构赋值 && 箭头函数 && 数组 && 扩展运算符 && Promise/Await/Async
开发语言·前端·javascript·es6
天若有情67321 小时前
ES6 模块与 CommonJS 的区别详解
前端·javascript·es6
大猫会长21 小时前
postgreSQL中,RLS的using与with check
开发语言·前端·javascript