当前位置: 首页 > news >正文

css单位换算及适配

你这个问题很常见,涉及 CSS 的长度单位、响应式设计和适配。我给你梳理一下常见单位、换算规则,以及在项目中如何做适配。


🔹 一、常见 CSS 单位

1. 绝对单位

  • px(像素):最常用,固定大小,不随屏幕变化。

  • ptcmmm:印刷用,Web 开发几乎不用。

2. 相对单位

  • %:相对父元素的宽高。

  • em:相对 自身或父元素字体大小(1em = 当前 font-size)。

  • rem:相对 根元素(html)的 font-size。常用于移动端适配。

  • vw:相对 视口宽度(1vw = 1% 屏幕宽度)。

  • vh:相对 视口高度(1vh = 1% 屏幕高度)。

  • vmin / vmax:取视口宽高的最小值/最大值的百分比。


🔹 二、常见换算方法

1. px → rem

如果 html { font-size: 16px },那么:

  • 1rem = 16px

  • 32px = 2rem

一般移动端会动态设置根元素的 font-size,比如:

// flexible.js 示例
const setRem = () => {const baseSize = 16const scale = document.documentElement.clientWidth / 375 // 以设计稿 375px 为基准document.documentElement.style.fontSize = (baseSize * Math.min(scale, 2)) + 'px'
}
window.onresize = setRem
setRem()

这样页面会随屏幕宽度变化自动适配。


2. px → vw

1vw = 屏幕宽度的 1%

假设设计稿宽度是 375px:

  • 375px = 100vw

  • 1px = 100 / 375 ≈ 0.2667vw

所以:

/* 设计稿上 20px */
width: 20px;
/* 转换后 */
width: 5.333vw; /* (20/375)*100 */

可以配合 PostCSS 插件自动转换(推荐 postcss-px-to-viewport)。


3. px → em

如果父元素 font-size: 16px

  • 1em = 16px

  • 24px = 1.5em


🔹 三、适配方案

方案 1:rem 适配(常见)

  • 页面根元素 htmlfont-size 根据屏幕宽度动态设置。

  • 页面元素用 rem 来写。

  • 优点:兼容性好,适合移动端。


方案 2:vw/vh 适配(流行)

  • 直接用 vw 来写宽度,用 vh 来写高度。

  • 配合 PostCSS 可以自动把 pxvw

  • 优点:简单直接,效果好。

  • 缺点:有时小数点过多,导致四舍五入误差。


方案 3:媒体查询 (Media Query)

@media screen and (max-width: 768px) {body { font-size: 14px; }
}
@media screen and (min-width: 769px) {body { font-size: 16px; }
}
  • PC 端和移动端分开写规则。

  • 适合复杂的多端适配。


方案 4:混合方案

  • rem 处理字体大小。

  • vw/vh 处理布局。

  • 媒体查询作为兜底。


🔹 四、总结

  • 移动端推荐vw + PostCSS,或者 rem 动态根字体。

  • PC 端推荐:媒体查询 + %em/rem

  • 公式

    • px → rem = px / 根字体大小

    • px → vw = (px / 设计稿宽度) * 100


http://www.dtcms.com/a/393829.html

相关文章:

  • Java制作双脑同步 Hemi-Sync 音频
  • webrtc弱网-ProbeBitrateEstimator类源码分析与算法原理
  • 在OpenHarmony上适配图形显示【4】——rk3568_4.0r_mesa3d适配
  • 嵌入式(3)——RTC实时时钟
  • 内核模块组成和裁剪参考表
  • 140-understanding_the_armv8.x_and_armv9.x_extensions_guide
  • 【序列晋升】40 Spring Data R2DBC 轻量异步架构下的数据访问最佳实践
  • TGRS | 视觉语言模型 | 语言感知领域泛化实现高光谱跨场景分类, 代码开源!
  • Oracle / MySQL / MariaDB / SQL Server 常用连接与基础查询(Linux操作系统上)
  • 将 Jupyter Notebook 转换为 PDF
  • torchvision 编译安装 nano
  • 华为昇腾 910 到 950 系列 NPU 深度解析
  • 设计模式---门面模式
  • SQL Server从入门到项目实践(超值版)读书笔记 26
  • Datawhale学习笔记——深度语义匹配模型DSSM详解、实战与FAQ
  • 一文了解瑞萨MCU常用的芯片封装类型
  • LeetCode:44.二叉搜索树中第K小的元素
  • 初学者如何系统性地学习Linux?
  • LeetCode:43.验证二叉搜索树
  • [学习log] OT/ICS工业控制系统渗透测试
  • 六边形箱图 (Hexbin Plot):使用 Matplotlib 处理大规模散点数据
  • LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(2——Parser解析html模块)
  • 电脑能ping开发板,开发板不能ping电脑的解决方法:
  • git 覆盖:检出特定分支的文件到当前分支
  • CentOS 8.5.2.111部署Zabbix6.0
  • 【Elasticsearch面试精讲 Day 20】集群监控与性能评估
  • hive调优系列-3.HQL语法和运行参数层面
  • 计算机网络学习(三、数据链路层)
  • Refresh keys changed: [] 2023.0.3.3 问题排查
  • 高并发内存池(二):三层缓存的整体框架设计