中文到底贴基线还是铺满四条线?——从字体到 `vertical-align`
中文到底贴基线还是铺满四条线——从字体到vertical-align混排、角标、图标对齐时常会碰到同样是中文为啥有的字体底边贴着拉丁基线有的却几乎铺满顶线到下伸线本文用一个四线 Demo 把度量说清楚再对照 Mac 上两款常见中文字体最后补上前端最容易误用的vertical-align。配套 Demo改下font-family就可以看出区别我的是macbook电脑!DOCTYPEhtmlhtmllangzh-CNheadmetacharsetUTF-8/metanameviewportcontentwidthdevice-width, initial-scale1/title文字四线示意/titlestyle:root{--font-size:96px;--line:#c0392b;--x-line:#2980b9;--baseline:#27ae60;--bottom:#8e44ad;}body{margin:40px;/* font-family: PingFang SC, Hiragino Sans GB, Microsoft YaHei, system-ui, sans-serif; */font-family:Hiragino Sans GB,sans-serif;background:#f7f8fa;color:#222;}h1{font-size:18px;font-weight:600;margin-bottom:8px;}.hint{font-size:13px;color:#666;margin-bottom:24px;line-height:1.6;}.stage{position:relative;display:inline-block;padding:48px 32px 56px;background:#fff;border-radius:12px;box-shadow:0 8px 24pxrgba(0,0,0,0.06);}.sample{position:relative;z-index:1;margin:0;padding:0;font-size:var(--font-size);line-height:1;/* 用固定 line-height方便对齐四线 */font-weight:400;letter-spacing:0.04em;color:#111;white-space:nowrap;}/* 四条线相对 .sample 的 em 盒定位 */.guide{position:absolute;left:0;right:0;height:0;border-top:1.5px dashed currentColor;pointer-events:none;z-index:2;}.guide span{position:absolute;left:100%;margin-left:10px;top:-0.65em;font-size:12px;line-height:1;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;}/* 顶线em 盒顶部 0 */.guide.top{top:0;color:var(--line);}/* x 顶线约在 baseline 上方 1ex 这里用 JS 量真实 x-height 更准CSS 兜底用 0.5em 近似 */.guide.x-height{top:calc(1em - 1ex);color:var(--x-line);}/* 基线默认 alphabetic约在 em 盒底部上方一点 用 JS 精确测量后会覆盖 top */.guide.baseline{top:0.8em;/* 兜底近似JS 会改成精确值 */color:var(--baseline);border-top-style:solid;}/* 底线em 盒底部 1em含 g/j/y 下伸部 */.guide.bottom{top:1em;color:var(--bottom);}.legend{margin-top:20px;display:grid;gap:6px;font-size:13px;}.legend i{display:inline-block;width:28px;border-top:2px solid;vertical-align:middle;margin-right:8px;}/style/headbodyh1文字渲染四线 Demo/h1pclasshint内容codeg j y 汉字测试/codebr/顶线 / x 顶线 / 基线 / 底线。基线与 x 高度用 Canvas 按当前字体实测。/pdivclassstagedivclasssampleidsamplespanclassguide topspan顶线 (ascent / em top)/span/spanspanclassguide x-heightidxLinespanx 顶线 (x-height)/span/spanspanclassguide baselineidbaseLinespan基线 (baseline)/span/spanspanclassguide bottomspan底线 (descent / em bottom)/span/spanx g j y 汉字测试/div/divdivclasslegenddivistyleborder-color:var(--line)/i顶线字形盒子顶部/divdivistyleborder-color:var(--x-line)/ix 顶线小写 x 顶部高度/divdivistyleborder-color:var(--baseline);border-top-style:solid/i基线拉丁字母“站”的线g/j/y 主体落在这条线上/divdivistyleborder-color:var(--bottom)/i底线字形盒子底部g/j/y 下伸部碰到附近/div/divscriptfunctionmeasureMetrics(el){conststylegetComputedStyle(el);constfont${style.fontWeight}${style.fontSize}${style.fontFamily};constfontSizeparseFloat(style.fontSize);constcanvasdocument.createElement(canvas);constctxcanvas.getContext(2d);ctx.fontfont;// alphabetic 基线相对 em 顶的距离constmctx.measureText(x g j y 汉字测试);// 现代浏览器支持这些字段constascentm.fontBoundingBoxAscent??m.actualBoundingBoxAscent??fontSize*0.8;constdescentm.fontBoundingBoxDescent??m.actualBoundingBoxDescent??fontSize*0.2;constxAscent((){constxmctx.measureText(x);returnxm.actualBoundingBoxAscent??fontSize*0.5;})();// 对 line-height:1 的盒子文字大致按 alphabetic 对齐// 基线约在ascent从 em 顶往下// 为了视觉对齐 content box用 ascent/(ascentdescent)*1emconstemascentdescent;constbaselineFromTop(ascent/em)*fontSize;constxTopFromTopbaselineFromTop-xAscent;return{baselineFromTop,xTopFromTop,fontSize};}functionpaint(){constsampledocument.getElementById(sample);const{baselineFromTop,xTopFromTop}measureMetrics(sample);document.getElementById(baseLine).style.topbaselineFromToppx;document.getElementById(xLine).style.topMath.max(0,xTopFromTop)px;}paint();document.fonts?.ready?.then(paint);window.addEventListener(resize,paint);/script/body/html一、先认清四条线看一行字时可以叠四条水平参考线线英文常见叫法含义顶线ascent / em top字形度量盒顶部x 顶线x-height小写x的顶部基线baseline拉丁字母“站”的线g/j/y主体落在这里下伸部伸到下面底线descent / em bottom字形度量盒底部g/j/y尾巴常伸到这里附近Demo 用的示例文本x g j y 汉字测试x顶在 x 顶线底在基线g/j/y主体在基线尾巴伸向底线汉字高度、底边相对基线的位置强烈依赖字体设计关键点“按基线对齐”≠“汉字墨迹底边一定等于基线”。前者是排版引擎的对齐规则后者是字体怎么画方块字。二、同一个 Mac两款字体两种中文在 MacBook 上用四线 Demo大字号 画线可以稳定复现1.PingFang SC汉字几乎占满四条线font-family:PingFang SC,sans-serif;观感汉字顶边接近顶线基线穿过汉字偏下位置汉字底边更靠近底线放大后非常明显不是“像x一样只站在基线上”2.Hiragino Sans GB汉字贴着基线font-family:Hiragino Sans GB,sans-serif;观感汉字底边明显靠近基线与x底更一致不会像苹方那样几乎铺满到下伸线更符合口语里说的「中文贴基线」Demo 当前默认就是冬青黑body{font-family:Hiragino Sans GB,sans-serif;}切换对比时只需改这一处刷新即可。对照小结font-family汉字相对四线一句话PingFang SC几乎占满顶线→底线满格方块字Hiragino Sans GB底边贴近基线更贴基线结论很实在混排规则一样汉字墨迹怎么落在 em 盒里由字体决定。小字号如 16px时苹方也可能“看起来像贴着x”放大或画上四条线后满格特征就会露出来。做像素级对齐不要只看小字截图。三、四线 Demo 在做什么文件sse-demo/四条线.html1. 用line-height: 1固定 em 盒.sample{font-size:96px;line-height:1;/* 方便四线对齐 */}此时顶线 ≈ 盒子顶部top: 0底线 ≈top: 1em2. 用 Canvas 实测基线与 x 高度constmctx.measureText(x g j y 汉字测试);constascentm.fontBoundingBoxAscent??...;constdescentm.fontBoundingBoxDescent??...;constxAscentctx.measureText(x).actualBoundingBoxAscent;constemascentdescent;constbaselineFromTop(ascent/em)*fontSize;constxTopFromTopbaselineFromTop-xAscent;再把绿线基线、蓝线x 顶线画到对应位置。3. 使用方式浏览器打开四条线.html改font-family为PingFang SC/Hiragino Sans GB看汉字底边相对绿线基线、紫线底线的位置DevTools → Computed → Rendered Fonts确认真正用到的字体文件四、vertical-align到底对齐的是什么很多人把「中文贴不贴基线」和vertical-align混在一起。其实字体决定汉字墨迹相对基线画在哪vertical-align决定行内盒图标、inline-block、图片等相对周围文字如何对齐它主要作用于inline/inline-block/table-cell不是用来垂直居中普通块级盒子的万能属性。常用取值说明值含义行内场景baseline默认元素基线与父级基线对齐middle元素中线对齐到父级基线 半个 x-height不是几何正中text-top对齐到父级字体顶线em 顶附近text-bottom对齐到父级字体底线em 底附近top对齐到整行行框顶部bottom对齐到整行行框底部sub/super下标 / 上标基线长度/%相对父级基线上下偏移%相对line-height和四条线的关系帮助记忆text-top ≈ 往顶线靠 middle ≈ 围绕「基线 ½ x-height」 baseline ≈ 贴基线对齐默认 text-bottom ≈ 往底线靠 top/bottom ≈ 相对整行行框不只是文字度量实战注意图标配中文默认baseline时图标底会按基线对齐若当前是苹方汉字偏满格光学上图标可能显得偏上/偏下。可试middle或微调.icon{vertical-align:middle;/* 仍不齐时再光学补偿 */transform:translateY(0.05em);}middle≠ 绝对垂直居中规范定义是相对「基线 半个 x-height」中英混排、不同字体下观感会漂。字体先于vertical-align同一套vertical-align: baseline换成苹方或冬青黑汉字自身高低已经不同角标观感也会变。先定font-family再调对齐。想要「中文贴基线」的混排观感Macfont-family:Hiragino Sans GB,sans-serif;这是字体选择问题单靠改vertical-align改变不了汉字在 em 盒里的画法。五、给前端的实用建议中英混排、角标、数字徽章在目标机型上用四线 Demo 或放大检查不要只看 16px。Mac 上若明确要「汉字底边贴基线」的观感优先试font-family:Hiragino Sans GB,sans-serif;若产品规范是苹方很多 App UIfont-family:PingFang SC,sans-serif;要接受汉字更偏满格对齐靠vertical-align 少量translateY做光学补偿。vertical-align管的是行内元素怎么对齐到文字度量/行框管不了字体把汉字画成贴基线还是满格。六、总结四条线顶线 / x 顶线 / 基线 / 底线是看清混排的尺子。在 Mac 实测中PingFang SC汉字几乎占满四条线Hiragino Sans GB汉字更贴基线vertical-align的baseline/middle/text-top/text-bottom/top/bottom等描述的是行内盒对齐方式应结合四条线理解。字体决定汉字落点vertical-align决定旁边元素怎么跟上——两者分工不同不要互相替代。如需把文中 Demo 片段改成「可切换苹方 / 冬青黑」的双栏对比版或补一段角标对齐的完整 CSS 示例可以再说一下我按同一文风补一节。

相关新闻

phpEnv环境下数据库字段注释乱码如何解决?

phpEnv环境下数据库字段注释乱码如何解决?

phpEnv 中 MySQL 表字段注释显示为问号或乱码根本原因是 phpEnv 自带的 MySQL(通常是 MariaDB 或旧版 MySQL)默认字符集为 latin1,而字段注释在建表时若未显式指定字符集,就会被存成 latin1_swedish_ci。即使你后续把连接、页面都…

2026/7/18 16:11:43阅读更多 →
MERN 高级认证项目解析:从前端到后端的完整认证流程指南 [特殊字符]

MERN 高级认证项目解析:从前端到后端的完整认证流程指南 [特殊字符]

MERN 高级认证项目解析:从前端到后端的完整认证流程指南 🔐 【免费下载链接】mern-advanced-auth Authentication Simplified - Project Based Tutorial 项目地址: https://gitcode.com/gh_mirrors/me/mern-advanced-auth MERN-advanced-auth 是一…

2026/7/18 16:09:43阅读更多 →
EMS系统实战:工业能耗管控新利器-能源管理系统

EMS系统实战:工业能耗管控新利器-能源管理系统

在“能耗双控”向“碳排放双控”逐步转变的宏观背景下,能源成本已成为工业企业盈利能力的“关键变量”。传统的能源管理模式——依靠人工巡检、月度抄表和Excel统计,不仅滞后性强,更无法捕捉瞬时的能源浪费。能源管理系统(Energy …

2026/7/18 16:09:43阅读更多 →
2026年口碑好的白钢雕塑,哪家才是专业之选?

2026年口碑好的白钢雕塑,哪家才是专业之选?

在白钢雕塑市场繁荣发展的2026年,客户在选择时往往会面临众多困惑,不知道哪家才是真正专业的选择。下面,我们就为大家深入剖析一些值得考虑的白钢雕塑厂家,并重点推荐奕锦不锈钢雕塑。奕锦不锈钢雕塑:品质与诚信的典范…

2026/7/18 16:59:47阅读更多 →
2026年7月全国精选5款箱包旅行用品零售SAAS小程序商城制作软件:0门槛做小程序

2026年7月全国精选5款箱包旅行用品零售SAAS小程序商城制作软件:0门槛做小程序

2026年7月全国精选5款箱包旅行用品零售SAAS小程序商城制作软件:0门槛做小程序 站在经营箱包专卖店和旅行用品门店的老板的角度,选择小程序工具不能只看模板和最低价格。箱包零售经营中,款式颜色更新快、线上线下库存易冲突、品牌真伪与授权重…

2026/7/18 16:59:47阅读更多 →
计算机仿真计算工作站选型全指南

计算机仿真计算工作站选型全指南

2026年跑ANSYS/Fluent仿真要什么硬件配置?仿真计算工作站选型全指南 仿真计算的硬件配置没有"唯一解"。CPU主频决定隐式求解速度,核心数和内存通道决定CFD/显式动力学并行效率,GPU加速则需要软件支持且精度匹配。本文基于ANSYS、Ab…

2026/7/18 16:59:47阅读更多 →
Three.js 跳跃动画教程

Three.js 跳跃动画教程

跳跃动画 Jump Animate ▶ 在线运行案例 案例合集: 三维可视化功能案例(threehub.cn)开源仓库github地址: https://github.com/z2586300277/three-cesium-examples400个案例代码: 网盘链接 你将学到什么 ShaderMaterial 自定…

2026/7/18 16:59:47阅读更多 →
人形机器人四大核心技术赛道拆解:运动控制、具身智能、灵巧操作与能源结构

人形机器人四大核心技术赛道拆解:运动控制、具身智能、灵巧操作与能源结构

1. 人形机器人不是科幻片道具,而是正在拆解的工业级系统工程 “人形机器人”这五个字最近频繁出现在科技媒体头条、产业峰会主论坛和一级市场BP里,但很多人第一次听到时,下意识反应还是《我,机器人》里的桑尼,或者波士…

2026/7/18 16:59:47阅读更多 →
从轨迹复现到通用智能:解析特斯拉Optimus与宇树机器人的技术路线差异

从轨迹复现到通用智能:解析特斯拉Optimus与宇树机器人的技术路线差异

1. 当“功夫”遇上“系统”:一场被误读的擂台赛最近,一个对比视频在圈子里传得挺火:宇树(Unitree)的机器人G1在演示中秀了一套行云流水的“功夫”,而特斯拉的Optimus(擎天柱)则显得步…

2026/7/18 16:57:47阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/18 10:49:13阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/18 8:49:08阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/18 14:49:24阅读更多 →
从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:14阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/17 22:48:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/17 17:26:50阅读更多 →