CSS竖排文字技巧:writing-mode垂直排版教程
在文章实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《CSS竖排文字技巧:writing-mode实现垂直排版》,聊聊,希望可以帮助到正在努力赚钱的你。
最核心的方法是使用writing-mode属性实现文字竖向排版,1. 使用writing-mode: vertical-rl实现文字从上到下、行从右到左排列,适用于模拟古籍或日文排版;2. 使用writing-mode: vertical-lr实现文字从上到下、行从左到右堆叠,适用于特定设计需求;3. 配合text-orientation: upright保持字符直立,避免英文数字旋转;4. 处理对齐时结合text-align与flex的align-items或margin实现居中;5. 溢出方向随文本流改变,需根据writing-mode调整overflow-x或overflow-y;6. 调整line-height控制行距,letter-spacing控制字间距;7. 响应式中竖排文字占用宽度大,可在小屏通过media query切回横向或隐藏;8. 图片需旋转或重裁以适配竖排,避免与多媒体紧密耦合;9. 交互元素建议保持横排或增大点击区域以提升触屏体验;10. 与Flexbox结合时,writing-mode会旋转主轴与交叉轴,flex-direction: column在vertical-rl下实现从上到下排列;11. Grid布局中writing-mode影响行列定义,可实现复杂混合排版;12. 实际使用需注意旧浏览器兼容性,尤其text-orientation: upright的支持情况。
CSS实现文字竖向排版,最核心也最直接的方法就是使用writing-mode
这个CSS属性。它能彻底改变文本流的方向,让文字像传统书法那样从上到下、从右到左或从左到右排列。
解决方案
要实现文字的竖向排版,你主要会用到writing-mode
属性。这个属性决定了文本行布局的方向,以及块级内容的堆叠方向。
我个人在项目中,最常用到的是vertical-rl
和vertical-lr
这两个值:
writing-mode: vertical-rl;
:这是最常见的竖排模式,文字从上到下排列,行从右到左堆叠。这很符合我们阅读日文或一些古籍的习惯,比如在网页侧边栏做一些标题,或者模拟古诗词的排版时,我就会倾向于用它。.vertical-text-rl { writing-mode: vertical-rl; /* 还可以配合其他属性调整细节 */ text-orientation: upright; /* 保持字符直立,而非旋转 */ white-space: nowrap; /* 防止自动换行 */ }
writing-mode: vertical-lr;
:文字从上到下排列,行从左到右堆叠。这种模式在某些特定的设计场景下会有用,比如你希望文字竖排,但整体布局又希望从左侧开始。.vertical-text-lr { writing-mode: vertical-lr; text-orientation: mixed; /* 默认值,中文字符直立,英文字符旋转90度 */ }
另外,text-orientation
属性也相当关键。它控制着竖排文本中字符的方向。比如,如果你希望所有字符,包括英文数字,都能保持“直立”而不是旋转90度,那么text-orientation: upright;
就是你的好帮手。但要注意,upright
在旧版本浏览器上兼容性可能没那么好,实际使用时需要留意。而mixed
是默认值,它会让中文、日文等全角字符保持直立,而西文字符(比如英文、数字)则会旋转90度,这在很多时候反而是我们想要的,因为它更符合阅读习惯。
竖向排版时,文字的对齐和溢出问题如何处理?
当我们把文字变成竖向排版后,很多原本横向排版的经验就得重新审视了。我发现,文字的对齐方式和处理溢出是两个经常让人头疼的问题。
首先是对齐。在横向排版里,text-align
控制的是水平对齐,但在竖向排版里,text-align
实际上控制的是“行内轴”上的对齐,也就是每行文字内部的对齐。而justify-content
(如果父容器是flex或grid)或者说传统的块级元素中,控制“块级轴”的对齐方式,也就是行与行之间的对齐。举个例子,如果我希望竖排的文字在容器里居中,我可能需要结合text-align: center;
和align-items: center;
(如果父容器是flexbox)或者设置margin: auto;
。这块确实有点绕,需要多尝试。
其次是溢出。当文字内容超出容器时,横向排版我们会用overflow-x
,竖向排版自然就想到overflow-y
。但实际情况是,writing-mode
改变了文本流的方向,所以溢出方向也随之改变。比如,writing-mode: vertical-rl;
时,文本是从右往左堆叠的,如果内容过多,它会向左侧溢出,此时你可能需要关注overflow-x
来处理滚动条或隐藏。这有点反直觉,但你只要记住,溢出总是发生在文本流的“结束”方向就行了。我通常会给容器设置一个固定的高度或宽度,然后根据writing-mode
的方向来设置对应的overflow
属性,比如overflow-x: auto;
或overflow-y: auto;
。
此外,行高(line-height
)和字间距(letter-spacing
)在竖排模式下也需要重新调整。line-height
在竖排模式下控制的是行与行之间的距离,而letter-spacing
则控制字符与字符之间的距离。我常常会把line-height
设置得比字号大一些,让行间距更舒适,而letter-spacing
则根据字体和设计需求来微调,有时候甚至会用到负值来让字符更紧凑。
竖向排版在响应式设计中会带来哪些挑战?
竖向排版在响应式设计中确实是个挑战,它不像横向排版那样有成熟的响应式模式。我个人在处理这块的时候,通常会遇到几个比较棘手的问题。
一个主要问题是空间利用率。在小屏幕设备上,竖向排版会迅速占据屏幕的宽度,导致内容显示区域非常有限。比如,如果一个侧边栏的竖排标题在PC端看起来很酷,但在手机上可能就直接占满了整个屏幕宽度,或者导致其他主要内容被挤压。这时候,我可能会考虑在特定断点(media query)下,将writing-mode
改回horizontal-tb
,让它变回横向排版,或者干脆隐藏掉。这是一种“妥协”,但能确保用户体验。
另一个挑战是图片和多媒体元素的适应性。如果你的设计中包含了图片或者视频,并且它们需要和竖排文字一起呈现,那么它们的尺寸和方向就成了问题。图片通常是横向的,如果和竖排文字混排,可能需要进行旋转(使用transform: rotate(90deg);
)或者重新裁剪。但这又会带来新的问题,比如图片质量下降,或者旋转后占据的空间不符合预期。我通常的策略是,尽量避免在响应式设计中将图片与竖排文字紧密耦合,或者为不同屏幕尺寸准备不同的图片版本。
再者,交互元素,比如按钮、链接,如果也采用竖排文字,在触摸屏上可能会影响点击区域的判断。手指点击的精确度不如鼠标,竖排的细长按钮可能不太容易点中。这种情况下,我通常会把交互元素的文字保持横向,或者至少提供一个足够大的点击区域。
总的来说,在响应式设计中引入竖向排版,需要非常谨慎。我倾向于只在非核心内容、装饰性文本,或者特定文化背景(如日文网站)的场景下使用。对于核心内容,尤其是在移动端,横向排版依然是更稳妥、用户体验更好的选择。
CSS writing-mode
与其他布局方式(如Flexbox、Grid)的结合使用技巧有哪些?
将writing-mode
与Flexbox或Grid结合使用,可以创造出非常灵活和强大的布局效果。我发现,理解它们如何协同工作,关键在于搞清楚“主轴”和“交叉轴”的概念会如何随着writing-mode
的变化而改变。
当一个容器设置了display: flex;
或display: grid;
,并且其内部元素的writing-mode
被设置为竖向时,Flexbox或Grid的主轴和交叉轴会根据writing-mode
的方向进行调整。
以Flexbox为例:
默认情况下,flex-direction: row;
意味着主轴是水平的。但如果容器内的文本是writing-mode: vertical-rl;
,那么Flex项目(flex items)会从右到左排列,而每个Flex项目内部的文本则是竖向的。更进一步,如果你将Flex容器本身也设置了writing-mode: vertical-rl;
,那么整个Flex容器的主轴和交叉轴都会旋转90度。这时,flex-direction: row;
实际上会使项目从上到下排列(因为“行”变成了竖直方向),而flex-direction: column;
则会使项目从右到左排列。这听起来有点烧脑,但一旦你理解了轴向的这种“旋转”,很多布局问题就能迎刃而解。我通常会画个草图,把轴向标出来,这样会清晰很多。
举个例子,如果我想做一个竖排导航栏,每个导航项都竖排显示,并且从上到下排列:
<nav class="vertical-nav"> <a href="#">首页</a> <a href="#">产品</a> <a href="#">关于我们</a> </nav>
.vertical-nav { display: flex; flex-direction: column; /* 让导航项从上到下排列 */ writing-mode: vertical-rl; /* 容器本身也竖排,所以主轴是垂直的 */ height: 100%; /* 假设有足够高度 */ justify-content: space-around; /* 垂直方向均匀分布 */ } .vertical-nav a { writing-mode: vertical-rl; /* 链接文字竖排 */ text-orientation: upright; /* 保持文字直立 */ padding: 10px 5px; white-space: nowrap; /* 其他样式 */ }
在Grid布局中,这个概念同样适用。grid-template-columns
和grid-template-rows
的定义也会受到writing-mode
的影响。当你设置了writing-mode
后,grid-template-columns
实际上可能控制的是垂直方向的轨道,而grid-template-rows
控制的是水平方向的轨道。这使得创建复杂的混合布局变得可能,比如你可以在一个Grid布局中,某些单元格是横排文本,另一些是竖排文本,通过巧妙地结合writing-mode
和Grid的定位属性,可以实现非常独特的视觉效果。我个人觉得Grid在这方面提供了比Flexbox更大的自由度,因为它能更精确地控制二维布局。但同样的,这种轴向的转换需要一些时间去适应和理解。
终于介绍完啦!小伙伴们,这篇关于《CSS竖排文字技巧:writing-mode垂直排版教程》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

- 上一篇
- Golang私有模块配置指南:GOPRIVATE设置详解

- 下一篇
- 豆包AI创意库!朋友圈神图评论提升秘诀
-
- 文章 · 前端 | 35秒前 |
- HTML表格跨域问题解决方法大全
- 180浏览 收藏
-
- 文章 · 前端 | 4分钟前 |
- JS中setTimeout用法与适用场景详解
- 231浏览 收藏
-
- 文章 · 前端 | 6分钟前 |
- 网页结构详解与HTML基础教程
- 218浏览 收藏
-
- 文章 · 前端 | 9分钟前 | CSS 自适应布局 表格列宽 fr单位 table-layout:fixed
- CSS固定列宽百分比与fr自适应布局详解
- 172浏览 收藏
-
- 文章 · 前端 | 11分钟前 |
- JavaScript事件循环与同步执行顺序详解
- 217浏览 收藏
-
- 文章 · 前端 | 12分钟前 |
- VSCode运行JS代码的3种方式
- 244浏览 收藏
-
- 文章 · 前端 | 15分钟前 |
- React中State未更新?原因及解决方法
- 228浏览 收藏
-
- 文章 · 前端 | 16分钟前 |
- CSS中box-shadow与text-shadow区别详解
- 274浏览 收藏
-
- 文章 · 前端 | 20分钟前 | GeolocationAPI navigator.geolocation getCurrentPosition 用户位置 经纬度
- 获取用户位置方法及代码示例
- 241浏览 收藏
-
- 文章 · 前端 | 22分钟前 |
- CSS文本样式设置全解析
- 252浏览 收藏
-
- 文章 · 前端 | 23分钟前 |
- JS防抖函数原理与实现方法解析
- 241浏览 收藏
-
- 文章 · 前端 | 24分钟前 |
- Ext.Ajax全局添加参数方法详解
- 237浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 511次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 498次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 千音漫语
- 千音漫语,北京熠声科技倾力打造的智能声音创作助手,提供AI配音、音视频翻译、语音识别、声音克隆等强大功能,助力有声书制作、视频创作、教育培训等领域,官网:https://qianyin123.com
- 165次使用
-
- MiniWork
- MiniWork是一款智能高效的AI工具平台,专为提升工作与学习效率而设计。整合文本处理、图像生成、营销策划及运营管理等多元AI工具,提供精准智能解决方案,让复杂工作简单高效。
- 161次使用
-
- NoCode
- NoCode (nocode.cn)是领先的无代码开发平台,通过拖放、AI对话等简单操作,助您快速创建各类应用、网站与管理系统。无需编程知识,轻松实现个人生活、商业经营、企业管理多场景需求,大幅降低开发门槛,高效低成本。
- 168次使用
-
- 达医智影
- 达医智影,阿里巴巴达摩院医疗AI创新力作。全球率先利用平扫CT实现“一扫多筛”,仅一次CT扫描即可高效识别多种癌症、急症及慢病,为疾病早期发现提供智能、精准的AI影像早筛解决方案。
- 168次使用
-
- 智慧芽Eureka
- 智慧芽Eureka,专为技术创新打造的AI Agent平台。深度理解专利、研发、生物医药、材料、科创等复杂场景,通过专家级AI Agent精准执行任务,智能化工作流解放70%生产力,让您专注核心创新。
- 181次使用
-
- 优化用户界面体验的秘密武器:CSS开发项目经验大揭秘
- 2023-11-03 501浏览
-
- 使用微信小程序实现图片轮播特效
- 2023-11-21 501浏览
-
- 解析sessionStorage的存储能力与限制
- 2024-01-11 501浏览
-
- 探索冒泡活动对于团队合作的推动力
- 2024-01-13 501浏览
-
- UI设计中为何选择绝对定位的智慧之道
- 2024-02-03 501浏览