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

《前端面试题:CSS有哪些单位!》

CSS单位大全:从像素到容器单位的前端度量指南

精通CSS单位是构建响应式、灵活布局的关键技能,也是面试中的必考知识点

一、CSS单位的重要性与分类

在网页设计中,CSS单位是控制元素尺寸、间距和定位的基础。不同的单位提供了不同的计算方式和适应性,理解它们的特性对于创建响应式设计至关重要。CSS单位可分为四大类:

  1. 绝对单位:固定物理尺寸(px, pt, in, cm, mm, pc)
  2. 相对单位:基于上下文计算(em, rem, %, ex, ch)
  3. 视口单位:相对于视口尺寸(vw, vh, vmin, vmax)
  4. 函数单位:动态计算值(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. 单位选择策略

  1. 布局尺寸:%, fr, vw/vh
  2. 字体大小:rem + clamp()
  3. 间距:rem + 自定义属性
  4. 响应式:min()/max()/clamp()
  5. 容器相关:cq*单位

3. 总结要点

  • 理解每种单位的计算基准
  • 优先使用相对单位实现响应式
  • 组合使用函数单位创建灵活布局
  • 关注容器查询等新特性发展
  • 测试不同设备下的实际表现

CSS单位的选择是艺术与科学的结合。掌握它们的内在逻辑,你将能够创建出既精确又灵活的现代网页布局。记住:没有"最佳"单位,只有最适合特定场景的选择。

相关文章:

《前端面试题:CSS有哪些单位!》

CSS单位大全&#xff1a;从像素到容器单位的前端度量指南 精通CSS单位是构建响应式、灵活布局的关键技能&#xff0c;也是面试中的必考知识点 一、CSS单位的重要性与分类 在网页设计中&#xff0c;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】行为型——迭代器模式

说明&#xff1a;本文介绍设计模式中&#xff0c;行为型设计模式之一的迭代器模式。 定义 迭代器模式&#xff08;Iterator Pattern&#xff09;&#xff0c;也叫作游标模式&#xff08;Cursor Pattern&#xff09;&#xff0c;它提供一种按顺序访问集合/容器对象元素的方法&…...

C++_核心编程_继承中的对象模型

继承中的对象模型 **问题&#xff1a;**从父类继承过来的成员&#xff0c;哪些属于子类对象中&#xff1f; * 结论&#xff1a; 父类中私有成员也是被子类继承下去了&#xff0c;只是由编译器给隐藏后访问不到 */ 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. 预热数据识别方法 热点数据发现矩阵&#xff1a; 维度数据特征发现方法历史访问频率日访问量>10万次分析Nginx日志&#xff0c;使用ELK统计时间敏感性秒杀商品、新品上线运营数据同步关联数据购物车关…...

2024年数维杯国际大学生数学建模挑战赛D题城市弹性与可持续发展能力评价解题全过程论文及程序

2024年数维杯国际大学生数学建模挑战赛 D题 城市弹性与可持续发展能力评价 原题再现&#xff1a; 中国人口老龄化趋势的加剧和2022年首次出现人口负增长&#xff0c;表明未来一段较长时期内我国人口将呈现下降趋势。这一趋势必将影响许多城市的高质量和可持续发展&#xff0c…...

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也要实现浮动和点击效果&#xff0c;所以将忘记密码这个标签提升为ClickedLabel 1.1 ClickedLabel的复用 由于样式表(.qss) 文件中可以写入多个控件的状态UI&#xff0c;所以为了ClickedLabel能够复用&#xff0c;将成员变量的初始化方式修改为函数…...

Web3如何重塑数据隐私的未来

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

【鸿蒙】HarmonyOS NEXT之如何正常加载地图组件

1、不支持模拟器&#xff0c;需要真机&#xff01; 2、Map地图需要在AGC上申请权限&#xff0c;需要在AGC上创建对应的项目 地址&#xff1a; AppGallery Connect 2.1 AGC中项目创建 2.1.1 添加项目 2.1.2 起个名字 2.1.3 添加应用&#xff1a; 2.1.4 选择HarmonyOS APP&…...

前端框架进化史

本内容是对 You’ll Never Manually Update the DOM Again // Here’s Why 内容的翻译与整理。 你再也不需要手工更新DOM, 以下是原因 现代 JavaScript 框架&#xff0c;如 React、Vue、Svelte、Solid、Quick&#xff0c;以及本周推出的其他 786 个框架&#xff0c;都试图做一些…...

“轻量应用服务器” vs. “云服务器CVM”:小白入门腾讯云,哪款“云机”更适合你?(场景、配置、价格对比解析)

更多云服务器知识&#xff0c;尽在hostol.com 当你第一次踏入腾讯云这个“数字百货大楼”&#xff0c;面对琳琅满目的“云产品”&#xff0c;是不是有点眼花缭乱&#xff0c;特别是看到“轻量应用服务器”和“云服务器CVM”这两位都号称能帮你“安家落户”的“云主机”时&…...

day63—回溯—全排列(LeetCode-46)

题目描述 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#x…...

(二)stm32使用4g模块(移远ec800k)连接mqtt

下面代码是随手写的&#xff0c;没有严谨测试仅供参考测试 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 &#xff08;1&#xff09;配置防火墙各大网卡ip并禁用firewalld和selinux &#xff08;2&#xff09;打开firewall路由转发 2、PC1&#xff08;内网&#xff09; &#xff08;1&#xff09;配置ip并禁用firewalld和s…...

webpack继续学习

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

Scrapy爬虫框架Spiders爬虫脚本使用技巧

我们都知道Scrapy是一个用于爬取网站数据、提取结构化数据的Python框架。在Scrapy中&#xff0c;Spiders是用户自定义的类&#xff0c;用于定义如何爬取某个&#xff08;或某些&#xff09;网站&#xff0c;包括如何执行爬取&#xff08;即跟踪链接&#xff09;以及如何从页面中…...

PowerBI企业运营分析—全动态盈亏平衡分析

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

docker的基本命令

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

【运维实战】Rsync将一台主Web服务器上的文件和目录同步到另一台备份服务器!

在管理 Web 服务器时&#xff0c;确保数据安全且在发生故障时能够快速恢复至关重要&#xff0c;备份和镜像 Web 服务器数据最可靠的方法之一是使用 rsync。 Rsync 工具可以帮助在两台服务器之间同步文件和目录&#xff0c;非常适合用于创建 Web 服务器数据的备份和镜像。 下面…...

实时通信RTC与传统直播的异同

实时通信&#xff08;RTC&#xff09;与直播虽然在音视频传输领域密切相关&#xff0c;但设计目标和实现原理是存在显著差异的。 一、核心联系 共同目标&#xff1a;均需实现音视频数据的采集、编码、传输与播放。技术重叠&#xff1a;使用相似的编码标准&#xff08;如H.264/…...

Python-正则表达式(re 模块)

目录 一、re 模块的使用过程二、正则表达式的字符匹配1. 匹配开头结尾2. 匹配单个字符3. 匹配多个字符4. 匹配分组5. Python 代码示例 三、re 模块的函数1. 函数一览表2. Python 代码示例1&#xff09;search 与 finditer2&#xff09;findall3&#xff09;sub4&#xff09;spl…...

AgenticSeek 本地部署教程(Windows 系统)

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

基于 qiankun + vite + vue3 构建微前端应用实践

核心内容摘要​​ ​​技术栈组合​​ 采用 Vite Vue3 Qiankun 构建微前端架构主应用和子应用独立开发部署&#xff0c;通过 Qiankun 集成 ​​2. 主应用关键配置​​通过 registerMicroApps 注册子应用&#xff0c;配置路由匹配规则&#xff08;activeRule&#xff09;使用…...

VR教育:开启教育新时代的钥匙

VR 教育&#xff0c;即虚拟现实教育&#xff0c;是将虚拟现实技术(Virtual Reality&#xff0c;简称 VR)应用于教育领域的一种创新教育模式。它借助计算机技术、图形图像技术、传感器技术等&#xff0c;创建出高度逼真的虚拟学习环境&#xff0c;让学生通过头戴式显示设备、手柄…...

机器学习:逻辑回归与混淆矩阵

本文目录&#xff1a; 一、逻辑回归Logistic Regression二、混淆矩阵&#xff08;一&#xff09;精确率precision&#xff08;二&#xff09;召回率recall&#xff08;三&#xff09;F1-score&#xff1a;了解评估方向的综合预测能力&#xff08;四&#xff09;Roc曲线&#xf…...

20250602在荣品的PRO-RK3566开发板的Android13下打开HDMI显示

20250602在荣品的PRO-RK3566开发板的Android13下打开HDMI显示 2025/6/2 16:20 缘起&#xff1a;貌似荣品的PRO-RK3566开发板的Android13默认关闭了HDMI显示。 据说&#xff1a;荣品确认RK3566的GPU比较弱&#xff0c;同时开【MIPI接口的】LCD屏显示和HDMI显示容易出现异常。 更…...

【学习记录】快速上手 PyQt6:设置 Qt Designer、PyUIC 和 PyRCC 在 PyCharm中的应用

文章目录 &#x1f4cc; 前言✅ 第一步&#xff1a;安装 PyQt6 及其工具包&#x1f527; 第二步&#xff1a;找到相关工具路径&#x1f9f0; 第三步&#xff1a;在 PyCharm 中配置外部工具打开设置&#x1f6e0;️ 配置 Qt Designer&#x1f6e0;️ 配置 PyUIC6&#xff08;UI转…...

AI在网络安全领域的应用现状和实践

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