如何将标点符号放在垂直CJK文本中?

问题描述 投票:1回答:1

我有一个CJK(中文)文本使用CSS(body { writing-mode: vertical-rl; })垂直显示。不幸的是,标点符号默认不居中:

Chinese punctuation

句号和逗号对齐到右上角,而不是中心。我在Firefox 65.0和Chromium 71.0中获得了相同的结果。

是否有一种既定方法可以使标点符号居中?我觉得我必须遗漏一些明显的东西。我所拥有的实体中文书籍都印有中心标点符号,然而阅读W3C article on vertical text和MDN CSS文档却没有找到关于垂直CJK文本的标点符号。

css css3 cjk punctuation vertical-text
1个回答
2
投票

似乎标点符号的对齐受语言属性lang的影响;例如,在中文中,它取决于属性值是普通的"zh"还是传统的"zh-Hant"

Firefox screenshot

这是我用来测试它的HTML文档(我必须缩短中文文本以允许内联发布):

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Test Vertical Writing Punctuation</title>
    <style>
        body { writing-mode: vertical-rl; }
        .vertical-text { height: 9em; }
    </style>
</head>
<body>
<hr>
<div class="vertical-text" lang="zh">
「體也若有端」五字,張惠言謂為第二條之錯簡,孫從之。
</div>
<hr>
<div class="vertical-text" lang="zh-Hant">
「體也若有端」五字,張惠言謂為第二條之錯簡,孫從之。
</div>
<hr>
</body>
</html>

顺便说一句,我完全不知道从一个随机网站复制的中文文本的含义......

更新:

根据Best Practices for Chinese Layout – Bobby Tung的说法,只有当文本以繁体中文字体显示时,无论书写模式如何(水平或垂直),中文标点似乎都会居中。

Firefox或Safari等Web浏览器遵循lang属性并自动分配适当的字体进行显示;但是,Chrome似乎忽略了它。额外的:需要lang CSS选择器然后......

这是另一个测试页面,其中包含水平和垂直文本的中心标点符号:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Test Centered Punctuation</title>
    <style>
        :lang(zh-Hant) { font-family: Verdana, Arial, Helvetica, sans-serif, times, Heiti TC, PMingLiU, PMingLiu-ExtB, SimSun, SimSun-ExtB, HanaMinA, HanaMinB; }
        .horizontal-text { width: 9em; writing-mode: horizontal-tb; }
        .vertical-text { height: 9em; writing-mode: vertical-rl; }
    </style>
</head>
<body lang="zh-Hant">
<hr>
<div class="horizontal-text">
「體也若有端」五字,張惠言謂為第二條之錯簡,孫從之。
</div>
<hr>
<div class="vertical-text">
「體也若有端」五字,張惠言謂為第二條之錯簡,孫從之。
</div>
<hr>
</body>
</html>

注意:繁体中文的字体堆栈是中文文本项目网站上使用的字体堆栈。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.