定制开发小程序【Vue】屏幕适配(rem响应式布局)

目录


定制开发小程序响应式布局有两种方法,定制开发小程序看自己想要哪种。

方法一:百分比

定制开发小程序用百分比去写元素的宽度,定制开发小程序然后让子元素撑起父元素的高度

  1. .parent {
  2. width: 50%;
  3. }
  4. .child {
  5. width:100%;
  6. height:100px;
  7. }

方法二:vh、vw

vw、vh定制开发小程序是基于视口的布局方案,所以这个meta定制开发小程序元素的视口必须声明。(定制开发小程序解决宽高自动适配)

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  1. .box{
  2. width:50vw;
  3. height: 20vh;
  4. line-height: 20vh;
  5. font-size: 1.5rem;
  6. background-color: yellow;
  7. }

50vw定制开发小程序的意思是占视口宽度的一半,20vh占视口高度的20%,随着视口的变化自适应。

在所需页面中选择合适的方法,然后开始进行下面的配置

一、所有页面适配,页面布局一致(不使用)

postcss-px2rem和postcss-px2rem-exclude二选一看自己需求

第一步:使用插件修改单位 

使用-px2rem----修改单位(包括第三方组件)

第一步,npm下载插件————帮我们自动将px单位转换成rem单位(主要是转换不是我们自己写的页面尺寸,比如elementUI中的尺寸就会改变,除了行内)

npm install postcss-px2rem --save

第二步,在根目录src中新建util目录下新建rem.js等比适配文件

  1. // rem等比适配配置文件
  2. // 基准大小
  3. const baseSize = 14
  4. // 设置 rem 函数
  5. function setRem () {
  6. // 当前页面宽度相对于 1920宽的缩放比例,可根据自己需要修改。
  7. const scale = document.documentElement.clientWidth / 1920
  8. // 设置页面根节点字体大小(“Math.min(scale, 2)” 指最高放大比例为2,可根据实际业务需求调整)
  9. document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px'
  10. }
  11. // 初始化
  12. setRem()
  13. // 改变窗口大小时重新设置 rem
  14. window.onresize = function () {
  15. setRem()
  16. }

第三步,”在main.js中引入适配文件

import './util/rem'

第四步,到vue.config.js中配置插件

  1. // 引入等比适配插件
  2. const px2rem = require('postcss-px2rem')
  3. // 配置基本大小
  4. const postcss = px2rem({
  5. // 基准大小 baseSize,需要和rem.js中相同
  6. // remUnit: 14 代表 1rem = 14px; 所以当你一个14px值时,它会自动转成 (14px/14)rem
  7. remUnit: 14
  8. })
  9. // 使用等比适配插件
  10. module.exports = {
  11. lintOnSave: true,
  12. css: {
  13. loaderOptions: {
  14. less: {
  15. javascriptEnabled: true,
  16. },
  17. postcss: {
  18. plugins: [
  19. postcss,
  20. ],
  21. },
  22. },
  23. },
  24. }

注意:UI框架部分组件使用JavaScript将css作为内联样式直接写在html标签内,打包适配时不会读取相关css,所以要配置相关样式,在style中需要" !important "进行样式覆盖。

使用postcss-px2rem-exclude---修改单位(不包括第三方组件)

第一步:npm下载插件————帮我们自动将px单位转换成rem单位(此插件的功能是为了排除 node_modules 中的所有第三方插件,所以第三方组件库的样式就不会被受到影响。比如elementUI就不会转换单位了)

npm  install postcss-px2rem-exclude --save

第二步:在postcss.config.js 文件下修改配置

  1. module.exports = {
  2. plugins: {
  3. autoprefixer: {},
  4. "postcss-px2rem-exclude": {
  5. remUnit: 75,
  6. exclude: /node_modules|folder_name/i
  7. }
  8. }
  9. }

使用postcss-plugin-px2rem-----指定某一文件下所以css文件不进行单位转换(推荐)

第一步:npm下载插件————帮我们自动将px单位转换成rem单位(配置 是否对 某个文件夹下的所有css文件不进行从px到rem的转换)

npm i postcss-plugin-px2rem

第二步:配置vue.config.js

  1. module.exports = {
  2. css: {
  3. loaderOptions: {
  4. postcss: {
  5. plugins: [
  6. require('postcss-plugin-px2rem')({
  7. rootValue: 16, //换算基数, 默认100 ,这样的话把根标签的字体规定为1rem为50px,这样就可以从设计稿上量出多少个px直接在代码中写多上px了。
  8. // unitPrecision: 5, //允许REM单位增长到的十进制数字。
  9. //propWhiteList: [], //默认值是一个空数组,这意味着禁用白名单并启用所有属性。
  10. // propBlackList: [], //黑名单
  11. exclude: /(node_module)/, //默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)/ 。如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值
  12. // selectorBlackList: [], //要忽略并保留为px的选择器
  13. // ignoreIdentifier: false, //(boolean/string)忽略单个属性的方法,启用ignoreidentifier后,replace将自动设置为true。
  14. // replace: true, // (布尔值)替换包含REM的规则,而不是添加回退。
  15. mediaQuery: false, //(布尔值)允许在媒体查询中转换px。
  16. minPixelValue: 3 //设置要替换的最小像素值(3px会被转rem)。 默认 0
  17. }),
  18. ]
  19. }
  20. }
  21. },
  22. }

第二步:屏幕自适应

使用.js+vscode的插件cssrem----屏幕自适应大小

第一步,在src中新建util目录下新建flexible.js(原版是分成10等分,这里我分成了24等分)

  1. (function flexible(window, document) {
  2. var docEl = document.documentElement
  3. var dpr = window.devicePixelRatio || 1
  4. // adjust body font size
  5. function setBodyFontSize() {
  6. if (document.body) {
  7. document.body.style.fontSize = (12 * dpr) + 'px'
  8. }
  9. else {
  10. document.addEventListener('DOMContentLoaded', setBodyFontSize)
  11. }
  12. }
  13. setBodyFontSize();
  14. // set 1rem = viewWidth / 10 原版是10等分,这里把屏幕平均划分为24等分 1920
  15. function setRemUnit() {
  16. var rem = docEl.clientWidth / 24
  17. docEl.style.fontSize = rem + 'px'
  18. }
  19. setRemUnit()
  20. // reset rem unit on page resize
  21. window.addEventListener('resize', setRemUnit)
  22. window.addEventListener('pageshow', function (e) {
  23. if (e.persisted) {
  24. setRemUnit()
  25. }
  26. })
  27. // detect 0.5px supports
  28. if (dpr >= 2) {
  29. var fakeBody = document.createElement('body')
  30. var testElement = document.createElement('div')
  31. testElement.style.border = '.5px solid transparent'
  32. fakeBody.appendChild(testElement)
  33. docEl.appendChild(fakeBody)
  34. if (testElement.offsetHeight === 1) {
  35. docEl.classList.add('hairlines')
  36. }
  37. docEl.removeChild(fakeBody)
  38. }
  39. }(window, document))

第二步,在main.js中引入文件

第三步,再配合cssrem插件使用进行伸缩适配

因为是按照1920设计稿写的,而且我把flexible修改了24等分,所以1920/24=80,这里的基准改为80。你们可以按照自己的要求来写。

然后在项目中使用rem单位后就可以实现伸缩适配啦。

原先是

改变后,无论是小屏还是大屏,就和设计稿上的是一致的

二、根据对应尺寸进行对应适配(媒体查询)

在styles/index.js中添加所需适配的尺寸

  1. @media screen and(max-width: 1024px) {
  2. body,
  3. html {
  4. font-size: 14px
  5. }
  6. }
  7. @media screen and(min-width: 1100px) {
  8. body,
  9. html {
  10. font-size: 16px
  11. }
  12. }
  13. @media screen and(min-width: 1280px) {
  14. body,
  15. html {
  16. font-size: 16px;
  17. }
  18. }
  19. @media screen and(min-width: 1366px) {
  20. body,
  21. html {
  22. font-size: 16px;
  23. }
  24. }
  25. @media screen and(min-width: 1440px) {
  26. body,
  27. html {
  28. font-size: 16px;
  29. }
  30. }
  31. @media screen and(min-width: 1680px) {
  32. body,
  33. html {
  34. font-size: 18px;
  35. }
  36. }
  37. @media screen and(min-width: 1920px) {
  38. body,
  39. html {
  40. font-size: 33px;
  41. }
  42. }

然后再main.js中引入样式

import '@/styles/index.scss' // global css

需要修改单位就下载对应插件修行,具体过程看上面

注意:媒体查询不能和flexible.js一起使用,若是一起使用媒体查询无效,这个我倒后期会改。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发