Blockquotes and the infamous <p> tags...

John Gruber gruber at fedora.net
Wed Mar 10 16:09:10 EST 2004


Rob Hulson <rob at robhulson.com> wrote on 03/10/04 at 2:37p:

> Hey, I just installed the beta of Markup and SmartyPants 1.5 in my 
> MovableType blog. Lovin' it so far.

Super. Glad you dig it.


> It's my understanding that if you put (with double spaces at the end of 
> the first line):
> 
>  >Text to quote
> More text to quote.
> 
> This results in:
> 
> <blockquote><p>Text to quote<br />
> More text to quote.</p></blockquote>

Correct.


> This is well and fine... unless your stylesheet has a border for 
> blockquotes. Because any text enclosed in a blockquote is also prefaced 
> by a <p> tag, the resulting look is as if there were a <br /> at the 
> beginning and end of the text, which results in the top and bottom 
> borders of the text being a line above and below, while the left and 
> right borders hug the text.

The problem is that you're only getting away with that because you're using XHTML 1.0 Transitional. In XHTML 1.0 Strict, you can't do this:

    <blockquote>
    text
    </blockquote>

The <p> tags -- or some other block-level element -- are required.
The semantic idea is that you can't blockquote *text*; you've got to
blockquote a tag or tags.

Markdown only generates strict output, either XHTML 1.x or HTML 4.


> So far, I've not found any text format plugin ever get this one right. 
> Any clues how this might be solved, or what I might put in my 
> stylesheet to make this look decent?

Something like this should work:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title>Tight margins in blockquotes</title>
    <style type="text/css">
    blockquote {
        border: 1px solid gray;
        }
    
    p {
        border: 1px dotted gray;
        }
    
    blockquote p {
        margin-bottom: 0;
        }
    
    blockquote p:first-child {
        margin-top: 0;
        }
    
    </style>
    </head>
    <body>
    <blockquote>
        <p>Foo</p>
        <p>Bar</p>
    </blockquote>
    </body>
    </html>

The idea is that you turn off the bottom margin for all <p> tags
inside <blockquote>. Then you turn off the top margin for the first
element in a <blockquote>, if it's a <p>.

You still get space between paragraphs in a blockquote, because the
remaining paragraphs still have top-margins.

Hope this helps,

-- 
John Gruber          |              Daring Fireball
gruber at fedora.net    |    http://daringfireball.net


More information about the Markdown-discuss mailing list