使用HTML5数据属性的CSS值

Jam*_*yle 98 css html5 attributes

width: attr(data-width);
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何方法可以使用HTML5的data-属性设置css值,就像设置css一样content.目前它不起作用.


HTML

<div data-width="600px"></div>
Run Code Online (Sandbox Code Playgroud)

CSS

div { width: attr(data-width) }
Run Code Online (Sandbox Code Playgroud)

Cai*_*nha 76

确实有这样的功能预见,请看http://www.w3.org/TR/css3-values/#attr-notation

这个小提琴应该像你需要的那样工作,但现在不会.

不幸的是,它仍然是草案,并没有在主要浏览器上完全实现.

但它确实适用content于伪元素.

  • @CaptainHypertext根据`caniuse.com`,该函数仍然广泛不受支持(伪元素的content属性中的字符串除外).http://caniuse.com/#feat=css3-attr (10认同)
  • @Zeus Zdravkov:那是什么逻辑?这个答案的全部*点*是代码不起作用 - 因为它首先不受支持.答案的错是怎么回事? (2认同)

yck*_*art 9

你可以用javascript创建一些css- rules,你可以在以后的样式中使用它们:http://jsfiddle.net/ARTsinn/vKbda/

var addRule = (function (sheet) {
    if(!sheet) return;
    return function (selector, styles) {
        if (sheet.insertRule) return sheet.insertRule(selector + " {" + styles + "}", sheet.cssRules.length);
        if (sheet.addRule) return sheet.addRule(selector, styles);
    }
}(document.styleSheets[document.styleSheets.length - 1]));

var i = 101;
while (i--) {
    addRule("[data-width='" + i + "%']", "width:" + i + "%");
}
Run Code Online (Sandbox Code Playgroud)

这会创建100个伪选择器,如下所示:

[data-width='1%'] { width: 1%; }
[data-width='2%'] { width: 2%; }
[data-width='3%'] { width: 3%; }
...
[data-width='100%'] { width: 100%; }
Run Code Online (Sandbox Code Playgroud)

注意:这有点偏离主题,并不是你(或某人)想要的,但也许有帮助.


Ben*_*uer 8

截至今天,您可以data在CSS3声明中从HTML5 属性中读取一些值.在CaioToOn的小提琴中,CSS代码可以使用data属性来设置content.

遗憾的是它不工作的widthheight(谷歌浏览器35,Mozilla Firefox浏览器30的Internet Explorer 11测试).

但Fabrice Weinberg 有一个CSS3 attr()Polyfill,它为data-width和提供支持data-height.你可以在这里找到它的GitHub回购:cssattr.js.