PC端的一些简单适配

不同比例的屏幕需要展示的内容一样

16:9 24:9 32:9的屏幕比例需要显示同样的内容
主要是使用的是rem布局, 这里通过调节不同分辨率的时候, 左边盒子和中间盒子的宽度比例关系保持不变

  1. 依赖模块postcss-pxtoremGithub地址, 安装该模块时, 需要先安装postcss模块,使用vue脚手架创建的项目中自带了postcss模块,也可以不用额外安装
    注意这里使用的不是最新的postcss-pxtorem而是使用 5.1.1的版本
    yarn add postcss postcss-pxtorem@5.1.1
    在与src同级的目录下添加postcss.config.js文件
module.exports = {plugins: {autoprefixer: {},// flexible配置'postcss-pxtorem': {rootValue: 100,unitPrecision: 5,propList: ['*'],selectorBlackList: [],replace: true,mediaQuery: false,minPixelValue: 0,exclude: /node_modules/i}}
}

rootValue: 100主要是因为是为了适配PC端的大小

  1. 还需要监听屏幕变化来动态赋值htmlfont-size, 这里设置的默认宽度是1920的屏幕分辨率, 默认的字体大小是100, 而且只是简单计算了宽度的比例关系
export const flexView = () => {const defalutWidth = 1920 // 默认宽度const defalueScale = 1 // 默认比例关系const html = document.querySelector('html')let defalutFontSize = 100 // 默认字体大小const resizeFunc = () => {const getWidth = window.innerWidth // 获取屏幕的宽度const currentScale = getWidth / defalutWidth // 计算当前的屏幕大小和默认宽度之间的比例// 计算的宽度比例关系 再 * 默认的字体大小,获取计算的字体大小const currentFontSize = (currentScale / defalueScale) * defalutFontSize html.style.fontSize = currentFontSize + 'px'}resizeFunc()window.addEventListener('resize', resizeFunc)
}
  1. main.js文件中导入
...
import { flexView } from '@/utils'flexView()...

固定比例的屏幕

比如已知的屏幕比例16:9, 这个时候缩放屏幕, 保持整体内容的不变, 但是窗口两边会有白边
主要是使用了transfrom:scale()的属性, 通过监听屏幕变化动态设置

这里为了方便, 直接在App.vue中写的代码

html部分, 需要有一个全局的盒子包裹内容

<template><div id="app"><div id="big-screen"><router-view /></div></div>
</template>

这里使用1920*1080的比例进行处理, 注意 css 的样式也需要保持一致

<script>
// * 设计稿尺寸(px)
const baseWidth = 1920
const baseHeight = 1080
// * 需保持的比例(默认1.77778)
const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))
export default {data() {return {// * 定时函数drawTiming: null}},mounted () {this.calcRate()window.addEventListener('resize', this.resize)},beforeDestroy () {window.removeEventListener('resize', this.resize)},methods: {calcRate () {const appRef = document.querySelector('#big-screen')if (!appRef) return// 当前宽高比const currentRate = parseFloat((window.innerWidth / window.innerHeight).toFixed(5))if (appRef) {// 第一种方式let scaleNum = 1if (currentRate > baseProportion) {// 表示分辨率变大,可能是高度变小// scale.width = ((window.innerHeight * baseProportion) / baseWidth).toFixed(5)// scale.height = (window.innerHeight / baseHeight).toFixed(5)scaleNum = (window.innerHeight / baseHeight).toFixed(5)} else {// 表示分辨率变小,可能是宽度变小// scale.height = ((window.innerWidth / baseProportion) / baseHeight).toFixed(5)scaleNum = (window.innerWidth / baseWidth).toFixed(5)}/*** 也可以直接使用 第二种方式* const scaleWidth = window.innerWidth / baseWidthconst scaleHeight = window.innerHeight / baseHeightlet scaleNum = scaleWidth < scaleHeight ? scaleWidth : scaleHeight*/appRef.style.transform = `scale(${scaleNum}) translate(-50%, -50%)`}},resize () {clearTimeout(this.drawTiming)this.drawTiming = setTimeout(() => {this.calcRate()}, 200)}}
}
</script>

这里的方式都是在屏幕分辨率变化的时候, 通过 transform 改变scale的大小变化

要想保证内容都在页面之中, 需要使用定位

#app {overflow: hidden;position: relative;width: 100vw;height: 100vh;background-color: #080f34;#big-screen {position: absolute;left: 50%;top: 50%;transform-origin: left top;width: 1920px;height: 1080px;background-color: pink;}
}

使用vw/vh进行适配

什么是视口?

在桌面端,视口指的是在桌面端,指的是浏览器的可视区域

视口单位中的“视口”,桌面端指的是浏览器的可视区域

根据CSS3规范,视口单位主要包括以下4个:

  1.vw:1vw等于视口宽度的1%。2.vh:1vh等于视口高度的1%。3.vmin:选取vw和vh中最小的那个。4.vmax:选取vw和vh中最大的那个。

vh / vw:相对于视口的高度和宽度,而不是父元素的(CSS百分比是相对于包含它的最近的父元素的高度和宽度)。1vh 等于1/100的视口高度,1vw 等于1/100的视口宽度。

比如:浏览器高度1080px,宽度为1920px, 1 vh = 1080px/100 = 10.8 px,1vw = 1920px/100 =19.2 px

vmax相对于视口的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax

vmin相对于视口的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vmin

进行适配

借助sass / sass-loader 进行处理(这里没有使用node-sass主要是因为在开发过程中遇到了未知的bug)
提一嘴, sass/node-sass/dart-sass 都是用来处理sass/scss编译为css的工具 参考地址
区别在于
1. sass 是由 ts调用 dart-sass实现的工具类,来编译 sass(以前是由单纯的 ts实现的)
2. dart-sass 是由 dart 实现的,通过 dart vm 运行 dart 是编译 sass(在 npm 可以看到该包已不被开放下载了)
3. node-sass 是由 node 调用 底层 c++ 实现的 libsass 来编译 sass

最大的区别在于深度选择器
sass/dart-sass 使用::v-deep 和 :deep() 进行处理
node-sass使用/deep/进行处理

回到正题, 安装依赖yarn add sass@1.53.0 sass-loader@8.0.2 -D 指定版本是因为高版本部分需要依赖node的高版本

  1. 新建utils.scss 文件,用来计算vh/vw math.div是用来计算的
    重要的一点是, 需要确定设计稿的宽高
@use "sass:math";
// 默认的宽度
$baseWidth: 1920px;
// 默认的高度
$baseHeight: 1080px;
@function vw($px) {@return math.div($px, $baseWidth) * 100vw;
}@function vh($px) {@return math.div($px, $baseHeight) * 100vh;
}
  1. vue.config.js中配置全局导入scss文件,这样就不用每次都手动导入官方地址
module.exports = {css: {loaderOptions: {/*** https://cli.vuejs.org/zh/guide/css.html#%E5%90%91%E9%A2%84%E5%A4%84%E7%90%86%E5%99%A8-loader-%E4%BC%A0%E9%80%92%E9%80%89%E9%A1%B9* @/ 是 src/ 的别名所以这里假设你有 `src/variables.sass` 这个文件注意:在 sass-loader v8 中,这个选项名是 "prependData"* */scss: {prependData: `@import "~@/style/utils.scss";`}}}
}
  1. 使用
div {font-size: vh(30px);color: #fff;height: vh(100px);
}
  1. 不管页面分辨率如何变化, 给定的vw/vh都是固定的, 但是元素还是会跟随变化

PC端的一些简单适配相关推荐

  1. 前端pc端、手机端适配基本知识

    前端pc端.手机端适配问题 一个项目如何做到手机.电脑共用的方式 1.第一种方式:响应式布局(栅格布局),即通过媒体查询控制css样式,从而实现一套代码手机.电脑共享.一般而言,手机.电脑共享样式,其 ...

  2. vue项目pc端使用rem进行适配 (lib-flexible+postcss-pxtorem)

    1.使用vue-cli创建项目 vue create my-app 2.安装lib-flexible与postcss-pxtorem依赖 npm install lib-flexible -Snpm ...

  3. vue 2.x 自适应pc端浏览器百分比.(简单/详细)

    做项目的时候都会要求做基础的自适应功能. 先介绍一下,我说的这个自适应就是把我们用的"px"转为"rem".废话不多说,直接上效果图. 两张图对比,一个是100 ...

  4. cocos creator屏幕适配fitHeight / fitWidth,手机端竖屏,pc端浏览器适配,pc分辨率全屏适配,血条跟随的适配

    一,使用creator3.3.2 分别实现手机端和浏览器的适配效果如下 打包web-mobile(居然会有这种需求 /流汗!) pc浏览器显示 手机端显示 1.首先在项目中设置分辨率 和默认适配 这里 ...

  5. css pc和mobile,初识pc端和mobile端CSS适配利器—vw+rem+CSS locks

    前言 大概五月份的时候,我下定决心写自己的博客系统,于是断断续续花了近一个月的时间琢磨Nestjs,写完了接口部分.六月份因为工作的原因就搁置了,说来也惭愧,直到九月中旬,才将它拾起.半个月后,后台部 ...

  6. vue怎么给pc端浏览器设置一个最小屏幕_图文讲解uni-app的PC宽屏适配方案

    天下苦平台碎片化已久. 在移动互联网以前,开发者只需幸福的面对web.进入移动互联网时代,iOS.Android.H5以及各种小程序快应用层出不穷,开发者再也幸福不起来. 学习n个技术 开发n个版本 ...

  7. pc端 移动端适配rem插件方式

    vue-屏幕适配方案 一,PC端适配 开发PC端项目,通常会要求适应各种的屏幕尺寸,并且要求浏览器缩小页面等比例变化,因此就要求写出来的前端页面是能够自适应的. 利用webpack配置px2rem-l ...

  8. 移动端页面如何优雅的适配各种屏幕,包括PC端

    本文为Varlet组件库源码主题阅读系列第八篇,读完本篇,可以了解到移动端页面如何适配各种尺寸的屏幕,包括pc端,另外如何将触摸事件转换成鼠标事件. 移动端适配 开发移动端页面,我们通常都会按照一个固 ...

  9. rem结合媒体查询适配的vue项目(PC端和移动端共用一套代码)

    一.前言 上周四接到了一个简单的纯前端网页的项目,我用了三天时间已经开发并且部署完毕(为了实现快速简易部署,使用了gitee pages进行部署,这篇文章记录我使用gitee pages部署的详细过程 ...

最新文章

  1. 转化率极高的十个网站 怎样来提高转化率
  2. Java学习笔记10
  3. mac环境下的linux光标快捷键
  4. redis缓存的安装和使用
  5. 度量相似性数学建模_【数学建模】day09-聚类分析
  6. 自然语言处理NLP,如何使用AMBERT算法建立多粒度token预训练语言模型
  7. 雷军的金山云D轮获3亿美元!投后估值达19亿美金
  8. linux服务配置大全 fedora 8 ftp 百度文库,Linux下VSFTP配置全攻略
  9. C++数据结构02--链式线性表(单链表的实现)
  10. c语言disp是什么意思及用法,disp(disp是什么功能)
  11. github 视觉测量_计算机视觉资源推荐:多人实时关键点(脸、手、足)检测库...
  12. ffmpeg 视频合并
  13. Spring定时任务高级使用篇
  14. 使用Dotfuscator混淆winphone8应用XAP
  15. C#局域网下的简单即时通讯案例
  16. FineCMS任意头像上传漏洞复现:文件的四次上传
  17. 词霸天下---词根214【-mand- = -mend- 命 令】
  18. Java点集_java-二维点集的包装
  19. linux图形界面和dos界面切换
  20. 第三届太原理工大学程序设计竞赛新生赛(未完结)

热门文章

  1. PS - 蓝色发光字
  2. 对接支付宝网站支付接口
  3. Hexo-Theme-Sakura 实践记录
  4. 磁共振计算机都是量子技术吗,IBM利用磁共振对单个原子成像,未来用于量子计算机...
  5. win7桌面计算机丢失,windows7电脑系统文件丢失怎么办
  6. excel 合格率计算方法
  7. 520还在画玫瑰?教你用MATLAB画个玫瑰花球
  8. 客户端运行过程中如果用户要卸载如何给出关闭进程提示
  9. 你知道云渲染和自己渲染有什么区别吗?
  10. Vue打包后出现的bug -favicon.ico' because it violates the following Content Security Policy direc