PC端的一些简单适配
PC端的一些简单适配
不同比例的屏幕需要展示的内容一样
16:9
24:9
32:9
的屏幕比例需要显示同样的内容
主要是使用的是rem
布局, 这里通过调节不同分辨率的时候, 左边盒子和中间盒子的宽度比例关系保持不变
- 依赖模块
postcss-pxtorem
Github地址, 安装该模块时, 需要先安装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
端的大小
- 还需要监听屏幕变化来动态赋值
html
的font-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)
}
- 在
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
的高版本
- 新建
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;
}
- 在
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";`}}}
}
- 使用
div {font-size: vh(30px);color: #fff;height: vh(100px);
}
- 不管页面分辨率如何变化, 给定的
vw/vh
都是固定的, 但是元素还是会跟随变化
PC端的一些简单适配相关推荐
- 前端pc端、手机端适配基本知识
前端pc端.手机端适配问题 一个项目如何做到手机.电脑共用的方式 1.第一种方式:响应式布局(栅格布局),即通过媒体查询控制css样式,从而实现一套代码手机.电脑共享.一般而言,手机.电脑共享样式,其 ...
- vue项目pc端使用rem进行适配 (lib-flexible+postcss-pxtorem)
1.使用vue-cli创建项目 vue create my-app 2.安装lib-flexible与postcss-pxtorem依赖 npm install lib-flexible -Snpm ...
- vue 2.x 自适应pc端浏览器百分比.(简单/详细)
做项目的时候都会要求做基础的自适应功能. 先介绍一下,我说的这个自适应就是把我们用的"px"转为"rem".废话不多说,直接上效果图. 两张图对比,一个是100 ...
- cocos creator屏幕适配fitHeight / fitWidth,手机端竖屏,pc端浏览器适配,pc分辨率全屏适配,血条跟随的适配
一,使用creator3.3.2 分别实现手机端和浏览器的适配效果如下 打包web-mobile(居然会有这种需求 /流汗!) pc浏览器显示 手机端显示 1.首先在项目中设置分辨率 和默认适配 这里 ...
- css pc和mobile,初识pc端和mobile端CSS适配利器—vw+rem+CSS locks
前言 大概五月份的时候,我下定决心写自己的博客系统,于是断断续续花了近一个月的时间琢磨Nestjs,写完了接口部分.六月份因为工作的原因就搁置了,说来也惭愧,直到九月中旬,才将它拾起.半个月后,后台部 ...
- vue怎么给pc端浏览器设置一个最小屏幕_图文讲解uni-app的PC宽屏适配方案
天下苦平台碎片化已久. 在移动互联网以前,开发者只需幸福的面对web.进入移动互联网时代,iOS.Android.H5以及各种小程序快应用层出不穷,开发者再也幸福不起来. 学习n个技术 开发n个版本 ...
- pc端 移动端适配rem插件方式
vue-屏幕适配方案 一,PC端适配 开发PC端项目,通常会要求适应各种的屏幕尺寸,并且要求浏览器缩小页面等比例变化,因此就要求写出来的前端页面是能够自适应的. 利用webpack配置px2rem-l ...
- 移动端页面如何优雅的适配各种屏幕,包括PC端
本文为Varlet组件库源码主题阅读系列第八篇,读完本篇,可以了解到移动端页面如何适配各种尺寸的屏幕,包括pc端,另外如何将触摸事件转换成鼠标事件. 移动端适配 开发移动端页面,我们通常都会按照一个固 ...
- rem结合媒体查询适配的vue项目(PC端和移动端共用一套代码)
一.前言 上周四接到了一个简单的纯前端网页的项目,我用了三天时间已经开发并且部署完毕(为了实现快速简易部署,使用了gitee pages进行部署,这篇文章记录我使用gitee pages部署的详细过程 ...
最新文章
- 转化率极高的十个网站 怎样来提高转化率
- Java学习笔记10
- mac环境下的linux光标快捷键
- redis缓存的安装和使用
- 度量相似性数学建模_【数学建模】day09-聚类分析
- 自然语言处理NLP,如何使用AMBERT算法建立多粒度token预训练语言模型
- 雷军的金山云D轮获3亿美元!投后估值达19亿美金
- linux服务配置大全 fedora 8 ftp 百度文库,Linux下VSFTP配置全攻略
- C++数据结构02--链式线性表(单链表的实现)
- c语言disp是什么意思及用法,disp(disp是什么功能)
- github 视觉测量_计算机视觉资源推荐:多人实时关键点(脸、手、足)检测库...
- ffmpeg 视频合并
- Spring定时任务高级使用篇
- 使用Dotfuscator混淆winphone8应用XAP
- C#局域网下的简单即时通讯案例
- FineCMS任意头像上传漏洞复现:文件的四次上传
- 词霸天下---词根214【-mand- = -mend- 命 令】
- Java点集_java-二维点集的包装
- linux图形界面和dos界面切换
- 第三届太原理工大学程序设计竞赛新生赛(未完结)
热门文章
- PS - 蓝色发光字
- 对接支付宝网站支付接口
- Hexo-Theme-Sakura 实践记录
- 磁共振计算机都是量子技术吗,IBM利用磁共振对单个原子成像,未来用于量子计算机...
- win7桌面计算机丢失,windows7电脑系统文件丢失怎么办
- excel 合格率计算方法
- 520还在画玫瑰?教你用MATLAB画个玫瑰花球
- 客户端运行过程中如果用户要卸载如何给出关闭进程提示
- 你知道云渲染和自己渲染有什么区别吗?
- Vue打包后出现的bug -favicon.ico' because it violates the following Content Security Policy direc