Han icon indicating copy to clipboard operation
Han copied to clipboard

Chromium 123 text-spacing-trim 与标点挤压冲突

Open Alan-Liang opened this issue 1 year ago • 3 comments

Chromium 123 引入并默认启用了 CJK 标点挤压。在字体支持 chws 或 halt 特性时,会自动将符合条件的标点转换为半身。因此,若显示字体 fallback 到了思源等支持 chws 或 halt 的字体,标点会被挤压两次(浏览器和 js):

image

上图使用的版本为 123.0.6312.86 (正式版本) (64 位) ,字体为 Noto Sans CJK SC。

我们目前暂时关闭了 Chromium 的标点挤压(因为很多字体还没有支持所需的 OpenType 特性):

body {
    text-spacing-trim: space-all;
}

不知道是否有更好的解决方法?

Alan-Liang avatar Apr 05 '24 04:04 Alan-Liang

@Alan-Liang 回覆晚了請見諒。

距離上次han.css的更新已經很多年了,當前版本包含著大量與現有web技術相衝突、或早已不合時宜的代碼。我目前正在緩慢地開發新版本,並預期在下個發布版中解決這些與瀏覽器新特性相衝突的問題。

話雖如此,在正式發布前也無法解決您當下的問題,如果您要在實際項目中使用han.css,可以暫時透過修改JS渲染流程來避免標點被重覆擠壓的問題。

// 原先的初始化方式:
// Han.init()

// 修改為:
const $body = document.body
const han = Han($body)

han
.initCond()
.renderElem()
.renderHanging()

// 只在瀏覽器不支援 `text-spacing-trim: normal` 特性時調用han.css提供的標點擠壓API
if (!CSS.supports('text-spacing-trim: normal')) {
  han.renderJiya()
}

han
.renderHWS()
.correctBasicBD()
.substCombLigaWithPUA()

ethantw avatar Jul 27 '24 14:07 ethantw

主要是这个属性还依赖字体中的 chws 特性,单纯使用 CSS.supports('text-spacing-trim: normal') 也不够准确。

yisibl avatar Oct 22 '24 09:10 yisibl

这个特性出现时就发现使用本工程的网站标点挤压冲突,念及本工程已经过去很久就没来看。但现在做其他东西,发现要手动实现更复杂排版反而要关闭这个特性,感觉这个特性及预期效果就很受限。

0xis-cn avatar Nov 24 '24 03:11 0xis-cn