我可以将单位添加到css calc中的值吗?

时间:2018-04-25 09:52:36

标签: css3

我现在正在使用javascript:

在DOM中存储一个值
document.documentElement.style.setProperty('--offset', offset+'px')

稍后,我将它用作动画中计算的一部分:

@keyframes upanim {
    from    {transform: translate3d(0,calc(var(--offset) - 100vh ),0);}
    to  {transform: translate3d(0,0,0);}
}

我现在想使用相同的值来计算该动画的速度,这样速度总是与每秒像素数相同:

animation: upanim calc(var(--offset) * 0.002)s cubic-bezier(0, 0, 0.25, 1);

问题是'px'和's',我想在计算中添加单位,而只是将值存储在DOM中。这可能吗?

1 个答案:

答案 0 :(得分:3)

要在需要像素的属性中使用无单位css变量,需要将其乘以1px

width: calc(var(--offset) * 1px);

所以,我认为你能得到的最好的是设置没有尺寸的变量偏移量,并在使用时添加这个尺寸:

在片段中,悬停身体以查看以恒定速度移动的元素:

#t1 {
  --offset: 10;
}
#t2 {
  --offset: 20;
}
#t3 {
  --offset: 40;
}

.test {
  width: 100px;
  height: 40px;
  margin: 5px;
  background-color: antiquewhite;
  transform: translateX(calc(var(--offset) * 1vh));
}

body:hover .test {
  animation: move calc(var(--offset) * 0.2s) linear forwards;
  background-color: lightgreen;
}

@keyframes move {
    from  {transform: translateX(calc(var(--offset) * 1vh));}
      to  {transform: translateX(0);}
}
<div class="test" id="t1">ONE</div>
<div class="test" id="t2">TWO</div>
<div class="test" id="t3">THREE</div>