Vue实现响应式布局

前提准备:响应式布局有两种方法,看自己想要哪种。

方法一:百分比

用百分比去写元素的宽度,然后让子元素撑起父元素的高度

.parent {width: 50%;
}.child {width:100%;height:100px;
}


方法二:vh、vw

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

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


50vw的意思是占视口宽度的一半,20vh占视口高度的20%,随着视口的变化自适应。

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

开始配置(不使用媒体查询)

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

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

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

使用postcss-px2rem-exclude---修改单位(不包括第三方组件)
帮我们自动将px单位转换成rem单位(此插件的功能是为了排除 node_modules 中的所有第三方插件,所以第三方组件库的样式就不会被受到影响。比如elementUI就不会转换单位了)

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

第一步:npm下载插件

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

npm i postcss-plugin-px2rem

第二步:配置vue.config.js

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

第三步:屏幕自适应

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

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

(function flexible(window, document) {var docEl = document.documentElementvar dpr = window.devicePixelRatio || 1// adjust body font sizefunction setBodyFontSize() {if (document.body) {document.body.style.fontSize = (12 * dpr) + 'px'}else {document.addEventListener('DOMContentLoaded', setBodyFontSize)}}setBodyFontSize();// set 1rem = viewWidth / 10 原版是10等分,这里把屏幕平均划分为24等分 1920function setRemUnit() {var rem = docEl.clientWidth / 24docEl.style.fontSize = rem + 'px'}setRemUnit()// reset rem unit on page resizewindow.addEventListener('resize', setRemUnit)window.addEventListener('pageshow', function (e) {if (e.persisted) {setRemUnit()}})// detect 0.5px supportsif (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))

最后,在main.js中引入文件; import '../flexible' //自适应

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

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

 第五步 设计稿上是多少px 代码里写多少px 即可

.cus_tbox {width: 100%;height: 394px;border: 1px solid red;margin-bottom: 16px;
}
.cus_bbox {width: 100%;height: 563px;border: 1px solid yellow;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/579243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git一个仓库包含多个不同的项目VUE(老项目的基础上,新建分支放新项目)

背景&#xff1a; 原有项目A&#xff08;vue2.6&#xff09;&#xff0c;需要在A的基础上接入组件库&#xff0c;涉及到项目升级&#xff0c;领导不想走这条路&#xff0c;建议重新构建一版2.7的项目B&#xff0c;那么现在就需要把项目B与项目A远程到同一个仓库&#xff1b; 解…

网络通信-Linux 对网络通信的实现

Linux 网络 IO 模型 同步和异步&#xff0c;阻塞和非阻塞 同步和异步 关注的是调用方是否主动获取结果 同步:同步的意思就是调用方需要主动等待结果的返回 异步:异步的意思就是不需要主动等待结果的返回&#xff0c;而是通过其他手段比如&#xff0c;状态通知&#xff0…

TP-LINK AC1200 双频无线路由器网段设置

TP-LINK AC1200 双频无线路由器网段设置 1. 管理页面2. 上网设置3. 无线设置4. LAN 口设置 原始 3 网段5. LAN 口设置 设置 1 网段6. DHCP 服务器7. 重新连接References ​ 1. 管理页面 管理页面&#xff1a;http://tplogin.cn/ 上网方式&#xff1a;自动获得 IP 地址 2. 上网…

Vue框架引入Element-Ui

首先已经创建好了 Vue 框架&#xff0c;安装好了 node.js。 没有完成的可按照此博客搭建&#xff1a;搭建Vue项目 之后打开终端&#xff0c;使用命令。 1、命令引入 npm i element-ui -S2、package.json 查看版本 在 package.json 文件里可查看下载好的依赖版本。 3、在 ma…

Python入门学习篇(八)——元组详解

1 相关概念以及理解 1 python的元组与列表类似,不同之处在于元组的元素不可修改 2 有序且可重复 3 语法: (值1,值2,值3...值n) 最简单的元组为(值,) 而这个(值)并不是元组 4 关键字 tuple 5 因为元组不可修改,我们重新赋值元组的时候,只是改变了指向关系, 原来的元组还是依然…

【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; Mybatis ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 一、概述 MyBatis简介 主要特性 1. 动态SQL 2.结果映射 3 .插件机制 二、MyBatis配置文件 1.配置文件结构 数据库连…

连锁电商管理系统门店拓客+门店进销存管理+门店进货+总部进销存管理 整体系统搭建设计

搭建一个连锁电商管理系统需要考虑门店拓客、门店进销存管理、门店进货以及总部进销存管理等多个方面。以下是一个整体系统功能整理&#xff1a; 1. **门店拓客** - 实现线上线下渠道的融合&#xff0c;建立一个门店拓客平台&#xff0c;吸引潜在客户。 - 设计会员管理系统&…

【算法题】11. 盛最多水的容器

题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容器。…

tsconfig.app.json文件报红:Option ‘importsNotUsedAsValues‘ is deprecated...

在创建vue3 vite ts项目时的 tsconfig.json&#xff08;或者tsconfig.app.json&#xff09; 配置文件经常会报一个这样的错误&#xff1a; 爆红&#xff1a; Option ‘importsNotUsedAsValues’ is deprecated and will stop functioning in TypeScript 5.5. Specify compi…

Springboot实现定时任务

一、定时任务是什么&#xff1f; 定时执行任务&#xff0c;只有电脑不关机就可以在特定的时间去执行相应的代码&#xff0c;例如抢购脚本等 二、使用步骤 1.无需引入springboot自带 package com.ltx.blog_ltx;import org.springframework.boot.SpringApplication; import o…

低代码:拒绝重复、低价值的工单循环开发

一、前言 在软件开发和其他工程领域&#xff0c;“重复造轮子”被广泛认为是一种低效的做法&#xff0c;因为它浪费了大量的时间和资源去重新创作已经存在的东西&#xff0c;而不是利用现有的技术和经验去解决问题。 例如在大平台项目的实战开发中&#xff0c;针对不同业务场景…

docker-compose部署kafka

docker-compose.yml配置 version: "3" services:kafka:image: bitnami/kafka:latestports:- 7050:7050environment:- KAFKA_ENABLE_KRAFTyes- KAFKA_CFG_PROCESS_ROLESbroker,controller- KAFKA_CFG_CONTROLLER_LISTENER_NAMESCONTROLLER- KAFKA_CFG_LISTENERSPLAIN…

63.乐理基础-打拍子-四十六

历史知识&#xff1a; 当前写的节奏型是四十六节奏型&#xff0c;同二八这个词的意思类似&#xff0c;四十六就是四个十六分音符组成的节奏型&#xff0c;所以简称四十六&#xff0c;以四分音符为一拍的时候&#xff0c;四个十六分音符加起来的总拍数就是一拍&#xff0c;这…

算法训练第四十八天|198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III

198. 打家劫舍&#xff1a; 题目链接 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报…

SpringBoot整合JWT+Spring Security+Redis实现登录拦截(二)权限认证

上篇博文中我们已经实现了登录拦截&#xff0c;接下来我们继续补充代码&#xff0c;实现权限的认证 一、RBAC权限模型 什么事RBAC权限模型&#xff1f; RBAC权限模型&#xff08;Role-Based Access Control&#xff09;即&#xff1a;基于角色的权限访问控制。在RBAC中&#x…

15.权限控制 + 置顶、加精、删除

目录 1.权限控制 1.1 登录检查 1.2 授权配置 1.3 认证方案 1.4 CSRF 配置 2.置顶、加精、删除 2.1 开发数据访问层 2.2 业务层 2.3 表现层 Spring Security 是一个专注于为 Java 应用程序提供身份认证和授权的框架&#xff0c;它的强大之处在于它可以轻松扩展以满足自…

蓝桥杯的学习规划

c语言基础&#xff1a; Python语言基础 学习路径&#xff1a;画框的要着重学习

一文读懂SoBit 跨链桥教程

从BTC网络到Solana网络桥接BRC20 1.打开SoBit平台&#xff1a;在您的网络浏览器中启动SoBit Bridge应用程序。 2.连接您的钱包&#xff1a; 选择SoBit界面右上角的比特币网络来连接您的数字钱包。 3.选择源链、目标链和您想桥接的代币&#xff1a; 从下拉菜单中选择’BTC’作为…

翻硬币C语言

分析&#xff1a;首先&#xff0c;我们如果想要使得两次的硬币可以转化&#xff0c;那么两组字符对应不同的的个数就只能是偶数&#xff0c;比如&#xff1a; * * * * * o o * * * * * 我们要对上面的例子翻动5次&#xff0c;我们可以看出两个不同的位置相差五个单位&#x…

用C/C++实现MSML协议栈的详细介绍

一、MSML协议简介 MSML&#xff08;Media Server Markup Language&#xff09;是一种基于XML的标记语言&#xff0c;用于控制媒体服务器。它是媒体服务器控制协议的一种&#xff0c;允许第三方应用与媒体服务器进行交互&#xff0c;实现对媒体流的创建、修改和释放等操作。MSM…