引用文字非常棒。它们可以真正吸引读者的注意力,并且是进行酷炫排版工作的一个绝佳机会。但在博客上,引用文字特别难以“实现”(明白了吗?!)。
这是因为 RSS 的缘故。在您自己的网站上,您可以使用任何您想要的标记来创建引用文字。也许是一个带有“pullquote”类的段落标签。但是当这些内容发送到 RSS 阅读器时,该标签要么会被删除,要么会被忽略。
以下是传统引用文字的标记可能是什么样子
<p>Whether I shall turn out to be the hero of my own
life, or whether that station will be held by anybody else, these pages
must show. To begin my life with the beginning of my life, I record that
I was born (as I have been informed and believe) on a Friday, at twelve
o'clock at night. It was remarked that the clock began to strike, and I
began to cry, simultaneously.</p>
<p class="pullquote">It was remarked that the clock began to strike,
and I began to cry, simultaneously.</p>
由于您的类在 RSS 阅读器中没有任何意义,因此对于以这种方式阅读的人来说,它看起来像是最后一句话重复了。尴尬。
我们可以解决这个问题,并使用 jQuery 使我们的标记更加简洁。(哦,jQuery,有什么是你做不到的?亲亲。)这是我们新的、更简洁的标记
<p>Whether I shall turn out to be the hero of my own
life, or whether that station will be held by anybody else, these pages
must show. To begin my life with the beginning of my life, I record that
I was born (as I have been informed and believe) on a Friday, at twelve
o'clock at night. <span class="pullquote">It was remarked that the
clock began to strike, and I began to cry, simultaneously.</span></p>
不同之处在于,我们不再重复要作为引用文字使用的部分,而是只需将该部分用一个带有“pullquote”类的 span 包裹起来。这个 span 是我们将需要使用 jQuery 来施展魔法的钩子。
我们需要在页面上包含 jQuery,然后编写一些简单的 JavaScript 代码来查找这些引用文字
<script src="js/jquery.js"></script>
<script>
$(function() {
$('span.pullquote).each(function(index) {
... do something ...
});
});
</script>
上面的代码将等待 DOM 准备就绪,然后遍历整个页面,查找具有“pullquote”类的 span。现在我们需要添加魔法。首先,我们找到 span 的父元素,也就是它所在的段落,并将其设置为一个变量,因为我们将引用它两次(更快)。然后克隆该 span,并将其前置到同一个段落中。当然,我们添加了自己的类,可以用作样式化的钩子。
$(function() {
$('span.pullquote).each(function() {
var $parentParagraph = $(this).parent('p');
$parentParagraph.css('position', 'relative');
$(this).clone()
.addClass('pulledquote)
.prependTo($parentParagraph);
});
});
这实现了我们所需的功能:一个重复的元素(但仅在网站本身查看时),并具有一个独特的类来进行样式化。以下是一些“pulled”引用文字的 CSS 示例
.pulledquote {
display: block;
float: right;
padding: 0 0 0 10px;
margin: 0 0 10px 10px;
width: 170px;
font-size: 1.5em;
line-height: 1.4em;
text-align: right;
color: #666;
border-left: 3px solid #ccc;
}
在 演示中,我包含了两个单独的 jQuery 代码片段。一个用于将引用文字拉到左侧,另一个用于右侧。查看该页面的源代码以查看该代码。
其他文章/资源
- 456 Berea 街:使用 JavaScript 和 CSS 自动生成引用文字
- Nerdaphernalia:WordPress 插件,用于 JavaScript 引用文字
- 《学习 jQuery》一书中关于引用文字的完整章节
- Drupal 模块,用于引用文字
哈哈,太棒了,昨天刚遇到这个问题。
不错的文章,我认为您应该将 CSS 中的 span.pullqoute 更改为 span.pulledquote,用于引用文字 :)
好文章——有用的技巧。
MooTools 示例
我在看到示例(来自该网站的主页)后,没有进一步查看,就决定尝试使用 MooTools 做一些类似的事情。我非常接近这里提供的解决方案。对于我第一次尝试使用 MT 来说还不错!(如果我这么说的话)。我做了一个简单的调整,允许根据需要对引用文字进行基本的交错排列。我希望您觉得它有用。-Joe
@Ivan:谢谢,我已修复。
@Joseph:非常好,干得好 =) 我喜欢“自动交错”引用文字的想法。我认为在常规生产中,人们可能希望能够自己控制这一点,但在较长的静态文章中,让它自动化是非常酷的。
我应该考虑在 span 元素的类名中添加第二个“类”,这样第二个类只会告诉 MT 代码将引用文字向左或向右浮动等。这样,引用文字可以轻松地单独调整,或者如果省略,则作为一个整体交错排列。
这个对于基于文本的浏览器也适用,因为它们不必担心 DOM 在后台工作。不过,我不确定屏幕阅读器会如何解释它……
不幸的是,屏幕阅读器会重复读取信息。我一直在思考如何避免这个问题。
我真的很喜欢自动交错的想法。人们可能不会介意无法控制这一点,而是让它自动化。
Amanda <3
我喜欢这个。谢谢你,先生。
(我是 WordPress 引用文字插件的作者)
关于屏幕阅读器,这是一个很好的问题。有没有办法以编程方式(在 JavaScript 或 PHP 中)确定是否正在使用屏幕阅读器?如果是这样,您可以选择不显示引用文字,或者用“引用文字”和“引用文字结束”将其括起来。由于屏幕阅读器倾向于与普通的旧浏览器一起工作,因此我不确定是否可以可靠地做到这一点。
关于在页面上交错排列引用文字,我的插件可以做到这一点。基本上,每个连续的引用文字都有“pullquote”或“pullquote pqright”的类,并且 CSS 会相应地进行格式化。
我喜欢将实际引用文字格式化为“pulledquote”的想法——与 span 分开的选择器。我可能需要借用它。;-) 它当然可以使用相同的选择器(因为它们是不同的标签——“span”或“blockquote”),但您的方法可能有一些优势。我需要考虑一下。
@Stephen:我不确定有任何万无一失的方法来检测屏幕阅读器。当然,有一些 JavaScript 技术可以进行浏览器检测,但由于大多数屏幕阅读器都没有 JavaScript,因此这将毫无用处。不过,这也是使用 JavaScript 的另一个绝佳理由,如果任何浏览器不支持它或已将其关闭,则将不会有引用文字。
“不过,这也是使用 JavaScript 的另一个绝佳理由,如果任何浏览器不支持它或已将其关闭,则将不会有引用文字。”
没错!有些人指责我“应该使用 PHP”;但我非常明确地选择了 JavaScript。:)
jQuery 的新版本 1.2.6 破坏了这一点。
有什么新的解决方法?!
我还在学习这个 :)
糟糕
我错了!工作正常!
有趣——我唯一的愿望是能够自动将文本引用的第一个字母大写。有时引用文字不是完整的句子,但在引用中应该将其大写。