/* ol 要素ごとにカウンタを用意 */
ol { counter-reset: item; }
/* リストマーカを消しておく */
li { list-style: none; }
/* li 要素の直前に 1.2.3 のようなテキストを生成し,カウンタを増やす */
li:before {
content: counters(item, ".");
counter-increment: item;
}
ただし,上記は Opera くらいしか対応していません(Firefox 1.5 は未確認)。他のブラウザ,特に IE に対応させたければ,不恰好ですが HTML ソースに直接番号を振る[*]しかないと思います。
----
[*] もしも XHTML であれば,クライアント側 XSLT で番号付き ol 要素を自動作成できます(IE,Gecko,Opera,Safari で動作はしますが,まだ不具合も多いのでお勧めはしません)。<?xml-stylesheet?> 命令で以下の XSL を読み込みます。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:h="http://www.w3.org/1999/xhtml">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<!-- ノード・属性をそのままコピーする -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- ol 要素に関しては,li 要素に 1.2.3 のように番号を振っておく -->
<xsl:template match="h:ol">
<xsl:element name="h:ol">
<xsl:apply-templates select="@*"/>
<xsl:for-each select="h:li">
<xsl:element name="h:li">
<xsl:apply-templates select="@*"/>
<xsl:number level="multiple" count="h:li"/>
<xsl:text> </xsl:text>
<xsl:apply-templates/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>