【问题标题】:How to make an input element take up all available vertical space?如何让输入元素占据所有可用的垂直空间?
【发布时间】:2021-10-22 03:22:25
【问题描述】:

我目前正在开发一个 HTML 计算器,并制作了一个表格来输入各种数字。该表单位于作为侧边栏的 div 中,我为每一行创建了一个 div,其中包含一个输入和标签。但是,输入元素上方留有大量空间,以及它们附加到输入元素的边框。我怎么能让输入占用所有可用的垂直空间? Picture of extra space

.sidebar {
  background-color: #272640;
  float: left;
  width: 20%;
  height: 100%;
  position: fixed;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  border: 1px solid #3E1F47;
}

#sidebarCentered {
}

.siderow {
  background-color: #312244;
  border-top: 1px solid #3E1F47;
  color: white;
  padding: 10px;
  box-sizing: border-box;
  width: 50% text-align:center;
  font-family: monaco;
}

.siderow label {}

.siderow input {
  box-sizing: border-box;
  background-color: #312244;
  border: 0px;
  height: 100%;
  border-left: 1px solid #5A5766;
  color: white;
  width: 50%;
  float: right;
  text-align: center;
}

.sidebarbuttons {
  background-color: #312244;
  margin-top: 10%;
}

.sidebarbuttons input {
  background-color: #312244;
  font-family: monaco;
  font-size: 15px;
  margin: 5px;
  width: 45%;
  color: white;
  padding: 10px;
  border: 1px solid #3E1F47;
  border-radius: 10px;
  transition: all ease-in-out 0.15s;
}

.sidebarbuttons input:hover {
  background-color: #272640;
  color: #272640;
  transition: all ease-in-out 0.15s;
}

#centermenu {
  background-color: #212F45;
  color: #EDFFEC;
  overflow: hidden;
  text-decoration: none;
  border-bottom: 1px solid #5A5766;
  box-sizing: border-box;
}
<div class="sidebar">
  <form id="sidebarCentered">
    <div class="siderow">
      <label for="balance">Balance:</label>
      <input type="number" name="balance" value=500>
    </div>
    <div class="siderow">
      <label for="monthly">Monthly <br> contribution:</label>
      <input type="number" name="monthly" value=0>
    </div>
    <div class="siderow">
      <label for="nummonths">Number of <br> Months:</label>
      <input type="number" name="nummonths" value=12>
    </div>
    <div class="siderow" style="border-bottom:1px solid #3E1F47;">
      <label for="ror">Monthly Rate <br> of Return:</label>
      <input type="number" name="ror" value=1>
    </div>
    <div class="sidebarbuttons">
      <input type="button" value="Calculate" style="float:left;">
      <input type="button" value="Quit" style="float:right;">
    </div>

  </form>
</div>

【问题讨论】:

    标签: html css input height


    【解决方案1】:

    你可以试试css网格

    .sidebar {
      background-color: #272640;
      float: left;
      width: 30%;
      height: 100%;
      position: fixed;
      box-sizing: border-box;
      display: flex;
      flex-direction: column;
      border: 1px solid #3E1F47;
    }
    
    .siderow {
      background-color: #312244;
      border-top: 1px solid #3E1F47;
      color: white;
      padding: 10px;
      box-sizing: border-box;
      width: 50% text-align:center;
      font-family: monaco;
      display: grid;
      grid-template-columns: 1fr minmax(50%, 1fr);
      justify-items: left;
    }
    input {
      justify-self: right;
    }
    
    .siderow input {
      box-sizing: border-box;
      background-color: #312244;
      border: 0px;
      height: 100%;
      border-left: 1px solid #5A5766;
      color: white;
      width: 50%;
      float: right;
      text-align: center;
    }
    
    .sidebarbuttons {
      background-color: #312244;
      margin-top: 10%;
    }
    
    .sidebarbuttons input {
      background-color: #312244;
      font-family: monaco;
      font-size: 15px;
      margin: 5px;
      width: 45%;
      color: white;
      padding: 10px;
      border: 1px solid #3E1F47;
      border-radius: 10px;
      transition: all ease-in-out 0.15s;
    }
    
    .sidebarbuttons input:hover {
      background-color: #272640;
      color: #272640;
      transition: all ease-in-out 0.15s;
    }
    
    #centermenu {
      background-color: #212F45;
      color: #EDFFEC;
      overflow: hidden;
      text-decoration: none;
      border-bottom: 1px solid #5A5766;
      box-sizing: border-box;
    }
    <div class="sidebar">
      <form id="sidebarCentered">
        <div class="siderow">
          <label for="balance">Balance:</label>
          <input type="number" name="balance" value=500>
        </div>
        <div class="siderow">
          <label for="monthly">Monthly <br> contribution:</label>
          <input type="number" name="monthly" value=0>
        </div>
        <div class="siderow">
          <label for="nummonths">Number of <br> Months:</label>
          <input type="number" name="nummonths" value=12>
        </div>
        <div class="siderow" style="border-bottom:1px solid #3E1F47;">
          <label for="ror">Monthly Rate <br> of Return:</label>
          <input type="number" name="ror" value=1>
        </div>
        <div class="sidebarbuttons">
          <input type="button" value="Calculate" style="float:left;">
          <input type="button" value="Quit" style="float:right;">
        </div>
    
      </form>
    </div>

    【讨论】:

      【解决方案2】:

      该空间是由.siderow 中的 10px 填充造成的。我将填充更改为0 10px,它将顶部和底部填充设置为零,左/右设置为 10px。为了清楚起见,我还添加了min-width: 200px;.sidebar。你可能想改变它。多余的垂直空间已被移除。

      .sidebar {
        background-color: #272640;
        float: left;
        width: 20%;
        min-width: 200px;
        height: 100%;
        position: fixed;
        box-sizing: border-box;
        display: flex;
        flex-direction: column;
        border: 1px solid #3E1F47;
      }
      
      #sidebarCentered {
      }
      
      .siderow {
        background-color: #312244;
        border-top: 1px solid #3E1F47;
        color: white;
        padding: 0 10px; /* changed here */
        box-sizing: border-box;
        width: 50% text-align:center;
        font-family: monaco;
      }
      
      .siderow label {}
      
      .siderow input {
        box-sizing: border-box;
        background-color: #312244;
        border: 0px;
        height: 100%;
        border-left: 1px solid #5A5766;
        color: white;
        width: 50%;
        float: right;
        text-align: center;
      }
      
      .sidebarbuttons {
        background-color: #312244;
        margin-top: 10%;
      }
      
      .sidebarbuttons input {
        background-color: #312244;
        font-family: monaco;
        font-size: 15px;
        margin: 5px;
        width: 45%;
        color: white;
        padding: 10px;
        border: 1px solid #3E1F47;
        border-radius: 10px;
        transition: all ease-in-out 0.15s;
      }
      
      .sidebarbuttons input:hover {
        background-color: #272640;
        color: #272640;
        transition: all ease-in-out 0.15s;
      }
      
      #centermenu {
        background-color: #212F45;
        color: #EDFFEC;
        overflow: hidden;
        text-decoration: none;
        border-bottom: 1px solid #5A5766;
        box-sizing: border-box;
      }
      <div class="sidebar">
        <form id="sidebarCentered">
          <div class="siderow">
            <label for="balance">Balance:</label>
            <input type="number" name="balance" value=500>
          </div>
          <div class="siderow">
            <label for="monthly">Monthly <br> contribution:</label>
            <input type="number" name="monthly" value=0>
          </div>
          <div class="siderow">
            <label for="nummonths">Number of <br> Months:</label>
            <input type="number" name="nummonths" value=12>
          </div>
          <div class="siderow" style="border-bottom:1px solid #3E1F47;">
            <label for="ror">Monthly Rate <br> of Return:</label>
            <input type="number" name="ror" value=1>
          </div>
          <div class="sidebarbuttons">
            <input type="button" value="Calculate" style="float:left;">
            <input type="button" value="Quit" style="float:right;">
          </div>
      
        </form>
      </div>

      【讨论】:

        【解决方案3】:

        给 .siderow 填充 0 并为 .siderow 输入和 .siderow 标签添加高度。

        接下来,删除那些 br 标签并将 flex 添加到 .siderow 标签,这样它就可以在中间垂直对齐。另外,不要使用内联 css。

        总而言之,您将拥有这个:

        <div class="sidebar">
          <form id="sidebarCentered">
            <div class="siderow">
              <label for="balance">Balance:</label>
              <input type="number" name="balance" value=500>
            </div>
            <div class="siderow">
              <label for="monthly">Monthly contribution:</label>
              <input type="number" name="monthly" value=0>
            </div>
            <div class="siderow">
              <label for="nummonths">Number of Months:</label>
              <input type="number" name="nummonths" value=12>
            </div>
            <div class="siderow">
              <label for="ror">Monthly Rate of Return:</label>
              <input type="number" name="ror" value=1>
            </div>
            <div class="sidebarbuttons">
              <input type="button" value="Calculate" style="float:left;">
              <input type="button" value="Quit" style="float:right;">
            </div>
          </form>
        </div>
        

        和 CSS

        .sidebar {
          background-color: #272640;
          float: left;
          width: 400px;
          height: 100%;
          position: fixed;
          box-sizing: border-box;
          display: flex;
          flex-direction: column;
          border: 1px solid #5A5766;
        }
        
        #sidebarCentered {
        }
        
        .siderow {
          border-top: 1px solid #5A5766;
          color: white;
          padding: 0;
          box-sizing: border-box;
          width: 100%;
          text-align:center;
          font-family: monaco;
          height: auto;
          float: left;
        }
        
        .siderow:first-child {
          border-top: none;
        }
        
        .siderow:nth-child(4) {
          border-bottom: 1px solid #5A5766;
        }
        
        .siderow label {
          width: calc(50% - 5px);
          float: left;
          height: 40px;
          display: flex;
          align-items: center;
          margin-left: 5px;
        }
        
        .siderow input {
          box-sizing: border-box;
          background-color: #272640;
          border: 0;
          height: 100%;
          border-left: 1px solid #5A5766;
          color: white;
          width: 50%;
          float: left;
          text-align: center;
          height: 40px;
        }
        
        .sidebarbuttons {
          margin-top: 10%;
        }
        
        .sidebarbuttons input {
          background-color: #888;
          font-family: monaco;
          font-size: 15px;
          margin: 5px;
          width: 45%;
          color: white;
          padding: 10px;
          border: 1px solid #5A5766;
          border-radius: 10px;
          transition: all ease-in-out 0.15s;
        }
        
        .sidebarbuttons input:hover {
          background-color: #ccc;
          color: #272640;
          transition: all ease-in-out 0.15s;
        }
        
        #centermenu {
          background-color: #212F45;
          color: #EDFFEC;
          overflow: hidden;
          text-decoration: none;
          border-bottom: 1px solid #5A5766;
          box-sizing: border-box;
        }
        

        链接到 Fiddle 以供参考 https://jsfiddle.net/kavyw86d/

        【讨论】: