将CSS应用于某些列表项

时间:2015-01-14 14:15:17

标签: html css xslt

问题:在上一个问题Table of contents XSL中@potame提供的解决方案的延续中,我想知道是否有些未将CSS样式应用于某些列表项。提供的CSS如下:

<style>
    body {
       text-align: justify;
    }
    ol, ul {
       counter-reset: item;
    }
    li {
       display: list-item;
       list-style-type: none;
    }
    li.chapter::before {
       content: "";
    }  
    li:before {
       content: counters(item, ".") ". ";
       counter-increment: item
    }
</style>

根据前一个问题中@potame提供的目录的推理,我已经制作了XSL模板来处理章节,章节,子章节和子章节:

<xsl:template match="t:chapter">
    <li class="chapter">
    <h2>
       <a name="{@id}"><xsl:value-of select="t:title"/></a>
    </h2>
    <br/>
    <ol>
        <xsl:apply-templates select="*[not(self::t:title)]"/>
    </ol>
    </li>
</xsl:template>

<xsl:template match="t:section">
    <li>
        <a name="{@id}"><xsl:value-of select="t:title"/></a>

    <br/>
    <ol>
        <xsl:apply-templates select="*[not(self::t:title)]"/>
    </ol>
    </li>

</xsl:template>

<xsl:template match="t:subsection">
    <li>
        <a name="{@id}"><xsl:value-of select="t:title"/></a>

    <br/>
    <ol>
        <xsl:apply-templates select="*[not(self::t:title)]"/>
    </ol>
    </li>

</xsl:template>

<xsl:template match="t:subsubsection">
    <li>
        <a name="{@id}"><xsl:value-of select="t:title"/></a>

    <xsl:apply-templates select="*[not(self::t:title)]"/>
    </li>    

</xsl:template>

以下是处理列表和段落的模板,可以在内容中显示:

<xsl:template match="list:ol">
    <ol>
        <xsl:apply-templates/>  
    </ol>
</xsl:template>

<xsl:template match="list:ul">
    <ul>
        <xsl:apply-templates/>           
    </ul>        
</xsl:template>

<xsl:template match="list:li/p:p">
    <li>
        <xsl:apply-templates/>                           
    </li>
</xsl:template>

<xsl:template match="p:p">
    <p>
        <xsl:apply-templates/>           
    </p>
</xsl:template>

问题是,当我在内容中有列表项时,HTML结果如下所示:

Chapter 1
   1.1. Motivation

        ...some text...

        Example list:

        1.1.0.1. text
        1.1.0.2. tex
        1.1.0.3. text
        1.1.0.4. text

HTML中的预期结果是:

Chapter 1
   1.1. Motivation

        ...some text...

        Example list:

        1. text
        2. text
        3. text
        4. text

这基本上意味着我想要“普通的有序列表”,而不是像子集或其他东西那样出现......

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是将类设置为与您的toc相关的所有<li>,并将特定的CSS样式应用于它们(类似于我在本章中所做的那样)。它将帮助您优化要应用的样式。 假设您在与部分,子部分等相关的所有class="tocentrynumbered"上设置了XSLT <li>属性,您可以使用以下修改过的CSS:

body {
     text-align: justify;
}
ol, ul {
     counter-reset: item;
}
li.chapter::before {
     content: "";
}  
li.tocentrynumbered {
     display: list-item;
     list-style-type: none;
}
li.tocentrynumbered:before {
    content: counters(item, ".") ". ";
    counter-increment: item;
}

因此,它不会影响您在文档中使用的其他列表项。