[ 妙用css ]:用css变量解决开发实际问题

各位看官,如何实现以上这种方块的移动,相信对于大家来说并不陌生,无非是几个步骤

1.设置动画
2.进行移动
3.动画循环

<div class="f-box"><div class="box"></div>
</div>
<style> .f-box{border: 1px solid gray;width: 300px;height: 100px;
}
.box{width: 100px;height:100px;background-color: aqua;animation: move 3s infinite;
}
@keyframes move {50%{transform: translateX(calc(300px - 100%)); }
} </style> 

一个简单的移动模块就实现了,但是我们设置的transform: translateX(calc(300px - 100%)); ,这里的300px如果是一个不固定的值,此处我想改为父元素的宽度,但如果不巧的是,父元素的宽度是不固定的会有什么问题。

遇到的问题

这里我对父元素的宽度设置为80% 那么我的move动画中就不知道应该设置多大的宽度了 大部分人到这个地方会考虑使用js代替css的方法来进行书写,但是我们可以通过js计算父元素宽度再放到css中的方式来修改,可能效率会更高一些。

.f-box{border: 1px solid gray;width: 80%;height: 100px;
}
.box{width: 100px;height:100px;background-color: aqua;animation: move 3s infinite;
}
@keyframes move {50%{`transform: translateX(calc(??? - 100%)); `}
} 

使用var函数

var()函数可以代替元素中任何属性中的值的任何部分

我们可以在:root上定义,然后再其他地方使用,其实也可以定义在任意的元素上

:root {--main-bg-color: pink;
}

body {background-color: var(--main-bg-color);
} 

所以我们需要做的有几个步骤

1.使用Js获取父元素宽度
2.将父元素宽度绑定到任意元素上
3.进行设置动画的时候通过var获取父元素宽度

<style> @keyframes move {50%{/* 希望这个地方能改成父元素的宽度 但父元素的宽度不是固定的 *//* transform: translateX(父元素宽度 - 100%);*/transform: translateX(calc(var(--w) - 100%)); }} </style>
<script > let f = document.querySelector('.f-box')console.log(f.clientWidth)f.style.setProperty('--w',`${f.clientWidth}px`) </script> 

如图我设置了一个--w的属性,包含了父元素的值,我们可以在控制台中查看效果

通过js+css的方式可以轻松的对父元素的值设置到动画中进去

最后效果

最后

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值