解决PC端和移动端的css简单适配问题

server/2024/10/18 1:22:20/

一般用媒体查询来实现,不同宽度的屏幕对应不同的css样式

css">@media (min-width: 400px){.app {width: 400px;height: 400px;background-color: green;}
}

那么问题来了,如果我们有很多个媒体查询条件呢?是不是app的样式需要写很多份,当我们页面有很多很多个div盒子的时候,也是按照这样复制再修改,下班岂不是遥遥无期??估计也没人这么蠢,毕竟在坐的各位都是大佬。

 我们知道,px是一个绝对单位,写死了就不会变,那我们有没有一个相对单位来给它进行长度和宽度的赋值呢?那就是rem了没得说了。

rem 是 CSS 中的一个长度单位,全称为 "root em",它代表相对于 HTML 文档根元素(即 <html> 元素)的字体大小。rem 单位结合了绝对单位和相对单位的优点,提供了一种灵活的方式来设置字体大小和其他尺寸,同时保持整体设计的一致性和可扩展性。

rem的特点:其单位是相对于根元素,通常是html的字体大小,还有全局一致性,由于 rem 是相对于根元素的,所以你只需要在一个地方(通常是全局样式表的开始处)设置根元素的字体大小,就可以影响到整个页面中所有使用 rem 的元素。

例如,如果你的 <html> 元素的字体大小是 16px,那么 1rem 就等于 16px。如果你将一个段落元素的字体大小设置为 1.5rem,那么它的字体大小就会是 24px。 

 

css">.app {width: 10rem;height: 10rem;background-color: red;
}
@media (min-width: 400px){html{font-size: 20px;}
}

优雅的适配封装

 

javascript">(function(doc){let docEl = doc.documentElement;  // 获取根节点的htmldoc.addEventListener('DOMContentLoaded',recalc)function recalc(){let width = docEl.clientWidth;docEl.style.fontSize = 20 * (width / 320) + 'px';}
})(document)
  • 获取<html>元素的可视宽度(不包括滚动条),存储在width变量中。

  • 根据width计算新的字体大小。这里使用了一个公式20 * (width / 320),意味着当宽度为320px时,根元素的字体大小为20px;宽度增加时,字体大小按比例增加。

  • 将计算出的字体大小设置为<html>元素的style.fontSize属性,单位为px

最后我们将这个做好的适配封装代码引入项目全局去使用就好了。


http://www.ppmy.cn/server/131310.html

相关文章

短效IP池子质量怎么判断?

最近经常刷到关于如何判断短效IP池子质量的话题&#xff0c;很多朋友对此感到好奇。今天&#xff0c;我就来为大家解析一下这个问题&#xff0c;希望能帮助你更好地选择和使用短效IP池。 短效IP池的基本概念 短效IP池是由一组生命周期较短的IP地址组成&#xff0c;这些IP地址…

Oracle11g服务器linux 安装

一&#xff0e;安装前准备 1.检查硬件&#xff08;内存&#xff0c;交换分区&#xff0c;tmp分区&#xff0c;cpu信息&#xff0c;内核版本&#xff09; # grep MemTotal /proc/meminfo # grep SwapTotal /proc/meminfo # df -k /tmp&#xff08;>400M&#xff09; # grep …

前端的全栈之路:基于 Vue3 + Nest.js 全栈开发的后台应用

☘️ 项目简介 Vue3 Admin 是一个前端基于 Soybean Admin 二次开发&#xff0c;后端基于 Nest.js 的全栈后台应用&#xff0c;适合学习全栈开发的同学参考学习。 &#x1f341; 前端技术栈&#xff1a; Vue3.5、Ant Design Vue、UnoCSS、Pinia &#x1f341; 后端技术栈&…

使用Python实现系统时间跳变检测与日志记录

文章目录 概述脚本实现参数解析时间戳获取与转换日志轮转时间跳变检测逻辑主循环 使用方法运行脚本自定义参数 手动修改系统时间以测试时间跳变检测检查日志文件 概述 之前写过&#xff1a; 单线程版本的高精度时间日志记录小程序&#xff1a;C编程&#xff1a;实现简单的高精…

前端Vue3字体优化三部曲(webFont、font-spider、spa-font-spider-webpack-plugin)

前端Vue字体优化三部曲&#xff08;webFont、font-spider、spa-font-spider-webpack-plugin&#xff09; 引言 最近前端引入了UI给的思源黑体字体文件&#xff0c;但是字体文件过于庞大&#xff0c;会降低页面首次加载的速度&#xff0c;目前我的项目中需要用到如下三个字体文…

鸿蒙开发(NEXT/API 12)【密码自动填充】系统安全

功能简介 密码保险箱作为HarmonyOS系统原生安全功能&#xff0c;为用户提供了便捷的免密登录体验。 用户在应用或浏览器进行注册/登录操作时&#xff0c;可一键完成自动生成强密码、自动保存、自动填充&#xff0c;无需记住或手动输入繁琐的密码&#xff0c;由系统实现统一的…

工厂车间|基于springBoot的工厂车间系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完…

更改一列checkbox的顺序

不知道取啥标题了&#xff0c;记录之用&#xff0c;效果如图&#xff1a; 选取任意checkbox&#xff0c;点击向上或向下按钮,就可以改变顺序&#xff1a; 代码如下&#xff1a; vue2 <div class"vm-container"><el-checkbox-group v-model"selectedV…