如何用CSS仅选择日语CJK字符而非罗马音(Romaji)文本?
问题更新说明
经排查,语言代码本身没问题,失效是因为其他CSS代码冲突,之前关于ja-latn的猜测全错了。目前问题基本解决,后续排查完会更新内容,实在搞不定就重新开发。
纯CSS解决方案(针对原始需求)
要在不额外加HTML标记的前提下,只给日语CJK字符(汉字、假名)加text-emphasis,同时排除罗马音,直接用Unicode字符范围控制就行:
/* 基础方案:跳过拉丁字母,只给CJK字符加强调 */ :lang(ja) { text-emphasis: dot; /* 让罗马音(拉丁字母)跳过强调效果 */ text-emphasis-skip: space, punctuation, "a"-"z", "A"-"Z"; }
如果要更精准,直接指定日语字符的Unicode范围:
:lang(ja) { text-emphasis: dot; /* 只对指定的日语字符应用强调 */ text-emphasis-target: "\4E00"-"\9FFF", "\3040"-"\30FF", "\31F0"-"\31FF"; }
为什么这招管用
text-emphasis-skip能指定哪些字符不应用强调,这里直接排除所有大小写拉丁字母,罗马音自然不会被影响;text-emphasis-target则精准锁定日语常用的汉字、平假名、片假名以及扩展假名的Unicode范围,完全不会波及拉丁字符;- 不用再纠结
ja-latn的语言归属问题,彻底绕开之前的坑。
要是你之前是给整个:lang(ja)元素加的text-emphasis导致罗马音继承,用上面的方法就能精准控制,根本不需要加额外的<span>类。
内容的提问来源于stack exchange,提问作者916
相关产品推荐
相关产品推荐

