可悲的是,你不能用纯 CSS 做到这一点。目前,您最好的希望是重写文本以避免中间/结尾大写或使用 JavaScript。(是的,我的眼睛也在转动。)
您建议的方法不起作用,因为一次只有一个text-transform
属性值适用于一个元素。当您指定类似...</p>
#parent { text-transform: lowercase; }
#parent #child { text-transform: capitalize; }
…text-transform
子元素上的值为 now capitalize
,仅此而已。这是应用于该元素的唯一转换。
有一个提案草案允许作者使用规则定义自定义映射表@text-transform
,但就目前而言,我怀疑它是否适用于这种情况。问题是scope
描述符(在一个单词中应用转换的地方)只取一个值——您可以定义整个单词或单词开头、结尾或中间部分的某种组合的转换,但如果您每个部分可以有不同的转换。
这似乎在wiki 提案草案的第 8 期中得到承认,并且几年前在 www-style 上讨论了多种转换。在那个线程中,建议text-transform
在一个元素上只允许一个值,并且应该在@text-transform
规则中进行组合;但是,规范草案指出:
如果引用的文本转换具有与引用它们的文本转换中指定的范围不同的范围,则它们适用于两个范围的交集。
所以这样的规则是行不通的:
@text-transform lowercase-then-capitalize {
transformation: lowercase, "a-z" to "A-Z" single;
scope: initial;
}
我可以看到三个明显的解决方案:
- 允许在规则
scope
中指定多个值;@text-transform
- 添加描述符以继承先前的转换而不覆盖其范围值;或者
- 允许
text-transform
选择器有多个值。
如果你想看到这个问题的纯 CSS 解决方案,www 风格的邮件列表可能是一个不错的选择。