代码之家  ›  专栏  ›  技术社区  ›  JoSch

CSS:从右到左展开a<div>以显示文本

  •  3
  • JoSch  · 技术社区  · 6 年前

    我想建立一个固定的 <div> ,包含一个图标,当将鼠标悬停在 <部门> 展开,而不是图标),在图标左侧显示一段文本。图标的位置保持不变。下面是一个草图来帮助说明我想做什么:

    enter image description here

    <部门> <span> <部门> flex . 在展开/悬停状态下,事情看起来应该是这样的,但是一旦 < 再次缩小,包含图标和文本的两个div尝试共享剩下的小空间,因此图标被切断,文本被压扁。

    如果有人能帮我弄清楚我想怎么做,我会很感激的。

    Button-GrowOnHover

    $(document).ready(function() {
      var button = $("#myButton");
    
      button.mouseenter(function() {
        $(this).addClass("grow");
      });
      button.mouseleave(function() {
        $(this).removeClass("grow");
      });
    });
    .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;
    }
    <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>
    2 回复  |  直到 6 年前
        1
  •  8
  •   Temani Afif    6 年前

    只有 CSS如果你依赖flexbox order 您可以将宽度更改移动到文本而不是父容器:

    .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;
    }
    <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>
        2
  •  1
  •   Mark Baijens    6 年前

    $(document).ready(function() {
      var button = $("#myButton");
    
      button.mouseenter(function() {
        $('.button-text-container').addClass("grow");
      });
      button.mouseleave(function() {
        $('.button-text-container').removeClass("grow");
      });
    });
    .button-container {
      position: fixed;
      top: 5%;
      right: 5%;
      padding: 5px;
      background-color: tomato;
      display: flex;
      justify-content: space-between;
    
    }
    
    .button-text-container.grow {
      width: 300px;
    }
    
    .button-text-container {
      display: flex;
      align-items: center;
      justify-content: center;
      background-color: lightblue;
      overflow: hidden;
      width: 0px;
      transition: width 1s;
    }
    
    .button-icon-container {
      height: 100%;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    <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>