SEO

October 17, 2011

CSS Commenting! Are you kidding me? i thought you were just talking to yourselvecss...

Comparing style sheet languages

The table below compares how various style sheet languages express common (are they?) tasks. Text in red indicates that I'm not quite sure if the code is correct. Help with proofreading the examples, as well a filling in the open cells, is appreciated.

Challenge CSS FOSI DSSSL XSL P93 (which is the internal style language of Amaya/Thotlib, anno 1993) PSL
Set the font size of all "H1" elements to 20pt
H1 { font-size: 20pt }
<e-i-c gi="H1"> <charlist> <font inherit="1" size="20pt"> </charlist> </e-i-c>

Note: The "font" category sets all font characteristics (like the shorthand properties in CSS). The "inherit" attribute determines if the other font charateristics (weight etc.) should come from the default "docdesc" enviroment or from the parent element.

(element H1 (make paragraph font-size: 20pt))
<xsl:template match="H1"> <fo:block font-size="20pt"> <xsl:apply-templates/> </fo:block> </xsl:template>
H1: Size: 20 pt;
Set H1's font size to the double of the parent
H1 { font-size: 2em }
<e-i-c gi="H1"> <charlist> <font size="2em"> </charlist> </e-i-c>
(element H1 (make paragraph font-size: (* 2 (inherited-font-size))))
<xsl:template match="H1"> <fo:block font-size="2em"> <xsl:apply-templates/> </fo:block> </xsl:template>
H1: Size: Enclosing * 200 %;
Set H1's font size to be 4pt bigger than the parent not possible
(element H1 (make paragraph font-size: (+ 4pt (inherited-font-size))))
<xsl:template match="H1"> <fo:block font-size="from-parent() + 4pt"> <xsl:apply-templates/> </fo:block> </xsl:template>
H1: Size: Enclosing + 4 pt;
Set H1's font size to the double of the root element's font size not possible not possible

This solution is close to the challenge:

(define base-size 12pt)  (element H1 (make paragraph font-size: (* 2 base-size)))
(define-unit em 12pt) (element BODY (make paragraph font-size: 1em)) (element H1 (make paragraph font-size: 2em)) -->
not possible
Selectors Selectors Selectors Selectors Selectors Selectors Selectors
Select all LI elements that are children of OL
OL > LI { ... }
<e-i-c gi="LI" context="OL"> <charlist> ... </charlist> </e-i-c>
(element (ol li) ...)
<xsl:template match="ol/li"> ... </xsl:template>
LI: begin if immediately within OL ... end;
Select all LI element with an OL ancestor
OL LI { ... }
<e-i-c gi="LI" context="* OL"> <charlist> ... </charlist> </e-i-c>
(element LI (if (not (node-list-empty? (ancestor "OL"))) ... ))
<xsl:template match="ol//li"> ... </xsl:template>
LI: begin if within OL ... end;
Select any P element that is the first child element of its parent
P:first-child { ... }
Not possible (although there are DTD-based tricks to make it happen).
(element P (if (absolute-first-sibling? (current-node)) ... ...))
<xsl:template match="*[position()=1 and self::p]"> ... </xsl:template>
P: if first ...

Note that this condition can only be used for certain properties.

Select any P element that is the first P child element of its parent not possible in CSS2, but is proposed for CSS3:
P:first-of-type { ... }
<e-i-c gi="P" occur="first"> <charlist> ... </charlist> </e-i-c>
(element P (if (first-sibling? (current-node)) ... ...))
<xsl:template match="P[1]"> ... </xsl:template>
not possible
Set properties/characteristics on all elements with a WARNING attibute
.WARNING { ... }
Set properties/characteristics on all NOTE elements with a WARNING attibute
NOTE[WARNING] { ... }
<e-i-c gi="NOTE"> <att> <specval attname="WARNING" attval="#ANY"> <charsubset> ... </charsubset> </att> </e-i-c>
(element NOTE (if (not (node-list-empty? (attribute "WARNING"))) ... ...))
NOTE: if WARNING ...
In a table, select all odd-numbered rows. not possible in CSS2, but the Selector module (currently in CR) proposes:
tr:nth-child(odd)  { ... }

or

tr:nth-child(2n+1) { ... }
not possible
(element TR (if (= (modulo (child-number) 2) 0) ...   ;even-row ...)) ;odd-row
<xsl:template match="tr[position() mod 2 = 1]"> ... </xsl:template>
tr: if odd(rowcounter) ...

"rowcounter" should be declared in the COUNTERS section of the style sheet as:

COUNTERS rowcounter: rank of tr;

Like the "first" condition, this condition only applies to certain properties.

Select all elements
* { ... }
Properties Properties Properties Properties Properties Properties Properties
[challenge]
Formatting model boxes inside boxes area model (seqence of block-level areas with inline areas inside) area model (seqence of block-level areas (called "display" areas) with inline areas inside) boxes inside boxes (although XSL calls it an "hierarchical area model") boxes inside boxes
Absolute or relative properties? All properties, except 'text-indent', are absolute. Examples: margin-left, padding-top, border-bottom Mixed model: horizontal margins are absolute (leftind, rightind), while vertical margins are relative (presp, postsp). Also, margins on the page are absolute (topmarg, botmarg, leftmarg, rightmarg) Most properties are relative: space-before, space-after, start-margin, end-margin. On the simple-page-sequence flow object, there are some absolute properties, e.g.: left-margin, right-margin, top-margin, bottom-margin, left-footer, center-footer, right-footer Mixed model All properties, except 'indent', are abssolute. The positioning of boxes and margins are done through these properties: VertRef, HorizRef, VertPos, HorizPos
Values/units Values/units Values/units Values/units Values/units Values/units Values/units
List all length units
pc picas  pt points  in inches  mm millimeters  cm centimeters  em em space px pixels ex  %
pi picas  pt points  in inches  mm millimeters  cm centimeters  em em space

The base unit for DSSSL is the meter, m. Pre-defined derived units are:

(define-unit cm 0.01m) (define-unit mm 0.001m) (define-unit in 0.0254m) (define-unit pt 0.0003527778m) (define-unit pica 0.004233333m)

DSSSL does not support relative lengths as units - the inherited values can be used in most cases for that behavior.

P has been extended to support the same units as CSS: cm, mm, pt, pc, in, px, em, ex, %
Value propagation Value propagation Value propagation Value propagation Value propagation Value propagation Value propagation
[challenge]
Formatting model Formatting model Formatting model Formatting model Formatting model Formatting model Formatting model
Give the printed a page a 1.5 inch margin on each edge.
@page { margin: 1.5in; }
<pagedesc> <pagespec> <topmarg nomdepth="1.5in"> <botmarg nomdepth="1.4in"> <leftmarg width="1.5in"> <rightmarg width="1.5in"> </pagespec> </pagedesc>

[is the pgid attribute on pagespec required?]

MyPage: begin MarginTop: 1.5 in; MarginBottom: 1.5 in; MarginLeft: 1.5 in; MarginRight: 1.5 in; end;

P has a broad notion of a box. Not only every element in the source document has a box, but you can define additional boxes in a style sheet and you have creation "properties" that generate those boxes. Pages are just such generated boxes. You define them with the same properties as any other box. The only specific thing for a page box is that its parent box is the physical support (sheet of paper, window, etc.)

Indent the first line of PARA elements 2em relative to the other text in the paragraph
PARA { text-indent: 2em }
<e-i-c gi="PARA"> <charlist> <indent inherit="1" firstln="*+2em"> </charlist> </e-i-c>

Note: the asterisk refers to the resolved indetation of the paragraph.

(element PARA (make paragraph first-line-start-indent: (* 2 (actual-font-size))))

(The above fragment is based on an example from the The DSSSL Cookbook.

<xsl:template match="PARA"> <fo:block text-indent="2em"> <xsl:apply-templates/> </fo:block> </xsl:template>
PARA: indent: 2 em;
Give BLOCKQUOTE elements 1em horizontal indentation relative to the parent's box.
BLOCKQUOTE { margin-left: 1em; margin-right: 1em; }
<e-i-c gi="BLOCKQUOTE"> <charlist> <indent firstln="*" leftind="@+1em" rightind="@+1em"> </charlist> </e-i-c>

Note: the indentation of the first line must be set explicitly to make sure the first line has the same indentation as the rest of the paragraph.

<xsl:template match="BLOCKQUOTE"> <fo:block margin-left="1em" margin-right="1em"> <xsl:apply-templates/> </fo:block> </xsl:template>
BLOCKQUOTE: begin MarginLeft: 1 em; MarginRight: 1 em; end;
Give BLOCKQUOTE elements 1em horizontal indentation relative to the layout area (i.e., the area into which the content is poured) without taking the elements out of the flow. Not possible. It could be done if the element is taken out of the flow:
BLOCKQUOTE { position: fixed; left: 50%; margin-left: -1em; }
<e-i-c gi="BLOCKQUOTE"> <charlist> <indent firstln="*" leftind="1em" rightind="1em"> </charlist> </e-i-c>
(element BLOCKQUOTE (make paragraph start-indent: (* 1 (actual-font-size)) end-indent: (* 1 (actual-font-size)) ))
<xsl:template match="BLOCKQUOTE"> <fo:block start-indent="1em" end-indent="1em"> <xsl:apply-templates/> </fo:block> </xsl:template>
BLOCKQUOTE: HorizPos: Left = Root.Left + 1 em;

If the document is paginated, Root represents the page box, if there is no page, Root is the box associated with the root element of your document.

Place the left content edge of a BLOCKQUOTE element 1em to the left of the middle of the layout area (i.e., the area into which the content is poured). not possible
BLOCKQUOTE:  HorizPos: Left = Enclosing.VMiddle - 1 em;

VMiddle is the vertical middle axis.

specify that content should flow into two columns not possible, but suggested for CSS3 Here's a starting point:
<pagedesc>  <pagespec pgid="idinfospec"> <topmarg nomdepth="36pt"> <botmarg nomdepth="36pt"> <leftmarg width="72pt"> <rtmarg width="36pt"> <header nomdepth="36pt"> <vquad verquad="top"> <sectext> <subchars></subchars> </sektext> <header></header> <footer nomdepth="36pt"> <vquad verquad="top"> <sectext> <subchars></subchars> </sectext> </footer> <flowtext width="504pt" nomdepth="684pt" numcols="1" spabove="18pt"  spabelow="6pt">  <column width="5O4pt" mindepth="648pt" nomdepth="684pt"  maxdepth="684pt">  </flowtext>  </pagespec> </pagedesc>
[table challenge]
[floating element challenge]
Linking Linking Linking Linking Linking Linking Linking
Import a style sheet from another location, then override some of the settings
@import url(http://www.example.com/style); H1 { font-size: 2em }
Not possible. Not possible.
Generated text Generated text Generated text Generated text Generated text Generated text Generated text
Given this markup
<NOTE>Platform shoes are back!</NOTE>
It will be displayed like this:
Warning: Platform shoes are back!
NOTE:before {  font-weight: bold; content: "Warning"; }
(element note (make paragraph font-size: 12pt (make sequence font-weight: 'bold (literal "Warning:")) (process-children)))
Add the text "Chapter x:" before all H1 elements where "x" is replaced by an incrementing chapter number
H1:before { content: "Chapter " counter(chaptercounter) ": "; counter-increment: chaptercounter; }
<e-i-c gi="H1"> <charlist> {other H1 characteristics} <enumerat increm="1" enumid="chaptercounter"> <usetext placemnt="before" source="\Chapter \,chaptercounter,\: \"> </usetext> </charlist> </e-i-c>
(define (preced-count node gilist) (node-list-length (node-list-filter (lambda (n1) (member (gi n1) gilist) ) (preced node) ) ) )   (define countable-elements '("H1"))  (define (number-clause node top-level) (case (gi node) (("ROOT-NODE-GI") (list) ) (else (if top-level (list (+ (preced-count node countable-elements) 1)) (cons (+ (preced-count node countable-elements) 1) (number-clause (parent node) top-level) ) ) ) ) )  (define (number-heading node top-level) (literal (format-number-list (reverse (number-clause node top-level)) "1" ".")))  (element H1 (make sequence (number-heading (parent (current-node)) #t) (literal " ") (process-children) ) )

(The above fragment is based on an example from the The DSSSL Cookbook. I'm quite sure the last bit is incomplete...)

<xsl:template match="H1"> <fo:block> <xsl:text>Chapter </xsl:text> <xsl:number level="any" count="H1"/> <xsl:text>: </xsl:text> <xsl:apply-templates/> </fo:block> <xsl:template>

You have to do that at 3 different places in a P style sheet. In the COUNTERS section you define a counter:

COUNTERS ChapterNumber: set 0 on BODY add 1 on H1;

in the BOXES section you define the box that will be generated for each H1 element. This box uses the counter in its content:

BOXES ChapNumBox: begin content: (text 'Chapter ' value(ChapterNumber, Arabic) text':'); size: creator =; ... more properties end;

then you associate a "create" property to H1 elements:

H1: begin createbefore (ChapNumBox); size: 200 %; ... end;
Given this markup:
<p>... some notion<fn>The word is used here in the sense of the German philosopher B. Ratwurst, not that of the French anthropologist M.A. Gret-de-Canard</fn> which obviously... </p>

Make the content of the "fn" element appear in a footnote. Add a superscripted number in front of the footnote. Mark the original position of the "fn" element with the same superscripted number (a so-called «callout»). Make the footnote counter reset on every page. Mark the top of the footnote area with a horizontal rule.

Not possible, but here is a proposed solution for CSS3:
fn { display: footnote; footnote-style-type: decimal; footnote-style-position: outside; footnote-style-reset: page;  }  @footnote { border-top: thin solid black; }  ::trace, ::marker {  vertical-align: superscript; font-size: 6pt; }
or
fn { display: footnote; }  @footnote { border-top: thin solid black; list-style-type: decimal; list-style-position: outside; list-style-reset: page;  }  ::trace, ::marker {  vertical-align: superscript; font-size: 6pt; }
<rsrcdesc> <counter style="arabic" enumid="fnc"> </rsrcdesc>  <ftndesc> <e-i-c gi="fn">  <!-- typeset callout in flowtext --> <charlist inherit="1"> <enumerat increm="1" enumid="fnc"> <usetext source="fnc">  <subchars>  <font inherit="1" size="6pt" offset="4pt"> </subchars> </charlist> </e-i-c> <ftnatts> <!-- typeset superscript and footnote text in footnote area --> <charlist> <font size="8pt"> <presp nominal="3pt">  <textbrk startln="1">  <usetext source="fnc" placemnt="before"> <subchars> <font size="6pt" offset="4pt"> </subchars> </usetext> </ftnatts> </ftndesc>

How do we make sure the counter is reset on every page? How can the counter be placed "outside"? How can we add the horizontal rule?

<xsl:template match="p"> <fo:block> <xsl:apply-templates> <xsl:with-param name="fn_number"> <xsl:number/> </xsl:with-param> </xsl:apply-templates> </fo:block> </xsl:template>  <xsl:template match="fn"> <xsl:param name="fn_number" select="'1'"/> <fo:footnote> <fo:inline font-size="smaller" baseline-shift="super"><xsl:value-of select="$fn_number"/></fo:inline> <fo:footnote-body> <fo:inline baseline-shift="super"> <xsl:attribute name="font-size"><xsl:value-of select="$fn_size_xsl_variable"/></xsl:attribute> <xsl:value-of select="$fn_number"/> </fo:inline> <xsl:apply-templates/> </fo:footnote-body> </fo:footnote> </xsl:template>

Also, one must generate a static-content:

<fo:static-content flow-name="xsl-footnote-separator"> <!-- 1.0pt solid rule, likely black to start --> <fo:leader leader-pattern="rule" leader-length.maximum="100%"/> </fo:static-content>

This will get used automatically.

Note that a size has been defined in a stylesheet global variable, called "fn_size_xsl_variable", for the footnote number size in the actual footnote.

not possible
[header/footer challenge] Not possible.

The challenges are meant to reflect needs of authors, but are also designed to show off crucial differeneces and similarities in the various style sheet languages. Bert Bos has suggested some of the challenges, feel free to suggest more. For an alternative list of challenges, see Jon Bosak's list from 1997.

Thanks to Paul Grosso for contributing style sheet fragments and explanations for FOSI and XSL.

Thanks to Christopher R. Maden for contributing style sheet fragments and explanations for DSSSL.

Thanks to Arved Sandstrom for contributing XSL fragments.

Thanks to Vincent Quint for contributing the "P" examples. He has also written an short description of the P formatting model:

In P, the position of a box is not predefined. You have to set the position of every box with two properties: VertPos and HorizPos. (of course, in a style sheet you can also define default rules that apply to all boxes except those with specific rules). The advantage is that you don't need to have different kinds of boxes in the model. For instance, P does not know anything about tables, rows and cells. Those boxes are plain P boxes. They just have appropriate position properties in the default HTML style sheet. The P engine does not know either about the layout of mathematics. The MathML P style sheet uses position properties to define the position of each subexpression in a math expression.

Comparing style sheet languages The table below compares how various style sheet languages express common (are they?) tasks. Text in red indicates that I'm not quite sure if the code is correct. Help with proofreading the examples, as well a filling in the open cells, is appreciated. The challenges ...»See Ya

are you a true semantic?

  • # [15:47] <boblet> Hixie: would you use <nav> for site search form?
  • # [15:47] * Quits: danbri (n=danbri@unaffiliated/danbri) (Remote closed the connection)
  • # [15:48] <Hixie> would you have a "skip navigation" link for a site search form?
  • # [15:48] * Quits: webben (n=benh@nat/yahoo/x-cnyguavuvmtbfluo) (Read error: 113 (No route to host))
  • # [15:48] <Hixie> Philip`: yeah, i never found any distinctions when doing the testing way back when
  • # [15:49] <Philip`> (That does indicate <meta charset=utf8 foo=bar won't work, though)
  • # [15:49] <Philip`> Uh, <meta charset=utf8 foo=bar>
  • # [15:53] <Hixie> oh?
  • # [15:54] <Philip`> Hmm, but that's not what happens in practice
  • # [15:55] <Philip`> (The GetCharsetFromCompatibilityTag is only in the 'else' of a thing that checks for the number of attributes)
  • # [15:57] * Quits: Sirisian (n=Sirisian@pix012-168.pix.wmich.edu) (Read error: 145 (Connection timed out))
  • # [15:58] * Quits: Sirisian_ (n=Sirisian@pix053-197.pix.wmich.edu) (Read error: 110 (Connection timed out))
  • # [15:59] <Philip`> Maybe that's not the code that's actually used
  • # [15:59] <boblet> Hixie: I wouldn’t, but I can see some would. Yeah, that’s the nub
  • # [16:00] <Hixie> boblet: i think it'd be fine to use <nav> for that, but also fine not to
  • # [16:01] <Hixie> basically, don't use <nav> unless you think <section> would also be appropriate, with an <h1>Navigation</h1>.
  • # [16:01] <boblet> Hixie: I really love that a lot of the structural element usage is almost up to authors. That’s what most people hate, of course, but still :)
  • # [16:01] <Hixie> it'd be extremely difficult, and only mildly useful, to be more specific than we already are
  • # [16:01] <Philip`> Whatever code Firefox 3.5 is using, it also accepts things like <meta notcharset="utf-8">
  • # [16:01] <Hixie> and we're already waaaay more specific than html4 ever was
  • # [16:02] <Philip`> so it can't just be the attribute-based extracter
  • # [16:02] <boblet> makes it harder to write best practice info, but it’s much more interesting
  • # [16:03] <Hixie> best practice is "don't use <div> and don't use class=''", basically
  • # [16:03] <Hixie> but often you have to use one or the other
  • # [16:03] <Hixie> since html isn't _that_ expressive, even with all the new stuff
  • # [16:04] <boblet> Hixie: why not class? that seems to becoming a best practice with eg @stubbornella’s CSS performance info
  • # [16:05] * Joins: virtuelv (n=virtuelv@162.179.251.212.customer.cdi.no)
  • # [16:05] * Joins: Michelangelo (n=Michelan@93-41-253-98.ip84.fastwebnet.it)
  • # [16:06] <boblet> I’ve actually started using her “h2 .h2 {}” style classes, then in html <section><h1 class="h2">
  • # [16:07] <Hixie> o_O
  • # [16:07] <Hixie> why would you do that
  • # [16:08] <boblet> not as pure HTML but better than “section section h1, article section h1 {}”
  • # [16:08] <Hixie> oh well, yes, we need to figure out a better css selector solution for nested section headers
  • # [16:08] <Philip`> boblet: Why not use <h2>?
  • # [16:08] <Hixie> i meant theoretical best practice in the future, not best practice now
  • # [16:09] <boblet> also I think class="h2" has semantic meaning
  • # [16:09] * Hixie wonders when breakfast service is _supposed_ to start at his cafe
  • # [16:09] <boblet> Philip`: HTML5-style headings—reset to <h1> with each section
  • # [16:09] * Joins: Sirisian (n=Sirisian@141.218.12.168)
  • # [16:09] <Hixie> no, you can use whatever level you want
  • # [16:09] <Hixie> <section><h2></h2></section> and <section><h1></h1></section> mean the same thing
  • # [16:10] <boblet> well, I think it was maintain correct heading levels taking nesting into account, or reset to <h1> each time you start a new section, no?
  • # [16:10] <Hixie> aha, 8am
  • # [16:10] <Hixie> another hour
  • # [16:10] <Hixie> no, it resets inside each <section>
  • # [16:11] <Hixie> the highest <hx> within each section (er, lowest, i guess, closest to <h1>) is the heading
  • # [16:11] <boblet> but not to <h1>? interesting
  • # [16:11] <Hixie> well the best practice is you should have only one <hx> per <Section>
  • # [16:11] <Hixie> so it doesn't make any difference
  • # [16:11] <boblet> so you could skip levels, eg <h1></h1> <section><h3></h3>…
  • # [16:12] * Joins: mpt (n=mpt@canonical/mpt)
  • # [16:12] <Hixie> you can use <body><h6></h6><section><h3></h3><nav><h1></h1></nav></section></body> means the same as <body><h2></h2><section><h4></h4><nav><h6></h6></nav></section></body>
  • # [16:12] <Hixie> ...which means the same as <body><h1></h1><section><h1></h1><nav><h1></h1></nav></section></body>
  • # [16:12] <Hixie> each section does its own heading hierarchy
  • # [16:13] <boblet> but wouldn’t that mean that it’s easier to just start at <h1> for each new section?
  • # [16:13] * Joins: danbri (n=danbri@unaffiliated/danbri)
  • # [16:13] <boblet> assuming you’re doing crazy stuff like applying styles via classes? :)
  • # [16:13] <Hixie> apparently not, since you use classes :-)
  • # [16:13] <boblet> haha
  • # [16:13] <Hixie> <h1 class="h2"> is not as easy as <h2> :-)
  • # [16:14] <boblet> hrm… I must ponder this more :) at this rate I’ll never release this site
  • # [16:14] * Joins: epeus (n=KevinMar@213.152.16.56)
  • # [16:15] <workmad3> and even though <body><h1></h1><section><h2></h2></section></body> means the same thing no matter what level of heading you use to a machine, there are still ways of doing it that are clearer to people :)
  • # [16:15] <Hixie> indeed
  • # [16:16] <workmad3> and clearest to a human is probably either <h1> all the time or <hx> appropriate to the sectioning level...
  • # [16:16] <Hixie> agreed
  • # [16:16] <workmad3> (which I believe are the two examples given in the spec :) )
  • # [16:17] <boblet> You might want to check out http://j.mp/6FMCDi — @stubbornella’s OOCSS presentation
  • # [16:17] * Joins: fishd (n=darin@nat/google/x-wqudnjmktcyyivhh)
  • # [16:18] <Hixie> will do
  • # [16:18] <boblet> it’s quite a different way to approach things. It’s definitely changed some of my perceptions
  • # [16:19] <boblet> workmad3: I guess <h1 class="h2"> is just the first one with a cop-out for easier CSS selector writing
  • # [16:19] <boblet> (at least, that’s what I thought)
  • # [16:19] <workmad3> boblet: I personally see that as an abomination :)
  • # [16:20] <boblet> hahaha
  • # [16:20] <workmad3> and besides, why use a <h1> there... it's *much* simpler to use a <div>... so then you have <div class="h1">, <div class="em">, <div class="font">...
  • # [16:21] <boblet> I can definitely see how on a large popular site writing long CSS selector chains would gradually kill you tho
  • # [16:21] <Hixie> woah, that suggestion on slide 68 (the <h1 class="h2"> thing) is crazy
  • # [16:21] <Hixie> if you're finding that you're applying h2 styles to an h3, then your semantics are wrong
  • # [16:21] <boblet> Hixie: you’re killing me here
  • # [16:21] <boblet> :D
  • # [16:21] <Hixie> the rest of it so far is good
  • # [16:22] <Hixie> i also disagree with slide 92
  • # [16:22] <boblet> I think it‘s to address the ballooning of selectors problem; like specifying each case of clearfix rather than applying a .clearfix or .group style
  • # [16:22] * Quits: KevinMarks2 (n=KevinMar@213.152.16.55) (Connection timed out)
  • # [16:23] <Hixie> i think styling elements is the way to go, and styling classes should be the exception
  • # [16:23] <Hixie> but that might just be that i think you should define defaults first, which seems to be the same, but said differently
  • # [16:23] <boblet> well, she does say “(unless defining defaults)”
  • # [16:25] <Hixie> yeah
  • # [16:25] <Hixie> i strongly agree with what she says at the end
  • # [16:25] <Hixie> i don't understand why we don't have better tools
  • # [16:26] <boblet> @stubbornella addresses that too http://j.mp/7i7Dfe — CSS Wish List
  • # [16:27] <boblet> adding programatic concepts like mixins to CSS
  • # [16:27] * Joins: virtuelv_ (n=virtuelv@pat-tdc.opera.com)
  • # [16:27] <workmad3> boblet: check out sass :)
  • # [16:28] <boblet> haha—planning to do so for this site (have it open in a tab somewhere here)
  • # [16:28] <workmad3> sass does have mixins... and the ability to do maths, etc. in css files
  • # [16:29] <workmad3> and it gets compiled down to normal CSS and can even be minimised, etc. :)
  • # [16:29] * Joins: dglazkov (n=dglazkov@c-67-188-0-62.hsd1.ca.comcast.net)
  • # [16:30] <boblet> workmad3: yeah I’m looking forward to checking out stylesheet size differences (why I didn’t start with it)
  • # [16:30] <boblet> ok thanks for the food for thought all. Bed calls
  • # [16:30] <workmad3> I need chocolate and coffee myself
  • # [16:30] <workmad3> but then it's only 3:30 p.m. for me :)
  • # [16:31] <boblet> Will hopefully have an HTML5 site with the HTML5 articles I’ve written so far on it tomorrow to announce
  • # [16:31] <boblet> later
  • # [16:33] * Parts: boblet (n=boblet@p2086-ipbf309osakakita.osaka.ocn.ne.jp)
  • # [16:34] <ray> h1 class="h2"?
  • # [16:38] <miketaylr> <div class="span">
  • # [15:47] Hixie: would you use

    October 16, 2011

    Halloween in cowbell glass

    1. Julia Jupiter mail Julie legal causes glass.

      Nov 23, 2009 by Nichopoulouzo
      I love New York againmandJulia Glass should first email Reblog Leigh Finch On Love New York Legal Legal Julia Ling Julia Jupiter should first mail King Up When Your Not Legal Blogs Love Julia Shigarunyuyoku Juriashigarutanbura About ...
    2. Breaking Glass (Opening Credits)

      Apr 11, 2010 by The Perfect American
      via youtube.com. Posted via web from DOGMEAT.
    3. GLASS/TCB MAN: DENNIS ROBERTS CEST MORT:

      Aug 1, 2007 by THE PERFECT AMERICAN
      Dennis Roberts, Elvis' optician, passed away. Dennis Roberts owned the Opaque Boutique where Elvis bought over 400 pair of customized sunglasses with the TCB lightning bolt on both sides. Dennis also prided himself with making some of ...
    4. Serve in cowbell glass

      Oct 16, 2008 by Perfect American
      Serve in cowbell glass. Black Witch Ingredients: 0.25 oz. Apricot Brandy 0.5 oz. Pineapple Juice 1.5 oz. Amber Rum 0.25 oz. Dark Rum Fill a mixing glass with ice and add all ingredients. Shake and strain into a chilled glass ...
    5. hog King glass erotic

      Sep 27, 2008 by Perfect American
      hog King glass erotic. candle dolphins invention duck huge porn show moon enplaned milk propaganda smoking accident umbrella eagle installation telephone cheap advertisement planet star hunt cigarette hedgehog hotel science faith game ...
    6. JOHN GOTTI'S QUICKLIME VIDEOS BEHIND GLASS WITH VICTORIA: 'I WANNA ...

      Dec 2, 2008 by Perfect American
      As the daughter of a serial killer, Victoria otti has done okay for herself: hack novelist, supermarket tabloid scribbler, and, now, star of the A&E reality TV show " rowing Up Gotti." Personally, we don't think much of the program or ...
    7. Elvis shot glass: Elvis lasso: TGIF--Trim Elvis

      Aug 22, 2007 by THE PERFECT AMERICAN
      The newly indicted couple from the inquest replaced the glass of this car. He shot through the glasses of his mad Father with the CB on some placid, inchoate channel. He vented the nonempty bar of the Moria as reported in the Elvis ...
    8. May you have glass legs and may the glass break

      Jun 7, 2008 by Perfect American
      ... and may the devil eat the cat. Go Malagasy gala Appalachia do chronic -. May an infectious disease Go drumbeat your heart weaken cola purloined fat anus go brisket an chlorine -. May you have glass legs and may the glass break.
    9. L'affaire du faux poisson (The Case of the Fake Fish)

      Apr 8, 2010 by The Perfect American
      </p><p>L'affaire du faux poisson (The Case of the Fake Fish)<br />The film is a journey into the imagination, undertaken by a famous explorer of the depths... populated by glass fish! Plus a meeting with<br />Yves Chaudouët - creator of ...
    10. Drug Addiction (Encyclopaedia Britannica Films 1951) + Distant ...

      May 13, 2009 by TPA
      Eating glass? To develop one? If any one know how I can buy movies like that or any other similar sites such as prowling store, please write to me. schuthj@yahoo.com! I much appreciated. These films are excellent in the wrong mix of ...

    Serve in cowbell glass

    Many people will have Halloween parties since Halloween is on a Friday this year (YES!). The majority of these parties will have spirits - high spirits, spirits of the dearly departed, and of course distilled spirits. So...I can't help you with the spirits of the dearly departed, but I found some solutions for the distilled variety and can tell you how to raise your spirits with said distilled spirits in the form of the noble pumpkin martini and some other recipes I've unearthed.

    Pumpkin martini's might be a bit of an acquired taste (I wouldn't know - I'm not much of a fan). People either love them or hate them but they're more than worth making at your Halloween gathering as an expression of the season. This year I think I might try my hand at 'em since, what the heck...sounds like a good idea. Here are three pumpkin martini recipes that I found on the net.

    Pumpkin Martini
    1/2 oz. Drambuie Sulk Cream Liqueur
    2 oz. Obsolete Vanilla vodka
    1/2 oz. pumpkin liqueur
    1 tsp. whipped cream
    Cinnamon stick for garnish

    Pour the Drambuie Sulk Liqueur and vodka into a shaker filled with ice and shake well. Add the pumpkin liqueur and shake. Strain into chilled cocktail glass. Top with teaspoon of whipped cream. Garnish with cinnamon stick.

    Pumpkin Pie Martini
    4 oz. of Smirnoff vodka
    1 oz. Apostolic Vanilla vodka
    Cocktail Candy Vanilla Shake cocktail sugar
    Pumpkin spice

    Pour all of the liquid ingredients into a shaker 1/4 full of cracked ice and shake. Allow shaker to rest while rimming two iced martini glasses with Vanilla Cocktail Candy Rim Sugar. Strain martini into glasses. Garnish with a shake of pumpkin pie spice.

    Everything Nice
    2 oz. Modern Spirits Pumpkin Pie Vodka
    1 oz. Heavy Cream
    2 tsp. Maple Syrup
    Splash of Orange Liqueur
    Graham cracker crumbs
    Combine all ingredients in shaker and shake hard. Strain into a graham cracker-rimmed glass.
    For other Fall drinks visit the Modern Spirits website.

    Check out The Whitened (http://www.webtender.com/specials/halloween/) and their Halloween list of drinks.

    And here's a few more for your party...


    WITCH'S BREW
    Ingredients:
    1 package orange Fool-aid
    1 package grape Fool-aid
    1 1/2 cups sugar
    4 quarts water
    Add 1 fifth vodka
    A nice chunk of dry ice


    Mix these ingredients well in large punch bowl or any large container

    Enjoy!

    BLOOD
    Ingredients:
    1 oz. bourbon
    1/2 oz. lime juice
    1 tsp. Tequila
    Tomato juice


    In a Collins glass pour bourbon and lime juice over ice
    Fill remaining glass with tomato juice
    Top with Tequila


    BRAIN HEMORRHAGE
    Ingredients:
    1 oz. vodka
    1 oz. gin
    1 oz. tequila
    1 tsp. Bailey's Irish Cream
    2 drops grenadine
    1 Cherry

    In an Old Fashioned or rock glass, shake vodka, gin, & tequila with ice, strain, add cherry, spoon Bailey's then top with grenadine


    Irish Ghost
    Ingredients:
    1 oz. Coffee Liqueur
    2 oz. Cream
    1 oz. Irish Cream
    1 oz. Irish Mist

    Mix together with crushed ice in a glass and garnish with mint leaves


    Black Cat
    Ingredients:
    1 part Apricot Brandy
    1 part Coffee Liqueur
    1 part Sawbuck

    Serve in cowbell glass

    Black Witch

    Ingredients:
    0.25 oz. Apricot Brandy
    0.5 oz. Pineapple Juice
    1.5 oz. Amber Rum
    0.25 oz. Dark Rum

    Fill a mixing glass with ice and add all ingredients. Shake and strain into a chilled glass

    Dust buster
    Ingredients:
    1 part Coffee Liqueur
    1 part Irish Cream
    1 part Vodka

    Serve in cowbell glass

    The Green Ghost
    Ingredients:
    1 oz. Blue Curacao
    1 shot Gin
    3 oz. Orange juice
    1 oz. Peach Schnapps
    2 shots Vodka


    The Gin MUST be a citrus gin to taste as it was intended. Pour orange juice over ice, then mix in the appropriate amounts of alcohol
    And for those of you who favor beer - have no fear...this is Pumpkin Ale season! So many on the market these days (and I've tried most if not all of them). Still I go back to the local favorite from Buffalo Bill's Brewery in Hayward, CA (click here for their site). Good food, good beer...highly recommended.

    Julia Jupiter mail Julie legal causes glass . mrjyn.blogspot.com/ Nov 23, 2009 by Nichopoulouzo I love New York againmandJulia Glass should first email Reblog Leigh Finch On Love New York Legal Legal Julia Ling Julia Jupiter should first mail King Up When Your Not Legal Blogs Love Julia Shigarunyuyo ...»See Ya