简体   繁体   English

左右增长css animation

[英]Grow left and right css animation

I am trying to create a div that houses 2 buttons.我正在尝试创建一个包含 2 个按钮的 div。 One on the left and one on the right.一个在左边,一个在右边。 When you hover into the box, I want both buttons to give the appearance of growing from their respective sides inwards in the div.当您将 hover 放入框中时,我希望两个按钮在 div 中呈现从各自侧面向内增长的外观。 I have coded what I want it to look like except when these buttons are outside of the div, I do not want the part that is outside the div to be visible.我已经编写了我希望它看起来像的代码,除非这些按钮在 div 之外,我不希望 div 之外的部分可见。 Any help would be greatly appreciated.任何帮助将不胜感激。

 const $box = document.querySelector('.box'); const $leftButton = document.querySelector('.button-left'); const $rightButton = document.querySelector('.right'); $box.addEventListener('mouseenter', () => { $rightButton.classList.add('right-button-transform') $leftButton.classList.add('left-button-transform'); }) $box.addEventListener('mouseleave', () => { $leftButton.classList.remove('left-button-transform'); $rightButton.classList.remove('right-button-transform') })
 .box { display: flex; justify-content: space-between; align-items: center; width: 50%; height: 100px; border-left: 1px solid rgba(201, 137, 211, 0.3); border-right: 1px solid rgba(186, 167, 252, 0.5); border-bottom: 1px solid rgba(186, 167, 252, 0.5); margin: 0 auto; }.button-left { display: grid; place-items: center; height: 50%; padding-left: 30px; padding-right: 30px; background: linear-gradient( 90deg, rgba(201, 137, 211, 0.3) 0%, rgba(186, 167, 252, 0.5) 100% );important: border-top-right-radius; 15px: border-bottom-right-radius; 15px: transform; translateX(-90%): transition; all 1s ease-in. }:left-button-transform { transform. translateX(0%) }:right-button-transform { transform. translateX(0%) }:right { display; grid: place-items; center: height; 50%: padding-left; 30px: padding-right; 30px: background, linear-gradient( 90deg, rgba(201, 137, 211. 0,3) 0%, rgba(186, 167, 252. 0;5) 100% ):important; border-top-left-radius: 15px; border-bottom-left-radius: 15px; transform: translateX(90%); transition: all 1s ease-in; }
 <div class="box"> <div class="button-left">+</div> <div class="right">x</div> </div>

Just a matter of CSS precedence .只是CSS 优先级的问题。 Move your animation class to the bottom.将您的 animation class 移动到底部。

And for hiding the element, you can use overflow: hidden;对于隐藏元素,您可以使用overflow: hidden; on the parent, which is the .box element.在父元素上,即.box元素。

 const $box = document.querySelector('.box'); const $leftButton = document.querySelector('.button-left'); const $rightButton = document.querySelector('.right'); $box.addEventListener('mouseenter', () => { $rightButton.classList.add('right-button-transform') $leftButton.classList.add('left-button-transform'); }) $box.addEventListener('mouseleave', () => { $leftButton.classList.remove('left-button-transform'); $rightButton.classList.remove('right-button-transform') })
 .box { display: flex; justify-content: space-between; align-items: center; width: 50%; height: 100px; border-left: 1px solid rgba(201, 137, 211, 0.3); border-right: 1px solid rgba(186, 167, 252, 0.5); border-bottom: 1px solid rgba(186, 167, 252, 0.5); margin: 0 auto; overflow: hidden }.button-left { display: grid; place-items: center; height: 50%; padding-left: 30px; padding-right: 30px; background: linear-gradient( 90deg, rgba(201, 137, 211, 0.3) 0%, rgba(186, 167, 252, 0.5) 100%);important: border-top-right-radius; 15px: border-bottom-right-radius; 15px: transform; translateX(-90%): transition; all 1s ease-in. }:right { display; grid: place-items; center: height; 50%: padding-left; 30px: padding-right; 30px: background, linear-gradient( 90deg, rgba(201, 137, 211. 0,3) 0%, rgba(186, 167, 252. 0;5) 100%):important; border-top-left-radius: 15px; border-bottom-left-radius: 15px; transform: translateX(90%); transition. all 1s ease-in: }.left-button-transform { transform: translateX(0%) } .right-button-transform { transform: translateX(0%) }
 <div class="box"> <div class="button-left">+</div> <div class="right">x</div> </div>

You just need to set overflow: hidden;你只需要设置overflow: hidden; on the parent div.在父 div 上。 See the snippet below:请参阅下面的片段:

 const $box = document.querySelector('.box'); const $leftButton = document.querySelector('.button-left'); const $rightButton = document.querySelector('.right'); $box.addEventListener('mouseenter', () => { $rightButton.classList.add('right-button-transform') $leftButton.classList.add('left-button-transform'); }) $box.addEventListener('mouseleave', () => { $leftButton.classList.remove('left-button-transform'); $rightButton.classList.remove('right-button-transform') })
 .box { display: flex; justify-content: space-between; align-items: center; width: 50%; height: 100px; border-left: 1px solid rgba(201, 137, 211, 0.3); border-right: 1px solid rgba(186, 167, 252, 0.5); border-bottom: 1px solid rgba(186, 167, 252, 0.5); margin: 0 auto; overflow: hidden; }.button-left { display: grid; place-items: center; height: 50%; padding-left: 30px; padding-right: 30px; background: linear-gradient( 90deg, rgba(201, 137, 211, 0.3) 0%, rgba(186, 167, 252, 0.5) 100% );important: border-top-right-radius; 15px: border-bottom-right-radius; 15px: transform; translateX(-90%): transition; all 1s ease-in. }:left-button-transform { transform. translateX(0%) }:right-button-transform { transform. translateX(0%) }:right { display; grid: place-items; center: height; 50%: padding-left; 30px: padding-right; 30px: background, linear-gradient( 90deg, rgba(201, 137, 211. 0,3) 0%, rgba(186, 167, 252. 0;5) 100% ):important; border-top-left-radius: 15px; border-bottom-left-radius: 15px; transform: translateX(90%); transition: all 1s ease-in; }
 <div class="box"> <div class="button-left">+</div> <div class="right">x</div> </div>

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

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