【问题标题】:Is there a way for CSS to interpret `start` and/or `value` properties of `ol` and `li` tags for custom alpha counters?CSS有没有办法解释自定义alpha计数器的`ol`和`li`标签的`start`和/或`value`属性?
【发布时间】:2019-06-17 08:23:55
【问题描述】:

我正在转换一个包含数千个页面的网站,以使用 CSS 计数器而不是标准的 HTML 列表表示。该项目的性质使得更改 CSS 而不是 HTML 变得容易得多。该站点使用许多不同类型的列表,其中一些使用ol 级别的start 属性和/或li 级别的value 属性来继续以前的列表和/或跳过值。

到目前为止,我已经能够成功地定位不同的列表并为它们提供我想要的所有自定义列表样式,甚至使用attr(start)attr(value) 更改编号列表的:before 内容中的计数器。我仍然想不通的是,当我需要一个字母列表从a 之外的某个地方开始或跳过一个值时,如何将这些数值转换为字母。

<ol class="lower-alpha" start="2">
    <li>Explain...</li>
    <li>Describe...</li>
    <li value="5">Calculate...</li>
</ol>
ol.lower-alpha {
    list-style: none;
    counter-reset: special-little-letters;
    & > li { 
        list-style: none;
        &:before {
            content: counter(special-little-letters,lower-alpha);
        }
        counter-increment: special-little-letters;
    }
    &[start] { 
        counter-reset: special-little-letters attr(start); /* doesn't work */
    }
    & > li[value]:before {
        counter-reset: special-little-letters attr(value); /* doesn't work */
        content: counter(special-little-letters,lower-alpha)
    }
}

我想要一个包含bce 的字母列表。检查结果时,我收到abc 和错误“无效的属性值”。

【问题讨论】:

  • 这可能会给你一个很好的解决方法:stackoverflow.com/a/55201090/8620333
  • @TemaniAfif 您的回答需要我在整个 HTML 中添加 style="--start:6",而 li value 没有任何内容。我的目标是避免更改 HTML 并同时处理 ol startli value
  • 就像我在开始时所做的那样,您可以通过使用另一个 CSS 变量来实现价值
  • @TemaniAfif 我无法更改 HTML。
  • 如果有人遇到同样的问题并且还可以更改 HTML,这仍然是一种可能的解决方法。

标签: html css attributes css-counter


【解决方案1】:

如果您希望计数器从b 开始,您需要增加ol.lower-alpha 上的计数器。那么如果你想跳过dvalue属性,你只需要在ol.lower-alpha&gt;li[value]:before中再次调用counter-increment

另请注意,将属性应用于counter-reset 是无效语法,因此您不会看到该规则生效。我已将其从以下示例中删除。

ol.lower-alpha {
  list-style: none;
  counter-reset: special-little-letters;
  counter-increment: special-little-letters;
}

ol.lower-alpha>li {
  list-style: none;
  counter-increment: special-little-letters;
}

ol.lower-alpha>li:before {
  content: counter(special-little-letters, lower-alpha);
}

ol.lower-alpha[start] {
  counter-reset: special-little-letters;
}

ol.lower-alpha>li[value]:before {
  counter-increment: special-little-letters;
}
<ol class="lower-alpha" start="2">
  <li>Explain...</li>
  <li>Describe...</li>
  <li value="5">Calculate...</li>
</ol>

【讨论】:

  • 这使得所有ollower-alpha 类以b 开头,并导致li 与任何value 跳过1。我在问startvalue 可以产生相应的字母,就像它们对 HTML 所做的那样。
  • 换句话说,我不想“希望计数器从b 开始”。我希望计数器从与任何&lt;ol&gt; 标记中的start 值对应的字母开始(并跳至与任何&lt;li&gt; 标记中的value 值对应的字母)。
猜你喜欢
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 2019-01-01
  • 2021-07-13
  • 2013-07-04
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
相关资源
最近更新 更多