CSS attr() for integers:解决这个问题的好方法是什么?

CSS attr() for integers: What is a good way to solve this?

PHP 模板:

  <div 
class="el" 
data-spacetop="<?php echo $spacetop; ?>" 
data-spaceleft="<?php echo $spaceleft; ?>" 
data-spacetopmobile="<?php echo $spacetopmobile; ?>" 
data-spaceleftmobile="<?php echo $spaceleftmobile; ?>"></div>

HTML:

<div class="el" data-spacetop="228" data-spaceleft="876" data-spacetopmobile="90" data-spaceleftmobile="20"></div>

CSS:

 .el {
        padding-top: attr(data-spacetop) px;
        padding-left: attr(data-spaceleft) px;
    }

@media screen and (max-width:600px) {
    .el {
        padding-top: attr(data-spacetopmobile) px;
        padding-left: attr(data-spaceleftmobile) px;
    }
}

如果这可行,那就太好了。不幸的是它没有,尽管 W3C 草案已经存在很长时间了 (https://caniuse.com/#feat=css3-attr)。

你会如何解决这个问题?不幸的是,也不支持内联媒体查询。

如果您需要支持现代浏览器,您可以使用闪亮的新 CSS custom properties 而不是 data-attributesattr()

Codepen demo


标记

<div class="el" 
style="
   --spacetop:40px;
   --spaceleft:20px;
   --spacetopmobile:10px;
   --spaceleftmobile:5px
"></div>

CSS

.el {
  border: 1px #bc9 dashed;
  padding-top: var(--spacetop);
  padding-left: var(--spaceleft);
}

@media screen and (max-width:600px) {
  .el {
    padding-top: var(--spacetopmobile);
    padding-left: var(--spaceleftmobile);
  }
}

这个语法是正确的:

padding-top: attr(data-spacetop px);

padding-top: attr(data-spacetop px,fallback);

但是在上述两种方法中使用这个属性不支持主流浏览器