W3C home > Mailing lists > Public > www-style@w3.org > October 1996

Re: IDs vs. Classes

From: Bert Bos <bbos@mygale.inria.fr>
Date: Tue, 8 Oct 1996 18:30:49 +0200 (MET DST)
Message-Id: <199610081630.SAA14688@mygale.inria.fr>
To: "Scott E. Preece" <preece@predator.urbana.mcd.mot.com>
Cc: www-style@w3.org
Scott E. Preece writes:
 >  From: Hakon Lie <howcome@w3.org>
 > | 
 > |  > Also, the spec explicitly states that a simple selector can have only
 > |  > 1 class (in section 1.4), but I could find no such limit on the number of
 > |  > IDs per simple selector.
 > |  > 
 > |  > Is that a purposeful omission (and simple selectors can have multiple
 > |  > IDs) or does the same limit apply to IDs (only 1 per simple selector)?
 > | 
 > | The specific limitation for class values is there since the Cougar DTD
 > | [1] suggests that the CLASS attribute value is a comma-separeated list
 > | of values. CSS1 does not support this, and that's why we needed a
 > | specific limitation. We're still debating if having more than one
 > | class value makes sense. Feedback welcome.
 > ---
 > 
 > I have two concerns here:
 > 
 > 1) I assume the statement "CSS1 does not support this."  means that CSS1
 > has no syntax for attaching multiple CLASSes to a selector, not that it
 > fails to work on HTML elements that have multiple classes specified.

Right.

 > I assume the class part of the simple selector matches whenever *any* of
 > the classes attached to an element matches the class in the selector.
 > For example, if there is a rule with the simple selector
 > 	.rationale:	{font-style: italic}
 > that a paragraph tagged
 > 	<P CLASS=abstract,rationale>
 > would match that selector.

Also right.

 > If CSS1 *did* support multiple class components in a simple selector,
 > there would be two possible interpretations: that the classes were ANDed
 > or that the classes were ORed.  That is, a selector containing two
 > classes could match only when *both* were present or whenever *either*
 > was present.  Even though, as Bert Bos pointed out in a separate note,
 > you can get the equivalent of ORed classes by just repeating the rest of
 > the selector, it would still be a notational convenience to support the
 > shorthand form.  I would suggest supporting
 > 	.class&class...		to indicate ANDed classes and
 > 	.class|class...		to indicate ORed classes
 > Having gone that far, you might as well support complete logical
 > expression syntax, allowing
 > 	.(rational&abstract)|(interface&description&~exception)

It's not very readable anymore, but I agree that some form of logical
connectors might be useful. Especially the &, since it is not
expressible in any other way. How about

    <P class="abstract,rationale">

    P.abstract.rationale

(for CSS *after* level 1, of course.) This is a simple and readable
notation for the &-case. For the or-case we might be able to find
something with a comma.

 > 2) My more serious concern is that Cougar has mis-specified the CLASS
 > attribute.  It says it's a comma-separated list of classes, but both the
 > standards (i18n and tables) that include CLASS say it's a
 > space-separated list of classes.  This needs to be fixed in Cougar
 > before people go off and implement it.

Actually, I think the comma is better, since it allows spaces in class
names. Cougar should explain that class names are separated by commas
and also `normalized', i.e., trailing whitespace is removed, all
sequences of whitespace are replaced by single spaces, and all letters
are case-insensitive.

Unfortunately, there are a number of these small incompatibilities
between the various specs that describe (part of) HTML. I don't know
exactly what to do about them. The royal way would be to issue new
RFCs, but it's a lot of work for things that are really only of minor
importance in those RFCs.

 > ---
 > | 
 > | For ID, noone have suggested it being more that an single value --
 > | indeed, such a suggestion would defeat the purpose of ID. A
 > | selector with more than one ID value would never select anything.
 > ---
 > 
 > Again, there are two possible meanings of having multiple values.  It
 > would make prefectly good sense to OR together IDs, but, as you note,
 > not to AND them.

SGML doesn't allow multiple IDs on an element, so, unlike CLASS, there
is no need for logical connectors on IDs.


Bert
-- 
  Bert Bos                                ( W 3 C ) http://www.w3.org/
  http://www.w3.org/pub/WWW/People/Bos/                      INRIA/W3C
  bert@w3.org                             2004 Rt des Lucioles / BP 93
  +33 93 65 77 71                 06902 Sophia Antipolis Cedex, France
Received on Tuesday, 8 October 1996 12:31:07 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 27 April 2009 13:53:45 GMT