当前位置: 首页 > 面试题库 >

CSS内容:HTML5进度上的attr()不起作用

简景焕
2023-03-14
问题内容

HTML

<progress max="100" value="80" data-value="5"></progress>

CSS

progress { margin: 50px; width:250px; border:0; }

CSS(尝试1)

progress:before, progress:after { content: attr(data-value); }

CSS(尝试2)

progress::-webkit-progress-bar:before,
progress::-webkit-progress-bar:after { content: attr(data-value); }

progress::-moz-progress-bar:before,
progress::-moz-progress-bar:after { content: attr(data-value); }

CSS(尝试3)

progress::-webkit-progress-value:before,
progress::-webkit-progress-value:after { content: attr(data-value); }

progress::-moz-progress-value:before,
progress::-moz-progress-value:after { content: attr(data-value); }

上述尝试均未成功。还尝试使用不同的CSS代码块for :before和以上每个版本:after

目的

在HTML5 <progress>元素之前和之后注入CSS生成的内容。这可能吗?

JsFiddle演示

http://jsfiddle.net/pankajparashar/MNL2C/

更新

当我使用以下CSS时,它可以工作。

progress::-webkit-progress-bar:before,
progress::-webkit-progress-bar:after { content: '123'; }

结论

显然,当我们在CSS中注入静态内容时,它可以工作。但是,如果我们使用其中的内容,data-*则不会。


问题答案:

在我的原始评论中,我说:

我认为这是不可能的,因为progress如果浏览器已经可以绘制进度条,则元素中的内容就永远不会显示,类似于objector中的内容iframe

换句话说,这被归类progress为一个替换元素。就像传统的input元素和其他被替换的元素一样img,CSS2.1对于将生成的内容与其一起使用也没什么多说的:

注意。 该规范并未完全定义:before和:after与替换元素(例如HTML中的IMG)的交互。这将在以后的规范中更详细地定义。

众所周知,基于Gecko的浏览器选择不支持为替换元素生成的内容,而基于WebKit的浏览器在某种程度上允许它生成内容,至少对于作为替换元素的表单元素而言。(有趣的是,progress::beforeprogress::after没有在工作的
任何 浏览器。)所以,如果你问,如果有可能这样做跨浏览器的,答案是否定的,而且一直没有。

至于为什么WebKit浏览器可以插入字符串而不是attr()值,我不确定。既CSS2.1和CSS3单位和数值这种状态attr()应该从实际元素产生的那些伪元素的属性值,因为伪元素不能有属性本身 无论如何 。这就是我感到难过的地方。

也许浏览器错误地尝试data-value从中::-webkit-progress-bar::-webkit-progress- value不是从progress元素中获取属性,这就是为什么content在使用attr()时失败但在使用字符串时起作用的原因。

问题的根源可能在于您正试图将生成的内容添加到其他伪元素中,无论出于什么奇怪的原因,这似乎都可以在WebKit浏览器中使用。与上面的问题不同,替换元素中生成了内容,当前的Selectors3规范和即将推出的Selectors4规范对此都非常清楚:每个复杂的选择器不应有一个以上的伪元素。当然,在实现伪元素时,WebKit臭名昭著地违反了各种规则,因此事后看来,看到WebKit搞砸了这些并不足为奇。

无论哪种方式,真正的结论是CSS生成的内容的实现远远超出了CSS2.1 +
Selectors当前标准的范围,我的意思是指替换元素(例如input和)的生成内容progress以及伪元素的嵌套在单个选择器中。



 类似资料:
  • 问题内容: 我设置了一个动画,可以在Chrome 上正常运行,但是不能在Safari(IOS9 iPhone或9-El Capitan)上运行,也不能在Firefox上运行。 问题答案: @asimovwasright的答案是正确的。 为了避免在CSS上发生太多重复,我将SCSS与一起使用,以遍历所有可用范围(在本例中为8) 和HTML:

  • 问题内容: 我正在Ubuntu 13.04(Raring Ringtail)之上运行最新版本的Docker: 但是当我启动容器时 我没有看到任何限制,并且我的内核启用了cgroups内存限制: 我在这里想念什么明显的东西? 问题答案: 将不会显示它,因为这是通过cgroups强制执行的。而是可以在主机(容器外部)上使用和cgroup内存进行检查: 要查看它的内存不足,可以运行一些将使用比分配的内存

  • 问题内容: 我试图制作一个导航内联列表。您可以在这里找到它 由于某些原因,它不显示LI的宽度和高度。这是代码段。这有什么问题? 问题答案: 将元素声明为,并从元素中删除宽度和高度。 或者,将a 应用于元素并在该元素上使用。这与跨浏览器更加兼容,例如Firefox <= 2不支持。 如果您将元素的宽度设置为100%(以使其从左边缘到右边缘跨越),然后应用apply,则第一种方法将使您拥有一个动态居中

  • 问题内容: 我正在尝试使用CSS中的attr()设置元素的宽度,但是它不起作用。Chrome表示“无效的属性值”,但我不确定这是怎么回事。 我正在尝试使用属性“ prog”作为.progress div的百分比宽度。 问题答案: 这是CSS的实验性功能,至少是草案功能,根据Mozilla开发人员网络的文档,当前仅与CSS 属性兼容(在该属性中,它可以返回要放置在伪元素内的字符串),但是不能(尚未)

  • 问题内容: 我使用CSS来表示jQuery向下滑动部分的触发文本:即,当您将鼠标悬停在触发文本上时,光标将变为指针,并且触发文本的不透明度降低,以指示该文本具有单击动作。 这在Firefox和Chrome中可以正常工作,但在IE8中,不透明度不会改变。 我尝试了各种CSS设置,但均未成功。 例如 HTML: CSS: 是什么阻止IE更改不透明度?注意:我已经在各种不同的元素上进行了尝试,围绕CSS

  • 我有一种字体在IE8和IE9以及所有其他浏览器中都能正常工作,但第二种字体只在IE9和其他浏览器中工作。在IE8中,我得到了一个错误: “CSS3111:@font-face遇到未知错误。” 我一直在四处看书,尝试了很多事情,但都没有运气。 我的代码是: 我试过用几个不同的生成器多次重新生成eot,玩过CSS,玩过头,玩过域,等等,但是看起来它们都很好。如前所述,相同的代码在相同的,只是指向不同的