动态REM

简介: 动态REM

动态REM


使用 JS 动态调整 REM

让 html 的 font-size == page width 如何做呢?

使用 JS 来做, 设置JS使 font-size == page width ,正因为 rem 是依赖 font-size 的,设置后那就会间接依赖宽度

var pageWidth = window.innerWidth
document.write('<style>html{font-size:' + pageWidth + 'px;}</style> }')

上面的代码表示 1rem == html font-size == 1 page width

优化

  1. 使用 meta viewport
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
  1. 从 pageWidth 来找答案

font-size = pageWidth/100

var pageWidth = window.innerWidth
document.write('<style>html{font-size:' + pageWidth/100 + 'px;}</style> }')

但是这个的 font-size 可能是一个 <10 的值(320/100),在 Chrome 里会有问题(最小12px)

于是再次优化 font-size = pageWidth/10

var pageWidth = window.innerWidth
document.write('<style>html{font-size:' + pageWidth/10 + 'px;}</style> }')

但是这个会带来 1px 的问题

假设屏宽 640px, 1px => (1/640) * 10 = 0.015rem,计算得出它比 1px 还要小 那么该如何解决? 自己写 1px 就行 就不要去换算 rem 了, 字体的写成 font-size: 16px,rem 和 px可以混用

px 自动变为 rem

使用SCSS

如何使用命令行部署 SCSS

  • npm config set registry registry.npm.taobao.org/
  • touch ~/.bashrc
  • echo 'export SASS_BINARY_SITE="npm.taobao.org/mirrors/nod… >> ~/.bashrc
  • source ~/.bashrc
  • npm i -g node-sass
  • mkdir ~/Desktop/scss-demo
  • cd ~/Desktop/scss-demo
  • mkdir scss css
  • touch scss/style.scss
  • start scss/style.scss
  • node-sass -wr scss -o css

编辑 scss 文件就会自动得到 css 文件

如何添加 SCSS

在 scss 文件里添加

@function px( $px ){
  @return $px/$designWidth*10 + rem;
}
$designWidth : 640; // 640 是设计稿的宽度
.child {
  width: px(320);
  height: px(160);
  margin: px(40) px(40);
  border: 1px solid red;
  float: left;
  font-size: px(16);
}


相关文章
ant-design Upload上传组件使用 编辑功能图片回显
ant-design Upload上传组件使用 编辑功能图片回显
1453 0
|
机器学习/深度学习 监控 数据可视化
基于YOLOv8的人脸表情识别项目【完整源码数据集+PyQt5界面+完整训练流程+开箱即用】
本项目基于YOLOv8开发人脸表情识别系统,集成PyQt5图形界面,支持图片、文件夹、视频及摄像头等多种输入方式的表情检测。具备开箱即用的特性,包含完整源码、预训练模型权重与数据集,适合毕业设计、科研及行业应用。功能涵盖单张/批量图片检测、视频实时分析、摄像头流处理等,并可保存结果。项目附带详细训练与部署流程,助力快速构建情绪识别系统。
Threejs使用CubeCamera实现环境映射
这篇文章详细介绍了如何在Three.js中使用CubeCamera来实现环境映射,包括创建CubeCamera、设置反射材质以及实时更新渲染结果的具体步骤。
388 3
|
运维 安全 网络安全
Web安全-企业网络架构
Web安全-企业网络架构
379 1
|
JavaScript
成功解决:如何通过this.$router.push(“/Login“)的方式传参,在另外一个页面接收数据的问题
这篇文章介绍了如何在Vue框架中通过路由跳转传递参数,并在另一个页面接收这些参数。具体方法是使用`this.$router.push`方法的`params`属性传递对象,然后在目标页面通过`this.$route.params`接收传递的参数。
成功解决:如何通过this.$router.push(“/Login“)的方式传参,在另外一个页面接收数据的问题
|
人工智能 物联网 Android开发
探索安卓开发的未来趋势:从传统到尖端技术
随着技术的不断进步,安卓开发领域也迎来了新的变革。本文将深入探讨安卓开发的最新趋势,包括Kotlin的崛起、Flutter的应用、AI集成以及物联网的结合等方面。我们将通过分析这些技术如何影响当前的开发实践,来揭示未来安卓应用开发的可能方向。文章旨在为开发者提供前瞻性的视角,帮助他们把握技术发展的脉搏,从而在竞争激烈的市场中脱颖而出。
437 1
|
存储 NoSQL Linux
MongoDB详解(四)——MongoDB数据库安装
MongoDB详解(四)——MongoDB数据库安装
601 2
|
前端开发 JavaScript
前端 JS 经典:判断对象属性是否存在
前端 JS 经典:判断对象属性是否存在
588 0
|
JSON NoSQL MongoDB
MongoDB详解(五)——MongoDB数据库简单使用
MongoDB详解(五)——MongoDB数据库简单使用
790 1
Threejs实现宇宙中地球动态展示和卫星绕地运动
Threejs实现宇宙中地球动态展示和卫星绕地运动
1579 0
Threejs实现宇宙中地球动态展示和卫星绕地运动