CSS:从右向左扩展<div>以显示文本

JoS*_*Sch 3 css jquery expand hover flexbox

我想建立一个固定的<div>,含有图标,它由右扩展到左时被悬停(该<div>膨胀时,未图标),露出在该图标的左侧的一段文字.图标的位置保持不变.这是一个草图,以帮助说明我想做的事情:

在此输入图像描述

更改<div>悬停的大小没有问题,我只需添加一个宽度更大的类(包括转换为扩展设置动画).但我对元素的定位感到困惑.我将图标和文本(在一个内部<span>)分开放置<div>并尝试使用安排一切flex.在扩展/悬停状态下,事情看起来应该是这样,但是一旦<div>再次缩小,包含图标和文本的两个div会尝试共享剩下的小空间,因此图标会被切断,文本会被压缩.

如果有人能帮助我弄清楚如何按照我希望的方式设置它,我将不胜感激.

这是我到目前为止所获得的jsFiddle:Button-GrowOnHover

加上代码本身:

$(document).ready(function() {
  var button = $("#myButton");

  button.mouseenter(function() {
    $(this).addClass("grow");
  });
  button.mouseleave(function() {
    $(this).removeClass("grow");
  });
});
Run Code Online (Sandbox Code Playgroud)
.button-container {
  position: fixed;
  top: 5%;
  right: 5%;
  width: 100px;
  padding: 5px;
  background-color: tomato;
  display: flex;
  justify-content: space-between;
  overflow: hidden;
  transition: width 1s;
}

.button-container.grow {
  width: 300px
}

.button-text-container {
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: lightblue;
}

.button-icon-container {
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="button-container" id="myButton">

  <div class="button-text-container">
    <span>Here comes some text.</span>
  </div>

  <div class="button-icon-container">
    <img src="https://placeholder.pics/svg/100x100/7AFFA6/000000/ICON">
  </div>

</div>
Run Code Online (Sandbox Code Playgroud)

Tem*_*fif 5

如果您依赖于flexbox 顺序,则可以仅使用 CSS 执行此操作,并且可以将宽度更改移动到文本而不是父容器:

.button-container {
  position: fixed;
  top: 5%;
  right: 5%;
  padding: 5px;
  background-color: tomato;
  display: flex;
  justify-content: space-between;
  overflow: hidden;
}


.button-text-container {
  order:-1;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: lightblue;
  white-space:nowrap; /*Keep text always one line*/
  overflow:hidden;
  width:0;
  transition: width 1s;
}

.button-icon-container {
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}
.button-icon-container:hover + .button-text-container {
  width:200px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="button-container" id="myButton">
  <div class="button-icon-container">
    <img src="https://placeholder.pics/svg/100x100/7AFFA6/000000/ICON">
  </div>
  
  <div class="button-text-container">
    <span>Here comes some text.</span>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)