CSS中 direction 和 writing-mode 是两个用于控制文本布局方向的重要属性,它们在实现多语言支持和特殊排版效果时非常有用。下面将深入解析这两个属性的用法、区别和实际应用场景。

一、direction 属性详解
1.1 基本概念

direction 属性用于控制文本的水平排列方向,主要影响从左到右或从右到左的文本流向。

1.2 取值
  • ltr:left-to-right,从左到右排列(默认值)。

  • rtl:right-to-left,从右到左排列。

1.3 影响范围
  • 文本的水平排列方向。

  • 行内元素的顺序。

  • 表格列的排列顺序。

  • 列表项的排列方向。

  • 表单元素(如输入框)的文本方向。

1.4 代码示例
/* css */
div.ltr {
  direction: ltr;
  border: 1px solid #ccc;
  padding: 10px;
  margin-bottom: 20px;
}

div.rtl {
  direction: rtl;
  border: 1px solid #ccc;
  padding: 10px;
}

<!--html-->
<div class="ltr">
  <p>这是从左到右排列的文本 (默认方向)。</p>
  <ul>
    <li>项目 1</li>
    <li>项目 2</li>
    <li>项目 3</li>
  </ul>
  <table border="1">
    <tr>
      <td>列 1</td>
      <td>列 2</td>
      <td>列 3</td>
    </tr>
  </table>
</div>

<div class="rtl">
  <p>这是从右到左排列的文本。</p>
  <ul>
    <li>项目 1</li>
    <li>项目 2</li>
    <li>项目 3</li>
  </ul>
  <table border="1">
    <tr>
      <td>列 1</td>
      <td>列 2</td>
      <td>列 3</td>
    </tr>
  </table>
</div>
1.5 实际应用

direction: rtl 主要用于支持阿拉伯语、希伯来语等从右到左书写的语言。在这些语言中,不仅文本流动方向改变,整个页面布局也会相应调整。

二、writing-mode 属性详解
2.1 基本概念

writing-mode 属性控制文本的整体布局方向,包括文本块的排列方向和文本行内字符的流向。它可以改变文本是水平排列还是垂直排列。

2.2 取值
  • horizontal-tb:水平方向,从上到下(默认值)。

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

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

  • sideways-rl:文本垂直排列,字符向右旋转。

  • sideways-lr:文本垂直排列,字符向左旋转。

2.3 影响范围
  • 文本块的排列方向(水平或垂直)。

  • 行的方向和顺序。

  • 字符的排列方式。

  • 块级元素的布局。

  • 文档的整体流动方向。

2.4 代码示例
/* css */
.container {
  display: flex;
  gap: 20px;
}

.box {
  border: 1px solid #ccc;
  padding: 10px;
  width: 200px;
  height: 300px;
}

.horizontal-tb {
  writing-mode: horizontal-tb;
}

.vertical-rl {
  writing-mode: vertical-rl;
}

.vertical-lr {
  writing-mode: vertical-lr;
}

.sideways-rl {
  writing-mode: sideways-rl;
}

.sideways-lr {
  writing-mode: sideways-lr;
}

<!-- html-->
<div class="container">
  <div class="box horizontal-tb">
    <h3>horizontal-tb</h3>
    <p>这是默认的水平文本布局,从上到下排列。</p>
  </div>
  
  <div class="box vertical-rl">
    <h3>vertical-rl</h3>
    <p>这是垂直文本布局,从上到下,从右到左排列。</p>
  </div>
  
  <div class="box vertical-lr">
    <h3>vertical-lr</h3>
    <p>这是垂直文本布局,从上到下,从左到右排列。</p>
  </div>
</div>
2.5 实际应用
  • 中文、日文、朝鲜文等亚洲语言的垂直排版。

  • 创建特殊的设计效果和排版样式。

  • 制作垂直导航菜单。

  • 实现多栏布局中的特殊排列需求。

三、direction 和 writing-mode 的区别

特性

direction

writing-mode

主要作用

控制水平方向的文本流向

控制文本块的整体布局方向(水平或垂直)

取值范围

ltr, rtl

horizontal-tb, vertical-rl, vertical-lr, sideways-rl, sideways-lr

影响范围

主要影响水平方向的排列

影响整个文本块的布局方向

应用场景

多语言支持(尤其是RTL语言)

特殊排版效果、垂直文本

与坐标轴关系

只影响水平轴(X轴)

同时影响水平轴(X轴)和垂直轴(Y轴)

3.1 组合使用示例

当 direction 和 writing-mode 组合使用时,可以实现更复杂的文本布局效果:

/* css */
.combo-box {
  border: 1px solid #ccc;
  padding: 20px;
  margin: 10px;
  display: inline-block;
}

.combo1 {
  writing-mode: vertical-rl;
  direction: rtl;
}

.combo2 {
  writing-mode: vertical-lr;
  direction: rtl;
}

<!-- html -->
<div class="combo-box combo1">
  <h4>vertical-rl + direction: rtl</h4>
  <p>这是一个垂直排列且方向从右到左的文本示例。</p>
</div>

<div class="combo-box combo2">
  <h4>vertical-lr + direction: rtl</h4>
  <p>这是一个垂直排列但方向设置为从右到左的文本示例。</p>
</div>
四、浏览器兼容性
  • direction:所有现代浏览器都支持,IE6+也支持

  • writing-mode:现代浏览器(Chrome 48+, Firefox 41+, Safari 10+, Edge 12+)支持标准值,但旧版浏览器可能需要前缀或只支持部分值。

请点击 directionwriting-mode 来查看更多浏览器兼容性支持信息。

五、通俗理解

5.1  direction(方向) :主要控制 水平方向 上文本的流动方向,就像决定文字是从左到右还是从右到左写。

  • ltr(left-to-right):从左到右,适用于大多数语言如英文、中文。

  • rtl(right-to-left):从右到左,适用于阿拉伯语、希伯来语等。

  • 比喻:决定你写字时是从本子左边开始还是右边开始。

 

5.2  writing-mode(书写模式) :控制文本块整体的布局方向,决定文本是水平排列还是垂直排列。

  • horizontal-tb:水平方向,从上到下排列(默认模式)

  • vertical-rl:垂直方向,从右到左排列(如日本古籍的排版)

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

  • 比喻:决定你是把本子横过来写还是竖过来写。

5.3 区别总结:
  • direction 主要控制单个文本行内的流向(水平方向)。

  • writing-mode 控制整个文本块的布局方向(可以是水平或垂直)。

  • 一个(direction)控制行内流动,一个(writing-mode)控制整体布局。

六、最佳实践
  1. 使用 direction 时,通常应 unicode-bidi 属性结合使用,以确保复杂文本的正确显示。

  2. 在RTL语言页面中,可在 <html> 元素上设置 dir="rtl" 属性。

  3. 使用 writing-mode 创建垂直文本时,注意调整元素的宽度和高度以适应内容。

  4. 对于需要同时支持LTR和RTL语言的网站,可以使用CSS变量或CSS框架来简化布局调整。

通过合理运用这两个属性,开发者可以创建更加灵活、符合不同语言和设计需求的网页布局,提升用户体验。

彩蛋

完整示例链接,请移步Cnb: Cnb中的完整示例