CSS3的attr()在主流浏览器中不起作用

Pet*_* W. 40 css css3

我在HTML文档中有这个:

<a class="wbutton tint" data-tint="rgba(255,0,0,.5)" href="#">This should be red, with an opacity of 0.5</a>
Run Code Online (Sandbox Code Playgroud)

这在CSS文件中:

.window > .content .wbutton.tint {
    border: solid thin attr(data-tint, color);
    box-shadow: inset 0 0 50px attr(data-tint, color);
}
Run Code Online (Sandbox Code Playgroud)

Firefox在Firebug中返回CSS错误.难道我做错了什么?

根据该对W3C规范attr()功能,它应该工作.

(另外,在MDN Wiki中一个页面attr(),所以我认为它至少应该在Firefox中工作)

Bol*_*ock 60

看一下规范中给出的语法:

attr( <attr-name> <type-or-unit>? [ , <fallback> ]? )
Run Code Online (Sandbox Code Playgroud)

看起来需要删除属性名称和要使用的单位之间的逗号:

.window > .content .wbutton.tint {
    border: solid thin attr(data-tint color);
    box-shadow: inset 0 0 50px attr(data-tint color);
}
Run Code Online (Sandbox Code Playgroud)

但是,即使您使用了正确的语法,它也无法正常工作.事实证明,没有已知的3级版本的attr()实现2012 2013 2014 2015年 2016 2017年 20182019.更糟糕的是,从最新编辑的规范草案开始,它仍处于危险之中.

但并非所有内容都丢失了:如果您希望在即将推出的浏览器中实现此功能,仍有时间在相关的反馈渠道中进行推荐!以下是迄今为止提出的建议:

为了记录,基本的Level 2.1版本在所有主要浏览器的最新版本(包括IE8 +和Firefox 2+)中得到完全支持,并且与content属性一起用于生成内容的:before:after伪元素.MDN浏览器兼容性表仅适用于此版本,而不适用于CSS3版本.

  • 您知道,CSS3现已达到CR.除了Opera之外,每个主流浏览器都支持`calc()`(在Webkit浏览器`-webkit-`前缀,其余不在其余部分),`attr()`尚不可用AFAIK.:( (2认同)
  • @m_gol:我希望他们尽快实施,否则它会反弹回LCWD,浪费时间.这很烦人. (2认同)

Ben*_*uer 10

截至今天,attr()CSS3中仅支持从HTML5 data属性中获取值以设置content元素.有一个很好的小提琴,它显示了它.

我已在Google Chrome 35,Mozilla Firefox 30和Internet Explorer 11中对其进行了测试.

如果你想在CSS3中为不同的东西使用HTML5数据属性,比如设置元素widthheight元素,那么你需要一个额外的JavaScript库.

Fabrice Weinberg写了一个CSS3 attr()Polyfill,它处理data-widthdata-height.你可以在这里找到Fabrice的GitHub存储库:cssattr.js.