《前端面试题:CSS有哪些单位!》
CSS单位大全:从像素到容器单位的前端度量指南
精通CSS单位是构建响应式、灵活布局的关键技能,也是面试中的必考知识点
一、CSS单位的重要性与分类
在网页设计中,CSS单位是控制元素尺寸、间距和定位的基础。不同的单位提供了不同的计算方式和适应性,理解它们的特性对于创建响应式设计至关重要。CSS单位可分为四大类:
- 绝对单位:固定物理尺寸(px, pt, in, cm, mm, pc)
- 相对单位:基于上下文计算(em, rem, %, ex, ch)
- 视口单位:相对于视口尺寸(vw, vh, vmin, vmax)
- 函数单位:动态计算值(calc(), min(), max(), clamp())
二、绝对单位详解
1. 像素(px)
/* 最常用的绝对单位 */
.element {width: 300px; font-size: 16px;border: 1px solid #ccc;
}
特点:
- 1px = 1/96英寸(在96dpi屏幕上)
- 固定尺寸,不受父元素或视口影响
- 高分辨率屏幕下可能小于物理像素
2. 物理单位(pt, pc, in, cm, mm)
/* 主要用于打印样式 */
@media print {.document {width: 8.5in; /* 英寸 */margin: 1cm; /* 厘米 */font-size: 12pt; /* 点 */line-height: 1pc; /* 派卡 (1pc = 12pt) */}
}
换算关系:
- 1in = 2.54cm = 25.4mm = 72pt = 6pc
- 96px = 1in (在标准密度屏幕上)
三、相对单位深度解析
1. em 单位
.parent {font-size: 16px;
}.child {font-size: 1.5em; /* 24px (16 * 1.5) */padding: 2em; /* 48px (24 * 2) */
}/* 嵌套问题 */
.grandchild {font-size: 0.8em; /* 19.2px (24 * 0.8) */
}
特点:
- 相对于当前元素的字体大小
- 嵌套使用时会产生复合效果
- 适用于与字体大小相关的间距
2. rem 单位(Root em)
html {font-size: 16px; /* 基准大小 */
}.component {font-size: 1.25rem; /* 20px (16 * 1.25) */padding: 1rem; /* 16px */margin: 2rem; /* 32px */
}
优势:
- 相对于根元素(html)的字体大小
- 避免嵌套计算问题
- 实现全局尺寸调整
3. 百分比(%)
.container {width: 800px;
}.child {width: 50%; /* 400px */height: 100%; /* 继承父容器高度 */padding: 5%; /* 父容器宽度的5% */
}
注意:百分比参照对象随属性变化:
- width/height: 父元素内容区尺寸
- padding/margin: 父元素宽度
- font-size: 父元素的font-size值
- line-height: 当前元素的font-size值
4. 字体相关单位(ex, ch)
/* 基于当前字体的度量 */
.heading::first-letter {font-size: 3ex; /* 当前字体x高度的3倍 */
}.code-block {width: 60ch; /* 60个"0"字符的宽度 */max-width: 100%; /* 响应式限制 */
}
四、视口单位(Viewport Units)
1. 基本视口单位
.full-width {width: 100vw; /* 视口宽度的100% */
}.full-height {height: 100vh; /* 视口高度的100% */
}.hero-section {min-height: 100vh; /* 最小高度为视口高度 */
}
2. 动态字体大小
h1 {/* 基础大小 + 视口比例 */font-size: calc(1.5rem + 2vw);
}/* 使用clamp()确保边界 */
.subtitle {font-size: clamp(1rem, 1rem + 0.5vw, 1.5rem);
}
3. vmin 和 vmax
/* 正方形元素 */
.square {width: 50vmin; /* 视口较小尺寸的50% */height: 50vmin;
}/* 全屏背景元素 */
.background {width: 100vmax; /* 视口较大尺寸的100% */height: 100vmax;
}
五、CSS函数单位
1. calc() - 动态计算
/* 响应式布局 */
.sidebar {width: 300px;
}.main-content {width: calc(100% - 300px - 2rem);
}/* 复杂计算 */
.grid-item {width: calc((100% - 3 * 20px) / 4); /* 4列网格 */
}
2. min() 和 max() - 边界限制
.container {width: min(1200px, 90vw); /* 不超过1200px或90vw */padding: max(1rem, 3vw); /* 至少1rem或3vw */
}/* 响应式字体 */
h2 {font-size: max(1.2rem, 2.5vw);
}
3. clamp() - 三值范围限制
/* 理想范围:1.5rem到2.5rem之间,中间值响应式 */
.title {font-size: clamp(1.5rem, 4vw, 2.5rem);
}/* 响应式内边距 */
.card {padding: clamp(1rem, 3%, 2rem);
}
六、CSS容器查询单位(新特性)
1. 容器相对单位
.component {container-type: inline-size;
}@container (min-width: 400px) {.title {font-size: max(1.5rem, 5cqw); /* 容器宽度的5% */}.content {padding: 2cqi; /* 容器内联尺寸的2% */}
}
容器单位类型:
- cqw: 容器宽度的1%
- cqh: 容器高度的1%
- cqi: 容器内联尺寸的1%
- cqb: 容器块尺寸的1%
- cqmin: 容器较小尺寸的1%
- cqmax: 容器较大尺寸的1%
七、特殊场景单位
1. 角度单位
/* 旋转动画 */
@keyframes rotate {to {transform: rotate(360deg); /* 度 *//* 其他单位: rad(弧度), grad(百分度), turn(圈) */}
}
2. 时间单位
.transition {transition: all 300ms ease; /* 毫秒 */animation-duration: 2s; /* 秒 */
}
3. 分辨率单位
/* 高分辨率屏幕适配 */
@media (min-resolution: 2dppx) {.high-res-image {background-image: url("image@2x.png");}
}
八、单位使用最佳实践
1. 响应式设计单位策略
:root {--spacing-unit: 0.5rem;--header-height: clamp(3rem, 8vh, 5rem);
}.container {padding: calc(var(--spacing-unit) * 2);
}.card {margin-block: max(1vh, 0.5rem);font-size: clamp(1rem, 1rem + 0.3vw, 1.2rem);
}
2. 避免常见陷阱
/* 移动端100vh问题 */
.modal {height: 100vh; /* 可能包含地址栏 */height: 100dvh; /* 新标准:动态视口高度 */
}/* 嵌套em问题 */
.menu {font-size: 1.2em;
}/* 改为 */
.menu {font-size: 1.2rem;
}
3. 单位组合技巧
/* 完美居中 */
.center-element {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);width: min(90vw, 800px);
}/* 响应式网格 */
.grid {display: grid;grid-template-columns: repeat(auto-fit, minmax(min(250px, 100%), 1fr));gap: clamp(1rem, 3vw, 2rem);
}
九、经典面试题解析
1. rem和em的区别是什么?
答案:
- rem:基于根元素(html)的字体大小
- em:基于当前元素的字体大小
- 关键区别:继承计算方式不同
2. 如何解决移动端100vh包含地址栏的问题?
解决方案:
/* 现代解决方案 */
.container {height: 100dvh; /* 动态视口高度 */
}/* 兼容方案 */
.container {height: 100vh;height: -webkit-fill-available;
}
3. 实现一个自适应的正方形元素
.square {width: 20vmin;aspect-ratio: 1/1; /* 宽高比属性 *//* 传统方法 */width: 20%;padding-bottom: 20%; /* 基于父元素宽度 */
}
4. 解释以下代码的输出:
<div class="outer" style="font-size: 20px; width: 400px;"><div class="inner" style="width: 50%; padding: 1em;"></div>
</div>
答案:
- 宽度:400px × 50% = 200px
- 内边距:1em = 当前字体大小20px
- 总宽度:200px + 20px × 2 = 240px
5. 如何创建响应式字体?
/* 推荐方案 */
body {font-size: clamp(1rem, 1rem + 0.5vw, 1.5rem);
}
十、未来趋势与总结
1. 新兴单位
- lh/rlh:行高单位
- ic:根据"水"(CJK字符)的宽度
- cap:大写字母高度
- svw/svh:小视口单位(忽略UI控件)
2. 单位选择策略
- 布局尺寸:%, fr, vw/vh
- 字体大小:rem + clamp()
- 间距:rem + 自定义属性
- 响应式:min()/max()/clamp()
- 容器相关:cq*单位
3. 总结要点
- 理解每种单位的计算基准
- 优先使用相对单位实现响应式
- 组合使用函数单位创建灵活布局
- 关注容器查询等新特性发展
- 测试不同设备下的实际表现
CSS单位的选择是艺术与科学的结合。掌握它们的内在逻辑,你将能够创建出既精确又灵活的现代网页布局。记住:没有"最佳"单位,只有最适合特定场景的选择。
相关文章:
《前端面试题:CSS有哪些单位!》
CSS单位大全:从像素到容器单位的前端度量指南 精通CSS单位是构建响应式、灵活布局的关键技能,也是面试中的必考知识点 一、CSS单位的重要性与分类 在网页设计中,CSS单位是控制元素尺寸、间距和定位的基础。不同的单位提供了不同的计算方式和…...

[ctfshow web入门] web80
信息收集 过滤了php和data if(isset($_GET[file])){$file $_GET[file];$file str_replace("php", "???", $file);$file str_replace("data", "???", $file);include($file); }else{highlight_file(__FILE__); }解题 大小写…...

【设计模式-4.5】行为型——迭代器模式
说明:本文介绍设计模式中,行为型设计模式之一的迭代器模式。 定义 迭代器模式(Iterator Pattern),也叫作游标模式(Cursor Pattern),它提供一种按顺序访问集合/容器对象元素的方法&…...

C++_核心编程_继承中的对象模型
继承中的对象模型 **问题:**从父类继承过来的成员,哪些属于子类对象中? * 结论: 父类中私有成员也是被子类继承下去了,只是由编译器给隐藏后访问不到 */ class Base { public:int m_A; protected:int m_B; private:int…...

使用cephadm离线部署reef 18版并配置对接openstack
源 curl --silent --remote-name --location https://download.ceph.com/rpm-squid/el9/noarch/cephadm chmod x cephadm./cephadm add-repo --release reef监视节点 离线下载 apt-get --download-only install ceph ceph-mon ceph-mgr ceph-commonmkdir /reef/mon mv /var/…...
Redis最佳实践——性能优化技巧之缓存预热与淘汰策略
Redis在电商应用中的缓存预热与淘汰策略优化 一、缓存预热核心策略 1. 预热数据识别方法 热点数据发现矩阵: 维度数据特征发现方法历史访问频率日访问量>10万次分析Nginx日志,使用ELK统计时间敏感性秒杀商品、新品上线运营数据同步关联数据购物车关…...

2024年数维杯国际大学生数学建模挑战赛D题城市弹性与可持续发展能力评价解题全过程论文及程序
2024年数维杯国际大学生数学建模挑战赛 D题 城市弹性与可持续发展能力评价 原题再现: 中国人口老龄化趋势的加剧和2022年首次出现人口负增长,表明未来一段较长时期内我国人口将呈现下降趋势。这一趋势必将影响许多城市的高质量和可持续发展,…...
3D Gaussian splatting 06: 代码阅读-训练参数
目录 3D Gaussian splatting 01: 环境搭建3D Gaussian splatting 02: 快速评估3D Gaussian splatting 03: 用户数据训练和结果查看3D Gaussian splatting 04: 代码阅读-提取相机位姿和稀疏点云3D Gaussian splatting 05: 代码阅读-训练整体流程3D Gaussian splatting 06: 代码…...

QT聊天项目DAY13
1. 重置密码 重置密码label也要实现浮动和点击效果,所以将忘记密码这个标签提升为ClickedLabel 1.1 ClickedLabel的复用 由于样式表(.qss) 文件中可以写入多个控件的状态UI,所以为了ClickedLabel能够复用,将成员变量的初始化方式修改为函数…...

Web3如何重塑数据隐私的未来
在这个信息爆炸的时代,数据隐私已成为我们不得不面对的严峻问题。Web3,作为下一代互联网的代表,以其去中心化、用户主权和数据安全等特点,正在重塑数据隐私的未来。它不仅仅是技术的革新,更是对个人隐私保护理念的一次…...

【鸿蒙】HarmonyOS NEXT之如何正常加载地图组件
1、不支持模拟器,需要真机! 2、Map地图需要在AGC上申请权限,需要在AGC上创建对应的项目 地址: AppGallery Connect 2.1 AGC中项目创建 2.1.1 添加项目 2.1.2 起个名字 2.1.3 添加应用: 2.1.4 选择HarmonyOS APP&…...

前端框架进化史
本内容是对 You’ll Never Manually Update the DOM Again // Here’s Why 内容的翻译与整理。 你再也不需要手工更新DOM, 以下是原因 现代 JavaScript 框架,如 React、Vue、Svelte、Solid、Quick,以及本周推出的其他 786 个框架,都试图做一些…...
“轻量应用服务器” vs. “云服务器CVM”:小白入门腾讯云,哪款“云机”更适合你?(场景、配置、价格对比解析)
更多云服务器知识,尽在hostol.com 当你第一次踏入腾讯云这个“数字百货大楼”,面对琳琅满目的“云产品”,是不是有点眼花缭乱,特别是看到“轻量应用服务器”和“云服务器CVM”这两位都号称能帮你“安家落户”的“云主机”时&…...
day63—回溯—全排列(LeetCode-46)
题目描述 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2: 输入&#x…...

(二)stm32使用4g模块(移远ec800k)连接mqtt
下面代码是随手写的,没有严谨测试仅供参考测试 uint8_t msgBuf[200]{"msg from mcu"}; uint8_t txBuf[250]{0}; uint16_t msgid0; uint16_t mqttTaskState0; uint16_t t100msCount0; uint8_t sendFlag10; uint8_t sendFlag20; void t100msTask1(void) { …...

防火墙iptables项目实战
目录 一、网络规划 三、环境准备与检测 1、firewall (1)配置防火墙各大网卡ip并禁用firewalld和selinux (2)打开firewall路由转发 2、PC1(内网) (1)配置ip并禁用firewalld和s…...

webpack继续学习
认识PostCSS工具 PostCSS是一个通过JS来转换样式的工具,这个工具可以帮助我们进行一些CSS的转换和适配,比如自动添加浏览器前缀,css样式的重置 实现这些功能需要借助于PostCSS对应的插件 自动添加浏览器前缀需要: npm install…...

Scrapy爬虫框架Spiders爬虫脚本使用技巧
我们都知道Scrapy是一个用于爬取网站数据、提取结构化数据的Python框架。在Scrapy中,Spiders是用户自定义的类,用于定义如何爬取某个(或某些)网站,包括如何执行爬取(即跟踪链接)以及如何从页面中…...

PowerBI企业运营分析—全动态盈亏平衡分析
PowerBI企业运营分析—全动态盈亏平衡分析 欢迎来到Powerbi小课堂,在竞争激烈的市场环境中,企业运营分析平台成为提升竞争力的核心工具。 该平台通过整合多源数据,实现关键指标的实时监控,从而迅速洞察业务动态,精准…...

docker的基本命令
容器的三大组成 镜像image 一个静态文件,特点:分层结构,不可更改 容器container 镜像运行的结果,容器可以修改,运行完后直接停止 仓库registry 用来存放镜像文件的地方 容器的常用命令介绍 关于镜像的命令 docker …...

【运维实战】Rsync将一台主Web服务器上的文件和目录同步到另一台备份服务器!
在管理 Web 服务器时,确保数据安全且在发生故障时能够快速恢复至关重要,备份和镜像 Web 服务器数据最可靠的方法之一是使用 rsync。 Rsync 工具可以帮助在两台服务器之间同步文件和目录,非常适合用于创建 Web 服务器数据的备份和镜像。 下面…...
实时通信RTC与传统直播的异同
实时通信(RTC)与直播虽然在音视频传输领域密切相关,但设计目标和实现原理是存在显著差异的。 一、核心联系 共同目标:均需实现音视频数据的采集、编码、传输与播放。技术重叠:使用相似的编码标准(如H.264/…...
Python-正则表达式(re 模块)
目录 一、re 模块的使用过程二、正则表达式的字符匹配1. 匹配开头结尾2. 匹配单个字符3. 匹配多个字符4. 匹配分组5. Python 代码示例 三、re 模块的函数1. 函数一览表2. Python 代码示例1)search 与 finditer2)findall3)sub4)spl…...

AgenticSeek 本地部署教程(Windows 系统)
#工作记录 Fosowl/agenticSeek:完全本地的 Manus AI。 部署排错参考资料在文末 或查找往期笔记。 AgenticSeek 本地部署教程(Windows 系统) 一、环境准备 1. 安装必备工具 Docker Desktop 下载地址:Docker Desktop 官网 安装后启…...

基于 qiankun + vite + vue3 构建微前端应用实践
核心内容摘要 技术栈组合 采用 Vite Vue3 Qiankun 构建微前端架构主应用和子应用独立开发部署,通过 Qiankun 集成 2. 主应用关键配置通过 registerMicroApps 注册子应用,配置路由匹配规则(activeRule)使用…...
VR教育:开启教育新时代的钥匙
VR 教育,即虚拟现实教育,是将虚拟现实技术(Virtual Reality,简称 VR)应用于教育领域的一种创新教育模式。它借助计算机技术、图形图像技术、传感器技术等,创建出高度逼真的虚拟学习环境,让学生通过头戴式显示设备、手柄…...

机器学习:逻辑回归与混淆矩阵
本文目录: 一、逻辑回归Logistic Regression二、混淆矩阵(一)精确率precision(二)召回率recall(三)F1-score:了解评估方向的综合预测能力(四)Roc曲线…...

20250602在荣品的PRO-RK3566开发板的Android13下打开HDMI显示
20250602在荣品的PRO-RK3566开发板的Android13下打开HDMI显示 2025/6/2 16:20 缘起:貌似荣品的PRO-RK3566开发板的Android13默认关闭了HDMI显示。 据说:荣品确认RK3566的GPU比较弱,同时开【MIPI接口的】LCD屏显示和HDMI显示容易出现异常。 更…...
【学习记录】快速上手 PyQt6:设置 Qt Designer、PyUIC 和 PyRCC 在 PyCharm中的应用
文章目录 📌 前言✅ 第一步:安装 PyQt6 及其工具包🔧 第二步:找到相关工具路径🧰 第三步:在 PyCharm 中配置外部工具打开设置🛠️ 配置 Qt Designer🛠️ 配置 PyUIC6(UI转…...

AI在网络安全领域的应用现状和实践
当前,人工智能技术已深度融入网络安全产品,推动传统防御模式向智能化、自适应方向加速演进。各安全厂商通过机器学习、深度学习与知识图谱等技术的融合应用,提高安全产品在威胁检测、攻击溯源、风险评估等场景的能力跃迁,突破传统…...