简体   繁体   English

CSS 2 个图标之间的过渡(材料设计)

[英]CSS Transition between 2 icons (Material Design)

Is possible change className of ID with a smooth transition between elements?是否可以通过元素之间的平滑过渡来更改 ID 的 className? Using CSS Transition?使用 CSS 过渡? or Changing opacity of.mdi-star?或改变.mdi-star 的不透明度?

https://jsfiddle.net/fekula/n3gjfcvp/1/ https://jsfiddle.net/fekula/n3gjfcvp/1/

<script>
function changeFavButtonClass(){
if ( document.getElementById("fav_button_icon").className == 'mdi mdi-48px mdi-star-outline' ){
   document.getElementById("fav_button_icon").className = 'mdi mdi-48px mdi-star';
}else{
   document.getElementById("fav_button_icon").className = 'mdi mdi-48px mdi-star-outline';
}
}
</script>

<i id="fav_button_icon" class="mdi mdi-48px mdi-star-outline" onclick="changeFavButtonClass()"></i>
                

Thanks谢谢

You can do this with some CSS animation and keyframes.您可以使用一些 CSS animation 和关键帧来执行此操作。 Take a look what I did here:看看我在这里做了什么:

https://jsfiddle.net/ko9nx4mt/1/ https://jsfiddle.net/ko9nx4mt/1/

 function changeFavButtonClass(){ if ( document.getElementById("fav_button_icon").className == 'mdi mdi-48px mdi-star-outline' ){ document.getElementById("fav_button_icon").className = 'mdi mdi-48px mdi-star'; }else{ document.getElementById("fav_button_icon").className = 'mdi mdi-48px mdi-star-outline'; } }
 .mdi-star-outline{ animation:fade1 1s linear; }.mdi-star{ animation:fade2 1s linear; } @keyframes fade1 { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes fade2 { 0% { opacity: 0; } 100% { opacity: 1; } }
 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@5.8.55/css/materialdesignicons.min.css"> <i id="fav_button_icon" class="mdi mdi-48px mdi-star-outline" onclick="changeFavButtonClass()"></i>

To have a real nice effect between the outlined and full star, like I think you want:在轮廓和满星之间有一个真正好的效果,就像我认为你想要的那样:

You have to use a container to absolute position the full star over the outlined one with opacity at zero.您必须使用一个容器来绝对 position 将完整的星星覆盖在不透明度为零的轮廓上。

Then on click, just change the opacity... A CSS transition will then work.然后单击,只需更改不透明度... CSS transition将起作用。

 let fullStarState = false; function changeFavButtonClass() { fullStarState =;fullStarState. document.querySelector(".star-full").style.opacity = Number(fullStarState) }
 .icon-wrap{ position: relative; display: inline; }.star-full{ position: absolute; left: 0; opacity: 0; transition: opacity 1s; }
 <link href="https://cdn.jsdelivr.net/npm/@mdi/font@5.8.55/css/materialdesignicons.min.css" rel="stylesheet" /> <div class="icon-wrap" onclick="changeFavButtonClass()"> <i id="fav_button_icon" class="mdi mdi-48px mdi-star-outline"></i> <i id="fav_button_icon" class="mdi mdi-48px mdi-star star-full"></i> </div>


EDIT编辑

You probably want more than one star in the page...您可能希望页面中不止一颗星...

Here is a better variant of the JS.这是 JS 的一个更好的变体。

 document.querySelectorAll(".icon-wrap").forEach(function(star){ star.addEventListener("click", function(event){ let full = this.querySelector(".star-full") let star_opacity = full.style.opacity full.style.opacity = (star_opacity)? 0: 1 }) })
 .icon-wrap{ position: relative; display: inline; }.star-full{ position: absolute; left: 0; opacity: 0; transition: opacity 1s; }
 <link href="https://cdn.jsdelivr.net/npm/@mdi/font@5.8.55/css/materialdesignicons.min.css" rel="stylesheet" /> <div class="icon-wrap"> <i id="fav_button_icon" class="mdi mdi-48px mdi-star-outline"></i> <i id="fav_button_icon" class="mdi mdi-48px mdi-star star-full"></i> </div> <div class="icon-wrap"> <i id="fav_button_icon" class="mdi mdi-48px mdi-star-outline"></i> <i id="fav_button_icon" class="mdi mdi-48px mdi-star star-full"></i> </div> <div class="icon-wrap"> <i id="fav_button_icon" class="mdi mdi-48px mdi-star-outline"></i> <i id="fav_button_icon" class="mdi mdi-48px mdi-star star-full"></i> </div> <div class="icon-wrap"> <i id="fav_button_icon" class="mdi mdi-48px mdi-star-outline"></i> <i id="fav_button_icon" class="mdi mdi-48px mdi-star star-full"></i> </div> <div class="icon-wrap"> <i id="fav_button_icon" class="mdi mdi-48px mdi-star-outline"></i> <i id="fav_button_icon" class="mdi mdi-48px mdi-star star-full"></i> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM