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-attributes
和 attr()
标记
<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);
但是在上述两种方法中使用这个属性不支持主流浏览器
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-attributes
和 attr()
标记
<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);
但是在上述两种方法中使用这个属性不支持主流浏览器