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

rem 响应式布局( rem 详解)

一、基本概念

rem(Root EM) 是 CSS 中的相对长度单位,其值始终 相对于根元素(<html>)的字体大小 计算:

  • 1rem = 根元素的 font-size 值

  • 示例:若 html { font-size: 16px; },则 1rem = 16px2rem = 32px

二、核心特点

1.相对根元素

与 em(相对于父元素)不同,rem 只与 <html> 的字体大小相关,不受嵌套影响。

2.响应式核心

通过修改根元素字体大小,可全局控制所有基于 rem 的尺寸,实现响应式适配。

3.计算关系

目标元素尺寸 = rem值 × 根元素font-size

三、与常见单位的对比

单位参照对象特点适用场景
rem根元素(<html>)全局一致,避免嵌套问题布局/组件尺寸
em父元素字体大小嵌套会导致计算复杂度增加文本相关间距
px绝对像素固定尺寸,不随设置改变边框、固定元素
vw视口宽度 1%直接响应视口变化全屏布局

四、最佳实践

1.设置根字体大小

推荐使用 62.5% 技巧(兼容且易计算):

html {font-size: 62.5%;  /* 默认16px × 62.5% = 10px */
}

此时 1rem = 10px,计算更方便(例:1.6rem = 16px)。

2.响应式适配方案

方法1:媒体查询分段控制

@media (min-width: 768px) {html { font-size: 70%; } /* 约11.2px */
}
@media (min-width: 1200px) {html { font-size: 80%; } /* 约12.8px */
}

方法2:JS动态计算(推荐)

根据设计稿宽度动态设置(设计稿常以 750px 为基准):

document.documentElement.style.fontSize = (document.documentElement.clientWidth / 750) * 100 + 'px';

使用:设计稿中 100px → CSS 中写 1rem

3.开发工作流

  • 设计稿测量尺寸 ÷ 基准值(如100) = rem值
    例:设计稿中按钮宽 150px → width: 1.5rem

  • 使用预处理器(Sass/Less)简化计算:

@function rem($px) {@return ($px / 100) * 1rem;
}
.button {width: rem(150); // 编译为 width: 1.5rem
}

五、使用场景

1.布局尺寸

width/height/padding/margin 等

2.组件尺寸

按钮、卡片、输入框等需要自适应的组件

3.间距系统

统一管理 margin 和 padding 的缩放

六、注意事项

1.字体大小慎用 rem

建议用 em 保持文本层次关系,避免全局缩放影响可读性。

2.1px 边框问题

使用 px 避免 Retina 屏下边框过细。

3.兼容性

支持所有现代浏览器及 IE9+,老旧项目需提供 px 回退:

.box {width: 160px;    /* 旧浏览器回退 */width: 16rem;    /* 现代浏览器 */
}

总结

要点说明
本质相对于根元素(<html>)字体大小的相对单位
核心优势全局可控性,避免 em 的嵌套计算问题
响应式关键通过 JS/媒体查询动态修改根字体大小实现整体缩放
开发技巧62.5%基准法、JS动态计算、预处理器函数简化
适用场景布局/组件/间距等需要整体适配的尺寸
避坑指南字体用 em、边框用 px、老旧项目提供回退

选择建议

✅ 响应式项目首选 rem 控制布局尺寸
✅ 结合 vw 实现更精细的视口适配
❌ 文本内容建议用 em 保持层级关系
❌ 固定元素(如图标)可配合 px 使用

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

相关文章:

  • 鼠标右键没有“通过VSCode打开文件夹”
  • FreeRTOS【3-1】创建第一个多任务程序复习笔记
  • STM32驱动SG90舵机全解析:从PWM原理到多舵机协同控制
  • Sring框架-IOC篇
  • ​​Java核心知识体系与集合扩容机制深度解析​
  • JavaSE高级-02
  • JDBC的使用
  • 【Python】Python Socket 网络编程详解:从基础到实践​
  • Street Crafter 阅读笔记
  • IDEA创建项目
  • MYSQL中读提交的理解
  • MySQL新手教学
  • lesson41:MySQL数据库进阶实战:视图、函数与存储引擎全解析
  • springBoot启动报错问题汇总
  • OVS:ovn是如何支持组播的?
  • LwIP 核心流程总结
  • wishbone总线
  • thinkphp8:一、环境准备
  • c++26新功能—可观测检查点
  • torch.nn.Conv1d详解
  • C++最小生成树
  • 高等数学 8.5 曲面及其方程
  • Python打卡Day45 预训练模型
  • 【加密PMF】psk-pmk-ptk
  • 【168页PPT】IBM五粮液集团数字化转型项目实施方案建议书(附下载方式)
  • 块体不锈钢上的光栅耦合表面等离子体共振的复现
  • 九联科技UMA223-H低功耗蜂窝模组在物联网设备中的应用与价值分析
  • 信号上升时间Tr不为0的信号反射情况
  • 工具集成强化学习:AI数学推理能力的新跃迁
  • Milvus向量数据库安装步骤