- From: Daniel Brockman <daniel@brockman.nu>
- Date: Sun, 10 Aug 2003 18:16:42 +0200
- To: "Toby A Inkster" <tobyink@goddamn.co.uk>, "Stefan Ram" <ram@ZEDAT.FU-Berlin.DE>
- Cc: <www-html@w3.org>
"Toby A Inkster" <tobyink@goddamn.co.uk> wrote:
> I agree that this is a problem -- for example, in a pure <section>, <h>
> worls a boxed case study in Chapter 2 would be an equal sibling with
> sub-chapter 2.1 and would be 'superior' to a boxed case study in
> sub-chapter 2.1.
>
> However, I think your solution is rather complicated. I'm sure a better
> solution could be found.
I agree: The problem is real, but the proposed solutions are all quite
unsatisfactory.
We already have <blockcode> and <blockquote>; it seems what we need is
additional <blockxxx> elements: <blocknote>, <blockremark>, <blockwarning>
(or <blockcomment> for all three?), <blockabstract>, <blockproof>,
<blockbackground>, <blockexample>, <blockexcercise>, etc., etc.
Obviously, which of these elements are "useful enough to be included" would
be a difficult decision to make. Thus, I propose a single new element:
<block>. This element is similar to <div>; but, as opposed to <div>, it has
some semantic implications. While <div> is completely transparent and can
only be used for grouping elements for common styling and/or scripting,
<block> actually denotes an isolated -block- embedded in the normal content
flow, in the spirit of <blockcode> and <blockquote>.
Accepting this as a hypothetical solution, we come to the problem with
headings. It makes no sense to put a heading for an enclosing section
inside a block, so one possible solution is to allow <h> inside <block>, and
extend its usage to apply to the nearest enclosing <section> -or- <block>.
Thus, a named theorem might look like this:
<block>
<h>Fermat's Last Theorem</h>
<p>The equation
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<msup><mi>a</mi><mi>n</mi></msup><mo>+</mo>
<msup><mi>b</mi><mi>n</mi></msup><mo>=</mo>
<msup><mi>c</mi><mi>n</mi></msup>
</mrow>
</math>
has no integer solutions for
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow><mi>n</mi><mo>></mo><mn>2</mn></mrow>
</math>.
</p>
</block>
The problem with this is that it overloads <h>, making the process of
determining the level of a header significantly more difficult. Another
possibility is to use the @title attribute.
<block title="Fermat's Last Theorem">
<p>The equation [...] has no integer solutions for [...].</p>
</block>
Unfortunately, this violates the principle that primary content should never
be put in attributes. In this case, the @title attribute is inappropriate
because it does not attach -additional- information to an element; on the
contrary, the information is an essential part of the content. So what
about introducing a new <title> element?
<block>
<title>Fermat's Last Theorem</title>
<p>The equation [...] has no integer solutions for [...].</p>
</block>
This approach is pretty good: It avoids the problems with the previous
ones, and the cost of it seems quite low -- it's just one extra element. It
does, however, overload the meaning of "title" a little bit; it would be
nice if there was a better name for it. This leads us to consider the
<caption> element.
<block>
<caption>Fermat's Last Theorem</caption>
<p>The equation [...] has no integer solutions for [...].</p>
</block>
This is more appropriate, as the <caption> element already exists and has
the desired semantics. It plays this role for tables and objects already,
so why not for blocks? It seems like another use for the <caption> element
would only reinforce its position, not blur or overload it. In fact, I
can't see any direct drawbacks to this approach.
As for the content model, <block> should allow/be allowed whatever/wherever
<blockcode> and <blockquote> are. Note that this allows nested <block>s, as
it should.
The default rendering for <block> should be similar to <blockquote>. To put
it explicitly, I believe the best default visual rendering would be no more
than left and right margins.
Actually, I see one minor drawback. The term "block" is already in use one
level above the HTML vocabulary to describe a certain kind of content.
Perhaps the name "box" could do as well; but this term is in fact equally
overloaded in CSS. In reality, however, I don't think that this is a
problem.
--
Daniel Brockman
daniel@brockman.nu
Received on Sunday, 10 August 2003 12:18:01 UTC