DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 价值 200 美元的免费积分!
hanging-punctuation
属性旨在为网页设计师提供更细粒度的网页排版控制。
悬挂标点符号背后的理念是将一些标点符号从文本元素的开头(或在较小程度上在结尾)“移出”框外,以保持阅读流程。
基本上,它会稍微将引号、项目符号或其他任何符号向左移动(或在 rtl
模式下向右移动),以便第一个字母与文档的其余部分正确对齐。

请注意,此属性是可选的,因此浏览器制造商可以选择支持或不支持它。
语法
hanging-punctuation: none | [ first || [ force-end | allow-end ] || last ]
blockquote p {
hanging-punctuation: first;
}
none
没有字符悬挂。这是此属性的默认值。
first
元素首行格式化行的开头出现的可用字符将悬挂。
last
元素末行格式化行的结尾出现的可用字符将悬挂。
force-end
行尾的句号或逗号将悬挂。

标点符号被强制悬挂,并且在测量行以进行对齐时不予考虑。
allow-end
如果行尾的句号或逗号在对齐之前无法容纳,则会悬挂。

首行的行尾标点符号不会悬挂,因为它无需悬挂即可容纳。但是,在第二行,空间不足,因此会悬挂。
可用字符
代码 | 字符 | 名称 |
---|---|---|
U +002C | , | COMMA |
U +002E | . | FULL STOP |
U +060C | ، | ARABIC COMMA |
U +06D4 | ۔ | ARABIC FULL STOP |
U +3001 | 、 | IDEOGRAPHIC COMMA |
U +3002 | 。 | IDEOGRAPHIC FULL STOP |
U +FF0C | , | FULLWIDTH COMMA |
U +FF0E | . | FULLWIDTH FULL STOP |
U +FE50 | ﹐ | SMALL COMMA |
U +FE51 | ﹑ | SMALL IDEOGRAPHIC COMMA |
U +FE52 | ﹒ | SMALL FULL STOP |
U +FF61 | 。 | HALFWIDTH IDEOGRAPHIC FULL STOP |
U +FF64 | 、 | HALFWIDTH IDEOGRAPHIC COMMA |
请注意,用户代理可以将任何字符添加到此列表中。引用规范
UA 可以根据需要包含其他字符。
相关属性
其他资源
- 规范中的
hanging-punctuation
hanging-punctuation
with CSS 作者:Steve Hickey
浏览器支持
这些浏览器支持数据来自 Caniuse,其中包含更多详细信息。数字表示浏览器从该版本开始支持该功能。
台式机
Chrome | Firefox | IE | Edge | Safari |
---|---|---|---|---|
否 | 否 | 否 | 否 | 10 |
移动设备/平板电脑
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
否 | 否 | 否 | 10.0-10.2 |
对于不支持的浏览器,可以使用负的 text-indent 作为回退
blockquote p {
text-indent: -0.5em; /* Change according to your font */
}
对于项目符号列表,您可能需要确保项目符号的位置设置为 outside
,并且容器的溢出没有设置为 hidden
。
我渴望有一天能够像 InDesign 这样的程序那样控制排版。
在处理一个客户项目时,我偶然发现了一个我认为是浏览器错误的东西,但我希望得到一些验证。
我原本希望
hanging-puncuation
能够准备好,所以,我使用了一个对p > q
声明进行负文本缩进。在大多数情况下效果很好,但在 CSS3 列中,标点符号会消失,无论使用多少overflow: visible
都无法恢复。这是一个 CodePen:http://cdpn.io/xkcgw
有人能告诉我这里发生了什么事吗?
J. Hogue,我不确定到底发生了什么,我对 css3 和多列也不太熟悉,但似乎引号所占用的视觉区域不再在该列的视觉边界框中。我在 Chrome 中测试过,并将第二列的左边距设置为 -1em,然后将 q 上的填充设置为 1em。执行此操作后,引号变得可见并且像单列示例那样“悬挂”。我说是“悬挂”,是因为它看起来像是悬挂,你必须相应地调整该列中的所有内容才能使其起作用。这感觉有点笨拙,而且考虑到要调整边距等内容,可能不值得付出额外的努力。另外,我不知道其他浏览器会如何渲染它 :/ 尽管如此,我希望你发现这在某种程度上对你有用!
Medium 目前 使用 JS 和 CSS 做到了这一点。
它会找到以引号开头的段落,然后添加一个具有负文本缩进的 CSS 选择器。
http://boldewyn.github.io/jQuery.exdent/
也可以叠加使用吗?
hanging-punctuation: first last;
还是只能选择一边?
事实证明,你可以在 Safari 的实现中做到这一点。
> text-indent: -0.5em; /* 根据您的字体更改 */
注意魔法数字! 你选择的值适合你,但可能不适合其他人。
将标点符号绝对定位应该适合所有人。对于开头标点符号,请参阅 幻灯片 38。
如果你不想将所有应该悬挂的标点符号都包装在你的标记中的
span
中,请参阅前面幻灯片上的 JavaScript。(将x-l
更改为你的需求,可能是p
。)请注意,这仅适用于段落开头的标点符号,不适用于所有恰好出现在换行符后的行开头的标点符号。
感谢 Chris 的撰写。我一直都在重新阅读艾伦·卢普顿的“用类型思考”。我有一个网页上有几个引号,看起来不太好。我使用了您关于负文本缩进的想法,但将单位值改为 ch,如下所示。
text-indent: -1ch; 或者
text-indent: -0.8ch;