html - 调整 ruby​​ 文本的垂直定位

标签 html css cjk ruby-tag

我想使用 HTML <ruby>用发音标记日语文本。但是,我发现在大字体下,<rt> 的基线文本远高于它标记的字符的顶部。这是一个说明我的意思的例子:

ruby {
  font-size: 72pt;
}
<ruby>遅<rt>おそ</rt>い</ruby>

作为引用,这是它在我当前的浏览器(Linux 上的 Firefox)中的显示方式,尽管我在其他浏览器中看到过类似的行为:

incorrectly-formatted ruby text

我想要的是将 ruby 文本的高度调整为更像这样的东西:

correctly-formatted ruby text

但是,我尝试的任何事情似乎都不会对 ruby​​ 文本的定位产生任何影响。这些都是我尝试过但没有用的东西:

  • vertical-align: -10px
  • postion: relativetop: 10px
  • transform: translateY(-10px)

有什么办法可以调整这段文字的位置吗?

最佳答案

我想我找到了一个允许样式化的解决方案 <ruby>元素,同时保留它们的语义。这是一个演示,然后是一些关键见解:

body {
  font-size: 72pt;
}

ruby {
  display: inline-flex;
  flex-direction: column-reverse;
}

rb, rt {
  display: inline;
  line-height: 1;
}
<ruby><rb>遅</rb><rt>おそ</rt></ruby>い

设置<rt>元素 display: inline .

Chrome 在 <rt> 时似乎有一些特殊行为是display: block ,这会阻止将其样式设置为普通的 block 级元素。使用 display: inline 时,该特殊行为似乎被禁用.

使用单独的 <ruby>每个注释的元素。

虽然有几种有效的方法来标记 ruby​​ 文本,但使用新的 <ruby>每个注释的 element 为我们提供了一个很好的容器元素,并使样式化更加容易。这在语义上等同于使用具有多个 <rt> 的单个 ruby​​ 元素。和 <rb>元素。

使用 flexbox 定位 ruby​​ 文本。

Flexbox 是迄今为止定位 ruby​​ 文本的最简单和最强大的方式。如果你的浏览器还不支持 flexbox,你可以尝试使用 inline-table ,但我在使用它设置内容样式方面没有取得多大成功。旧版浏览器的用户可能还想查看 Paul Fioravanti's answer .

我用了display: inline-flex将 ruby​​ 元素视为普通文本,同时仍然具有 flex 内容,然后 flex-direction: column reverse使用 <rt> 垂直定位文本在上面。

设置line-height: 1<ruby>元素。

文本与其 ruby​​ 标记之间的许多额外空间可归因于默认情况下行高与文本高度不同的事实。设置line-height: 1将确保它们相同。

如果元素之间的间距仍然不是所需的间距,设置margin-bottom<rt> 上元素可以调整它。它可以设置为正值或负值。

关于html - 调整 ruby​​ 文本的垂直定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38680695/

相关文章:

html - 中文字体和粗体文本行为

php - 将文本识别为简体中文和繁体中文

c++ - 无法在 Qt-Embedded 4.7.3 中显示汉字

javascript - Phantom JS 没有点击按钮,但如果我使用任何其他浏览器它就可以工作

HTML 边距和填充异常行为

html - 响应式横幅图片

html - CSS 边框在 MS Edge 中出现和消失

html - 具有两个跨度的列表项左右对齐

html - 需要帮助在 CSS 中制作这个标志

html - 幻灯片内容的SEO开发