HTML & CSS – dir, direction, writing-mode, ltr (left to rigth), rtl (right to left)

前言

世界上有很多语言的阅读方向是不同的. 

英文

中文 (以前才有竖排文字, 现在中文和英语一样了)

阿拉伯文 (Arabic)

面对不同的语言, HTML 和 CSS 就需要不同的写法. 虽然我没有做过类似的项目, 但是知识还是要有的, 正所谓 "没吃过猪肉,也见过猪跑" 嘛.

 

参考:

HTML 中bdo标签的dir属性和CSS的direction属性的区别与用法

snaapy.com (Arabic 网站)

Youtube – CSS how to: text direction

Easily Create Sideways Text Using the “writing-mode” CSS Property

 

阅读方向

有 3 个方向需要搞清楚.

1. 整体靠的方向

靠左: 英文

靠右: 阿拉伯文

靠上: 中文

靠下: 没有看过

2. 字的方向

left to rigth: 英文

right to left: 阿拉伯文

top to bottom: 中文

bottom to top: 没看过

3. 换行的方向

 

horizontal top to bottom: 英文

vertical left to right: 中文

vertical right to left: 中文

horizontal bottom to top: 没有

小总结

靠的方向, 字的方向, 换行的方向

英语: left, left to right, horizontal top to bottom

中文: left or right, top to bottom, vertical left to right or right to left

阿拉伯文: right, right to left, horizontal top to bottom

 

dir Attribute

Attribute dir 或 CSS direction 是用来控制 "靠" 的方向的

<p>
  Lorem ipsum dolor sit amet consectetur adipisicing elit. Hic, consectetur!
</p>
<p dir="ltr">
  Lorem ipsum dolor sit amet consectetur adipisicing elit. Hic, consectetur!
</p>
<style>
  p {
    width: 300px;
    border: 1px solid black;
  }
  p:nth-child(1) {
    direction: ltr;
  }
  p:nth-child(2) {
    margin-top: 1rem;
    direction: rtl;
  }
</style>

效果

CSS direction 和 HTML dir attirbute 是一样的效果. 写其中一个就可以了, 推荐用 HTML.

rtl 是 rigth to left 缩写 (另外, ltr 就是 left to right, tb 就是 top to bottom)

它的效果是把整个段落往右边靠. 结尾的标点符号也换了位置. 但是每一个字是没有改变方向的.

 

bdo Attribute

bdo 是用来控制 “字的方向”.

<p>
  <bdo dir="rtl"
    >Lorem ipsum dolor, adipisicing elit. Eum, eius.其实, 你爱我像谁?</bdo
  >
</p>

给 p 加上 bdo tag dir="rtl" (它们一套用的, 如果写 ltr 就没效果了), BDO stands for Bi-Directional Override.

注意看, 它每一个字 (every alphabet) 都反向了.

也可以用 CSS style, 但推荐使用 HTML

p {
  unicode-bidi: bidi-override;
  direction: rtl; /* 一定是 rtl, 一套用的 */
}

 

Writing-mode

它用来控制 "换行的方向"

HTML

<p>I love you? ,其实,你爱我像谁?</p>
<style>
  p {
    writing-mode: vertical-lr;
    height: 100px;
    border: 1px solid black;
  }
</style>

效果

这个是 vertical left to right 的效果, 我是故意放英文的, 显然它不合适. 这也是为什么近年来越来越少用 vertical 排版了. 因为它很难表达英文和数字 (全文都用中文就可以. 但这很容易限制表达. 比如要创作一本 CSS 教程, 怎么可能不带英文呢?)

writing-mode: vertical-rl

vertical right to left 效果

writing-mode 默认值是 horizontal-tb, top to bottom 的意思 (没有 bottom to top 的哦)

 

总结

虽然这 3 种设定可以笛卡尔积出很多排版, 但真正会用到的只有几个而已.

英文

默认, 什么也不用 set, 它的默认值是

p {
  writing-mode: horizontal-tb;
  direction: ltr;
  /* unicode-bidi: bidi-override; */
}

效果

中文

CSS Style

p {
  writing-mode: vertical-lr;
  direction: ltr;
  /* unicode-bidi: bidi-override; */
}

direction: ltr 按理说应该是指 "靠左", 但由于换成 vertical 了, 所以它变成了 top, 这里需要我们自己清楚.

中文右到左

CSS Style

p {
  writing-mode: vertical-rl;
  direction: ltr;
  /* unicode-bidi: bidi-override; */
}

阿拉伯文

不会写阿拉伯文, 改用中文代替.

p {
  writing-mode: horizontal-tb;
  direction: rtl;
  unicode-bidi: bidi-override;
}

 

结束语

我自己没有做过相关项目, 这里只是写个大概, writing-mode 还有其它的设定的. 

但重点是下一篇的, CSS – Logical Properties, 没有上面这些基本概念, 很难理解为什么需要 Logical Properties. 所以才写了这篇.

 

posted @ 2022-03-05 10:33  兴杰  阅读(371)  评论(0编辑  收藏  举报