【问题标题】:nested CSS counters in IE 7 without listsIE 7 中没有列表的嵌套 CSS 计数器
【发布时间】:2012-09-26 10:08:29
【问题描述】:

我有以下 HTML 代码结构(示例):

<p paraclass="M">Some Text</p>
<p paraclass="A1">enum 1</p>
<p paraclass="A1">enum 2</p>
<p paraclass="A2">enum 2.1</p>
<p paraclass="A2">enum 2.2</p>
<p paraclass="A1">enum 3</p>

并希望它像这样呈现:

Some Text
1 enum 1
2 enum 2
   2.1 enum 2.1
   2.2 enum 2.2
3 enum 3

这对 CSS-pseudotag 非常有效,例如:

p[paraclass="A1"]:before{
   content:counter(A1);
   counter-increment:A1;
   counter-reset: A2;
 }

不幸的是,这在 IE7 中不起作用。
有什么好的解决方案可以在不更改 HTML 的情况下在 IE7 中工作?
对于 JS 解决方案,我有关于我需要的计数器的所有信息(比如ID,他们重置的计数器以及他们拥有的列表样式类型)。有没有更好/更简单的方法?如果没有,我怎样才能使用像“lower-roman”这样的计数器样式而不自己实现它们?
注意:可以使用 jQuery 1.6.2。

【问题讨论】:

  • “不改变 HTML”——我们也不能通过 jQuery 来改变它吗?
  • 可以更改 HTML,但我想知道是否有不这样做的简单方法。
  • 我会将您的代码转换为嵌套的有序列表。这就是它们的用途,您完全错过了这里的语义。此外,paraclass 不是有效属性。在 HTML5 中,您可以使用有效的 data-paraclass
  • selectivizr 很好,可以在 IE 6-8 中模拟 CSS3 选择器。我想你需要一些额外的东西来添加反增量。
  • selectivizir 不支持 ":before" 但还是很高兴知道,谢谢 :)

标签: javascript css internet-explorer-7 counter


【解决方案1】:

首先,您的 HTML 无效。如果您使用 HTML 5 开发,则必须将 paraclass 属性重命名为 data-paraclass,或者如果您使用 XHTML 开发,则必须添加命名空间。

其次,&lt;p&gt; 元素不被认为显示为列表。因此,我鼓励您使用 &lt;ol&gt; 元素,因为它是专门为此目的而设计的,并且受到所有浏览器的支持。

【讨论】:

  • 谢谢。我以您在此处看到的方式获取 HTML,以及有关应如何显示不同 paraclass-ID 的信息。除了在 IE 7 中之外,仅使用 CSS 即可一切正常。我必须在用户交互后将元素转换回相同的格式(在 ckEditor 中使用)。
  • 您使用的是哪个版本的 ckEditor?从 ckEditor 演示中可以看出,最新版本支持编号列表,并且似乎生成了有效的源代码。
  • 它确实支持它,但是我必须转换示例中看到的代码以包含 ol 元素并在保存文本时将其转换回来。
  • 我假设您在某处存储了一些文本,然后由 ckEditor 显示。为什么要进行转型?
  • 因为 HTML 是文本并且要正确显示它,所以我可以为其创建 CSS 规则的 paraclass-Attributes
猜你喜欢
  • 2015-10-10
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2018-07-25
相关资源
最近更新 更多