最近在 CSS Dev Talk 上,我参加了 Clarissa Peterson 的演讲,主题是响应式网页排版。其中一部分内容是关于行长和可读性的。当然,每个规则都有例外,您的实际效果可能有所不同,但传统观点认为正文(长文本、多段落,需要不止一眼才能看完...)每行应包含 45 到 75 个字符才能保证舒适度。更短则显得笨拙,更长则容易让人迷失方向,难以找到下一行。
在固定宽度设计的时代,让文本每行包含 45 到 75 个字符相当容易。您可以选择一个合适的正文字体,然后调整字体大小和容器宽度,使其大致正确。
但在灵活宽度设计的时代,您该怎么办呢?
虽然容器宽度可能会发生变化,但这并不意味着您必须牺牲舒适的阅读行长。您可以在某些断点(媒体查询)处调整容器宽度和字体大小,使其尽可能接近。请记住,它不需要完全精确,这不是一个硬性的科学。
但如何测试特定行上有多少个字符呢?Clarissa 想出了一个巧妙的办法,就是在超过 45 个字符的地方插入一个 span,然后对其进行样式设置,更改文本颜色,并在 75 个字符处结束该 span。这样,您就可以直观地看到这些断点。以下就是 Clarissa 的幻灯片(嵌入),其中包含 span 想法的那一页
我认为将此过程自动化将是一件非常棒的事情,这样您就可以在任何网站上使用它。书签非常适合此用途。因此,我们现在就来试试吧。
查看代码笔 书签用于将 45 到 75 个字符之间的文本变成红色,由 Chris Coyier (@chriscoyier) 在 CodePen 上创建。
将该按钮拖动到您的书签栏,然后在您想要使用的任何网站上单击它。首先单击它以激活它,然后单击正文内容元素(例如段落)。然后,您可以调整窗口大小,以查看换行位置,并尝试使其尽可能接近。
我没有使用任何花哨的算法,但只是通过调整,我就在简单的居中文本列上获得了非常接近的结果。

以下 CSS 代码是其来源:
body {
font-family: "Lucida Grande", sans-serif;
margin: 20px auto;
width: 95%;
font-size: 70%;
line-height: 1.4;
}
@media (min-width: 400px) {
body { width: 90%; font-size: 75%; }
}
@media (min-width: 700px) {
body { width: 80%; font-size: 90%; }
}
@media (min-width: 850px) {
body { width: 70%; font-size: 100%; }
}
@media (min-width: 1000px) {
body { width: 60%; font-size: 110%; }
}
@media (min-width: 1100px) {
body { width: 50%; font-size: 115%;}
}
@media (min-width: 1450px) {
body { width: 40%; font-size: 125%; }
}
typesetwith.me 也很酷。
它提供了更多控件,让您在保持可接受范围内的同时进行排版实验。
非常棒。如果您喜欢这种东西,我创建了一个用于类似目的的书签,但工作方式不同。它会显示平均行长,并允许您实时调整字体属性,直到它们达到正确的值为止。它位于 这里,并在 GitHub 上。
很棒的书签,可以快速检查度量。如果目标是良好的度量,为什么不以 em 为单位设置容器宽度呢?一个字符的宽度大约是半个 em,因此 45 到 75 个字符的行大约是 23 到 37 个 em。
http://codepen.io/xavieralexandre/pen/qDjLI
还有 Simplefocus.com 创建的 FlowType.JS。
它正在积极开发中,我一直在关注存储库,并一直收到评论。
它存在一个小问题,即它不会显示您每行的字符数,但我已经 与他们讨论过这个问题了。如果这里有人像神一样了解 JavaScript,并愿意提供帮助,请务必与他们联系。
Chris 的演示真是太聪明了。
“当然,每个规则都有例外,您的实际效果可能有所不同”
就像您刚刚撰写的这篇文章一样 :)
CSS-Tricks 文章在宽屏显示器上的每行大约包含 130 到 140 个字符。我并没有发现它们特别难读。
当然。在宽屏显示器上,以及像这样的网站上,您可以随意调整窗口大小,这是一种奢侈。
@ Xavier Clarissa(完全公开:我的妻子很棒 ;))确实强调使用 em 而不是像素,如果您回到她的幻灯片大约第 15 页,她专门有一节讨论为什么设计师需要拥抱 em,尤其是对于响应式设计/可读性。
我一直在寻找处理字体大小的解决方案,因为我用 Twitter Bootstrap 的灵活宽度响应式解决方案构建了一个网站。感谢您撰写这篇文章,它在合适的时间帮助了我 :)
您好 Chris,
对于像我这样的新手来说,所有这些内容听起来都很神奇。您或该网站是否提供网页设计的培训,特别侧重于 CSS 和 PHP?
我希望参加培训,并将这些知识添加到我最近推出的博客咨询服务中。
感谢您,期待您的积极回复。
Chris… 既然我们正在讨论字体大小和用户友好的可读性水平,我有一台尺寸合理、宽度较大的台式显示器,并没有特别大。Tricks 是为数不多的几个似乎能正确执行“响应式”的网站之一。太多网站仍然使用“中间 900 像素,然后进行少量移动设备结构调整”。Tricks 使用了我大部分的屏幕,非常有效,但是(使用您喜欢的熊类比喻)——对于字体大小和眼睛疲劳——在宽屏、台式机上:您在单篇文章的第一个段落上的字体大小“刚刚好”。在椅子距离处很容易看到,没有眼睛疲劳,眼睛跟踪很容易。其余正文内容的字体大小“太小”,在椅子距离处很难看到,我发现自己会放慢速度,眼睛也会感到疲劳。评论的字体大小,好吧,我必须像拿着手机一样拿着显示器,眯着眼睛才能看清楚。(不过照片尺寸很好,您可以在房间的另一端认出它们。)
我之所以提到这一点,是因为我知道您不介意这种反馈,而且尽管我知道您试图将滚动次数降到最低,但我还是想知道是否该重新考虑一下台式机范围的响应式字体大小断点。我们这些拥有“男人尺寸”电脑的人可以承受更大的字体,真的。我们有空间。对我们大多数人来说,评论甚至可以并排显示两列,它们通常会延伸到侧边栏下方很多很多。 (现在有一个我以前从未见过的“技巧”。)
我看到它在 Twitter 显示您超过限制多少个字母的场景中被使用。
很棒的书签,简单明了,Chris,评论中还有更强大的书签。
在开发新网站时,这是我最佳实践“待办事项”清单中需要记住的另一项。
“我学得越多,我就越不知道。”
我一直都在研究动态计算每行字符数的方法——到目前为止,我发现使用非框架 JS 的最佳方法是创建一个元素的副本数组,并在每个单词上插入 span,然后检查每个单词的 offsetTop。
然后,我可以确定有多少行类型,然后根据元素中的字符数计算平均值,以获得每行字符数的近似值。
或者,更准确的方法是在每个字符周围插入一个 span,获取它们的 offsetTop,并在找到 offsetTop 不同的位置停止循环。
不过,我不是 JavaScript 专家,我的代码非常丑陋。如果有人知道如何在不插入 span 的情况下获取字符的 offsetTop,请告诉我。如果可能的话,我宁愿不使用 jQuery。