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

合并工具类的宽度和弹性属性

  •  0
  • darkhorse  · 技术社区  · 5 年前

    在我的站点上,我有很多设置元素宽度的实用程序类。对于几乎所有的案例来说 width 财产是完美的。唯一的问题是flex box。对于flex项目 flex 需要使用属性。我试着将这两个元素组合成一个类,如下所示:

    .width-100 {
        width: 100px !important;
        flex: 0 0 100px !important;
    }
    

    令人惊讶的是,这在我尝试过的几个地方都奏效了。当图元未使用flexbox时,其 宽度 设置正确。当某个图元使用flexbox时 属性确保它也能正常工作。然而,我想知道这是不是一个好主意。可能有我现在根本没有预见到的错误吗?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Temani Afif    5 年前

    min-width 约束和设置 width 将使弹性项的行为不同:

    .container {
      display:flex;
      margin:5px;
    }
    .container > img {
      flex: 0 0 100px;
    }
    
    .container > span {
      flex-grow:1;
      background:red;
    }
    <div class="container">
      <img src="https://i.picsum.photos/id/100/200/100.jpg">
      <span></span>
    </div>
    
    <div class="container">
      <img src="https://i.picsum.photos/id/100/200/100.jpg" style="width:100px">
      <span></span>
    </div>

    200px 100px . 所以,假设宽度在flexbox中不起作用是错误的,您需要 flex-basis .您的代码确实会强制宽度始终保持不变 但这和 flex:0 0 100px

    顺便说一下,您的代码可以简化为

    .width-100 {
        width: 100px !important;
        flex-shrink: 0 !important;
    }
    

    这将产生相同的输出,因为 flex-grow 0 伸缩基准值 会考虑你设置的宽度。