【问题标题】:How to make flex-grow ignore padding?如何让 flex-grow 忽略填充?
【发布时间】:2020-07-01 12:59:29
【问题描述】:

这是我使用 flex 的第一步,我有以下代码:

body {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  font-size: 14px;
}

.flexbox {
  display: flex;
  width: 100%;
  max-width: 1241px;
  height: 30px;
}

label {
  flex-basis: 0;
  flex-grow: 5;
  background-color: cyan;
}

input {
  flex-basis: 0;
  flex-grow: 13;
  background-color: yellow;
  margin: 0;
  padding: 0;
  border: 0;
}

div {
  flex-basis: 0;
  flex-grow: 6;
  height: 10px;
  background-color: red;
}
<div class="flexbox">
  <label>width must = 258.54px</label>
  <input type="text" value="width must = 672.20px">
  <div>width must = 310.25px</div>
</div>

一切都按预期进行。但是,我需要将padding-left: 25px 添加到我的输入中,因为只有我这样做,flexbox 中元素的所有大小都会发生变化。如何添加此填充并同时保持尺寸(我的意思是将我的解决方案与 flex-grow 和 flex-basis 一起使用)?

这就是我拥有的padding:0

这是我添加padding-left: 25px时所拥有的:

【问题讨论】:

  • 如果你把输入类padding:0改成padding-left:25px;不是你需要的结果吗?
  • @SimoneRossaini,不,然后label、input和div的宽度变化
  • 你说你需要固定宽度(在书面内容中),然后你使用flex-growflex-basis: 0。那是行不通的。

标签: html css flexbox


【解决方案1】:

因为是文本输入,所以使用 text-indent 代替 padding:

body {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  font-size: 14px;
}

.flexbox {
  display: flex;
  width: 100%;
  max-width: 1241px;
  height: 30px;
}

label {
  flex-basis: 0;
  flex-grow: 5;
  background-color: cyan;
}

input {
  flex-basis: 0;
  flex-grow: 13;
  background-color: yellow;
  margin: 0;
  padding: 0;
  border: 0;
}

div {
  flex-basis: 0;
  flex-grow: 6;
  height: 10px;
  background-color: red;
}
<div class="flexbox">
  <label>width must = 258.54px</label>
  <input type="text" value="width must = 672.20px">
  <div>width must = 310.25px</div>
</div>
<div class="flexbox">
  <label>width must = 258.54px</label>
  <input type="text" value="width must = 672.20px" style="text-indent: 25px;">
  <div>width must = 310.25px</div>
</div>

【讨论】:

    【解决方案2】:

    如何让flex-grow忽略padding

    flex-grow 不能忽略padding

    • flex-grow 占用可用空间。

    • padding 占用空间。

    • 所以flex-grow 必须考虑padding 才能正常工作。

    这里有一个可能对您有用的解决方法:

    .flexbox {
      display: flex;
      max-width: 1241px;
      height: 30px;
    }
    
    label {
      flex: 5 1 0;
      background-color: cyan;
    }
    
    #input {
      flex: 13 1 0;
      height: 100%;
    }
    
    input {
      height: 100%;
      width: 100%;
      padding-left: 25px;
      background-color: yellow;
      border: none;
    }
    
    div:last-child {
      flex: 6 1 0;
      background-color: red;
    }
    
    * {
      box-sizing: border-box;
    }
    
    body {
      margin: 0;
      font-size: 14px;
    }
    <div class="flexbox">
      <label>width must = 258.54px</label>
      <div id="input"><input type="text" value="width must = 672.20px"></div>
      <div>width must = 310.25px</div>
    </div>

    【讨论】:

    猜你喜欢
    • 2019-05-18
    • 1970-01-01
    • 2016-02-03
    • 2020-05-15
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    相关资源
    最近更新 更多