← CSS word-spacing 属性 CSS zoom 属性 →

CSS writing-mode 属性

原创 2025-09-10 CSS 已有人查阅

CSS writing-mode 属性详解:实现文字横竖排版的完整指南

什么是 writing-mode 属性?

CSS 的 writing-mode 属性用于定义文本的书写方向,控制内容在页面上的流动方式。该属性不仅影响文本方向,还决定了块级元素的堆叠方向和内容流动顺序。通过合理使用这一属性,可以实现中文传统竖排文字效果或特殊排版需求。

属性语法与取值

writing-mode 属性的基本语法如下:

selector {
  writing-mode: horizontal-tb | vertical-rl | vertical-lr;
}

属性值详解

  • horizontal-tb(默认值)
    文本水平排列,阅读顺序为从左到右、从上到下。这是现代网页的标准排版方式。

  • vertical-rl
    文本垂直排列,阅读顺序为从上到下、从右到左。这是中文传统书籍的排版方式。

  • vertical-lr
    文本垂直排列,阅读顺序为从上到下、从左到右。这种排版方式在某些亚洲语言中使用。

基础应用示例

示例1:三种书写模式对比

<!DOCTYPE html>
<html>
<head>
<style>
  .container {
    display: flex;
    gap: 20px;
    padding: 20px;
    font-family: "Microsoft YaHei", sans-serif;
  }
  .text-box {
    border: 2px solid #4CAF50;
    padding: 15px;
    width: 250px;
    height: 300px;
    font-size: 16px;
    line-height: 1.6;
    background-color: #f9f9f9;
  }
  .horizontal {
    writing-mode: horizontal-tb;
  }
  .vertical-lr {
    writing-mode: vertical-lr;
  }
  .vertical-rl {
    writing-mode: vertical-rl;
  }
  h3 {
    color: #333;
    text-align: center;
  }
</style>
</head>
<body>

<div class="container">
  <div>
    <h3>水平排版 (horizontal-tb)</h3>
    <div class="text-box horizontal">
      <p>欢迎来到代码号学习平台。在这里,您可以系统学习前端开发技术,包括HTML、CSS和JavaScript等。我们的教程由浅入深,适合各个层次的学习者。</p>
    </div>
  </div>
  
  <div>
    <h3>垂直排版-从左到右 (vertical-lr)</h3>
    <div class="text-box vertical-lr">
      <p>欢迎来到代码号学习平台。在这里,您可以系统学习前端开发技术,包括HTML、CSS和JavaScript等。</p>
    </div>
  </div>
  
  <div>
    <h3>垂直排版-从右到左 (vertical-rl)</h3>
    <div class="text-box vertical-rl">
      <p>欢迎来到代码号学习平台。在这里,您可以系统学习前端开发技术,包括HTML、CSS和JavaScript等。</p>
    </div>
  </div>
</div>

</body>
</html>

示例2:结合 letter-spacing 属性

<!DOCTYPE html>
<html>
<head>
<style>
  .poem-container {
    margin: 30px auto;
    max-width: 1200px;
  }
  .poem {
    border: 1px solid #ddd;
    margin: 20px;
    padding: 20px;
    display: inline-block;
    background-color: #fffaf0;
  }
  .classical {
    writing-mode: vertical-rl;
    height: 400px;
    letter-spacing: 8px;
    font-size: 20px;
    font-family: "SimSun", serif;
    line-height: 2;
  }
  .modern {
    writing-mode: horizontal-tb;
    width: 400px;
    letter-spacing: 2px;
    font-size: 18px;
    font-family: "Microsoft YaHei", sans-serif;
    line-height: 1.8;
  }
  h2 {
    color: #8B4513;
    border-bottom: 2px solid #8B4513;
    padding-bottom: 10px;
  }
</style>
</head>
<body>

<div class="poem-container">
  <h2>古诗竖排效果</h2>
  <div class="poem classical">
    <p>床前明月光,疑是地上霜。</p>
    <p>举头望明月,低头思故乡。</p>
    <p>——李白《静夜思》</p>
  </div>

  <h2>现代诗横排效果</h2>
  <div class="poem modern">
    <p>在这静谧的夜晚,</p>
    <p>月光洒满窗前,</p>
    <p>思绪随风飘远,</p>
    <p>回到那熟悉的故乡。</p>
  </div>
</div>

</body>
</html>

实际应用场景

场景1:中文传统文献展示

<!DOCTYPE html>
<html>
<head>
<style>
  .classical-literature {
    writing-mode: vertical-rl;
    height: 500px;
    font-family: "KaiTi", "楷体", serif;
    font-size: 24px;
    line-height: 2.5;
    padding: 30px;
    border-right: 3px double #8B4513;
    background: url('https://www.ebingou.cn/biancheng/images/2.jpg') no-repeat center;
    background-size: cover;
    color: #333;
    margin: 0 auto;
    max-width: 600px;
  }
  .literature-container {
    background-color: #f5f5dc;
    padding: 40px;
    text-align: center;
  }
  h2 {
    color: #8B4513;
    font-family: "SimSun", serif;
  }
</style>
</head>
<body>

<div class="literature-container">
  <h2>论语·学而篇</h2>
  <div class="classical-literature">
    <p>子曰:学而时习之,不亦说乎?</p>
    <p>有朋自远方来,不亦乐乎?</p>
    <p>人不知而不愠,不亦君子乎?</p>
    <p>曾子曰:吾日三省吾身——</p>
    <p>为人谋而不忠乎?</p>
    <p>与朋友交而不信乎?</p>
    <p>传不习乎?</p>
  </div>
</div>

</body>
</html>

场景2:创意名片设计

<!DOCTYPE html>
<html>
<head>
<style>
  .business-card-container {
    display: flex;
    justify-content: center;
    gap: 40px;
    padding: 50px;
    flex-wrap: wrap;
  }
  .business-card {
    width: 300px;
    height: 200px;
    padding: 20px;
    border-radius: 10px;
    box-shadow: 0 4px 8px rgba(0,0,0,0.1);
    display: flex;
    align-items: center;
    justify-content: center;
  }
  .vertical-card {
    writing-mode: vertical-rl;
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    color: white;
  }
  .horizontal-card {
    writing-mode: horizontal-tb;
    background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
    color: white;
  }
  .card-content {
    text-align: center;
  }
  .name {
    font-weight: bold;
    margin-bottom: 10px;
  }
  .title {
    opacity: 0.9;
  }
  .contact {
    margin-top: 15px;
    font-size: 0.9em;
  }
</style>
</head>
<body>

<div class="business-card-container">
  <div class="business-card vertical-card">
    <div class="card-content">
      <div class="name">张小明</div>
      <div class="title">前端开发工程师</div>
      <div class="contact">电话:13800138000</div>
      <div class="contact">邮箱:zhang@example.com</div>
    </div>
  </div>
  
  <div class="business-card horizontal-card">
    <div class="card-content">
      <div class="name">李小红</div>
      <div class="title">UI/UX设计师</div>
      <div class="contact">电话:13900139000</div>
      <div class="contact">邮箱:li@example.com</div>
    </div>
  </div>
</div>

</body>
</html>

响应式设计中的应用

<!DOCTYPE html>
<html>
<head>
<style>
  .responsive-container {
    max-width: 1000px;
    margin: 0 auto;
    padding: 20px;
  }
  .content-block {
    margin: 20px 0;
    padding: 20px;
    border: 1px solid #ddd;
    border-radius: 8px;
  }
  /* 移动端竖排显示 */
  @media (max-width: 768px) {
    .responsive-vertical {
      writing-mode: vertical-rl;
      height: 400px;
      padding: 15px;
      font-size: 18px;
    }
  }
  /* 桌面端横排显示 */
  @media (min-width: 769px) {
    .responsive-vertical {
      writing-mode: horizontal-tb;
      padding: 20px;
      font-size: 16px;
    }
  }
  .code-example {
    background-color: #f4f4f4;
    padding: 15px;
    border-left: 4px solid #4CAF50;
    margin: 15px 0;
    font-family: monospace;
  }
</style>
</head>
<body>

<div class="responsive-container">
  <div class="content-block responsive-vertical">
    <h3>响应式排版示例</h3>
    <p>在移动设备上,这段文字将以竖排方式显示,模拟传统中文阅读体验;在桌面设备上,将以标准的横排方式显示。</p>
    <p>这种响应式设计让用户在不同设备上都能获得的阅读体验。</p>
  </div>
  
  <div class="code-example">
    /* CSS代码示例 */<br>
    @media (max-width: 768px) {<br>
    &nbsp;&nbsp;.responsive-vertical {<br>
    &nbsp;&nbsp;&nbsp;&nbsp;writing-mode: vertical-rl;<br>
    &nbsp;&nbsp;}<br>
    }<br>
    @media (min-width: 769px) {<br>
    &nbsp;&nbsp;.responsive-vertical {<br>
    &nbsp;&nbsp;&nbsp;&nbsp;writing-mode: horizontal-tb;<br>
    &nbsp;&nbsp;}<br>
    }
  </div>
</div>

</body>
</html>

本节课程知识要点

  1. writing-mode 基础概念:该属性控制文本的书写方向和内容流动方式

  2. 三种主要模式

    • horizontal-tb:水平方向,从上到下

    • vertical-rl:垂直方向,从右到左

    • vertical-lr:垂直方向,从左到右

  3. 实际应用价值

    • 中文传统文献的竖排展示

    • 创意设计和特殊排版需求

    • 响应式网页设计中的自适应布局

  4. 兼容性考虑:现代浏览器均支持 writing-mode 属性,但在实际项目中仍需测试不同浏览器的表现

  5. 结合其他属性:可以与 letter-spacingline-height 等属性配合使用,获得更好的排版效果

← CSS word-spacing 属性 CSS zoom 属性 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号