Quotations In The HTML Document
The Blockquote
The blockquote element is mostly familiar to everyone. In the early days of moveable type printing, quotes were placed at the beginning of each line of the blockquote. As the practice died out, the text was indented from each side to create the separation from the rest of the text. This has become the default rendering in browsers. There are some who will use the element simply to indent text, and not to describe the content as being a quotation. This is semantically wrong.
We can see this rendering below.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In eu sem. Phasellus cursus. Mauris turpis. Nam fermentum rhoncus sem. Morbi placerat elementum felis. Nullam dignissim.
The W3C has this note to add about blockquotes — and I’ll put it in a blockquote :)
Note. We recommend that style sheet implementations provide a mechanism for inserting quotation marks before and after a quotation delimited by BLOCKQUOTE in a manner appropriate to the current language context and the degree of nesting of quotations. W3C HTML4 specs
Do you see the quotation marks the browser added? Neither do I. That's probably because no browser that I know of adds them. In fact, the Firefox stylesheet has only this:
blockquote {
display: block;
margin: 1em 40px;
}
In English, a block quote would have opening quotation marks
at the beginning of each paragraph, and a closing quotation
mark at the end of the last paragraph. Modern typographical
convention calls for the opening quote marks to be outdented.
The text-indent: property lets us do the outdent
easily. Unless you want to add the quotes manually, we can use
pseudo elements and classes from css. That will work for some
modern browsers. So, what about IE? My attitude in this case is
forget IE. The block indention sets aside the
quote sufficiently, and the <blockquote> tag
should set it out for screen readers.
We can properly quote the text in some modern graphic browsers by adding a bit of css style rules.
blockquote#bq-fixed p {
text-indent: -.5em; /*value equals approximate
width of quote-mark face*/
}
blockquote#bq-fixed p:before {
content: open-quote;
}
blockquote#bq-fixed p:after {
content: close-quote; /*we have to close each paragraph
else following quotes would all
be inner quotes*/
visibility: hidden; /*so we hide them until the last
paragraph*/
}
blockquote#bq-fixed p:last-child:after,
blockquote#bq-fixed p.last-p:after {
visibility: visible;
}
Let's look at an example.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In eu sem. Phasellus cursus. Mauris turpis. Nam fermentum rhoncus sem. Morbi placerat elementum felis. Nullam dignissim.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In eu sem. Phasellus cursus. Mauris turpis. Nam fermentum rhoncus sem. Morbi placerat elementum felis. Nullam dignissim.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In eu sem. Phasellus cursus. Mauris turpis. Nam fermentum rhoncus sem. Morbi placerat elementum felis. Nullam dignissim.
Works great if you have Firefox, not at all in IE. Opera and Konqueror/Safari don't understand the last-child pseudo element. Ah, well. So, it seems if cross browser compatibility is important right down to the small detail, you will add the quotation marks manually, or leave them off completely.
In the great majority of cases, you may add the the quotes automagically, as a progressive enhancement for folks using modern browsers. For the UAs without the capability to support the rulesets, no functionality is lost.
The <q> Element: the Inline Quote
Let's start by looking at two examples. They both use the
<q> tag to mark the inline quotation. In the
first, we depend on the browser's rendering. In the second, we
manually add quotation marks. The example is taken from
W3C.
John said, I saw Lucy at lunch, she told me,
Mary
wants you to to get some ice cream on your way home.
I
think I will get some at Ben and Jerry's, on Gloucester
Road.
Now again, with the added quotation marks.
John said, “I saw Lucy at lunch, she told me,
‘Mary
wants you to to get some ice cream on your way home.’
I
think I will get some at Ben and Jerry's, on Gloucester
Road.”
If we view these example in a modern browser, we see that the first example is just fine, with proper quote marks even for the nested quote. The second example shows all quote marks doubled up. This is true even of Lynx, a non graphic text browser.
Now view in IE. The first example has no quote marks at all and the second example looks OK.
If you're like me, you took the easy way out and stopped
using the <q> tag, and simply typed in the
quote marks. Looks right in all browsers. The trouble arises in
assistive techologies such as screen readers. As Stacey
Cordoni, a Devshed forum member (stacey1985), pointed out,
screen readers don't treat something as being quoted just
because of a double prime or an actual quote mark. It
needs the proper tagging. Of course, that's what
semantic markup is all about.
So what do we do? The good browsers add the marks on their
own, and unless we add them manually, IE won't render any
marks. Stacey suggested we override the browser's default style
rules with our own. In Firefox, the rules for the
<q> element look like this:
q:before {
content: open-quote;
}
q:after {
content: close-quote;
}
So if we add the following to our stylesheet, we should be OK.
q:before {
content: "";
}
q:after {
content: "";
}
So let's look at that second example again with the new rules.
John said, “I saw Lucy at lunch, she told
me,
‘Mary wants you to to get some ice cream on your way
home.’
I think I will get some at Ben and Jerry's, on
Gloucester Road.”
We have a plan. We use the <q> element
for its semantic properness, and we kill the browser's built in
quotes and add them ourselves. Of course, Lynx still has the
double quotes.
Second Thoughts
Why do I feel so dirty? Maybe it's because we're overriding a proper behavior to satisfy one browser that doesn't support an html4 element that became standard in 1996. Is there a way out? I think so.
IE has a proprietary conditional comment. We can use it to feed only IE the typed quotation marks, and allow modern browsers to behave as the standards demand.
Microsoft promises that IE8 will support html4 and css2.1, so we need only address IE7 and previous versions.
The first step is to go back to the default presentation of
the <q> element. Then, we wrap the inserted
quotation marks in IE's conditional comment.
<p>John said, <q><!--[if lte ie 7]>“<![endif]-->I saw Lucy
at lunch, she told me, <q><!--[if lte ie 7]>‘<![endif]-->Mary
wants you to to get some ice cream on your way
home.<!--[if lte ie 7]>’<![endif]--></q> I think I will get some at
Ben and Jerry's, on Gloucester Road.<!--[if lte ie 7]>”<![endif]--></q></p>
As you can see, all browsers now treat the inline quote properly, with neither doubled, nor missing quote marks.
John said, I saw Lucy at
lunch, she told me,
Mary
wants you to to get some ice cream on your way home.
I think I will get some at
Ben and Jerry's, on Gloucester Road.
That adds additional markup to the content, and I won't say that's the way everyone should handle the issue. I feel right doing it this way; not bringing good browsers down to IE's level for the sake of a few key-strokes.