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

为什么浏览器不像其他元素那样布局绝对定位的输入元素?[重复]

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

    请看演示的片段。

    我试图弄明白为什么浏览器不按照应用于其他元素的绝对定位规则来布局输入元素。我特别在CSS/HTML规范中寻找这种行为的正当性。

    .colorPicker {
      box-sizing: border-box;
      width: 100px;
      height: 100px;
      border: 2px solid red;
      position: relative;
      overflow: hidden;
    }
    
    .colorPicker * {
      display: block;
      position: absolute;
      top: 5px;
      left: 5px;
      bottom: 5px;
      right: 5px;
    }
    <p>div is positioned correctly</p>
    <div class="colorPicker">
      <div style="background: blue"></div>
    </div>
    
    <p>'color' input is not sized at all</p>
    <div class="colorPicker">
      <input type="color" />
    </div>
    
    <p>'text' input is too wide</p>
    <div class="colorPicker">
      <input type="text" />
    </div>
    
    <p>'button' input is not wide enough</p>
    <div class="colorPicker">
      <input type="button" />
    </div>
    1 回复  |  直到 5 年前
        1
  •  0
  •   Liftoff    5 年前

    您可以应用 width / height / box-sizing 对于不能仅使用定位属性自动调整大小的元素。

    .colorPicker * {
      /* continued */
      width: calc(100% - 10px);
      height: calc(100% - 10px);
      
      box-sizing: border-box;
    }
    

    .colorPicker {
      box-sizing: border-box;
      width: 100px;
      height: 100px;
      border: 2px solid red;
      position: relative;
      overflow: hidden;
    }
    
    .colorPicker * {
      display: block;
      position: absolute;
      top: 5px;
      left: 5px;
      bottom: 5px;
      right: 5px;
      width: calc(100% - 10px);
      height: calc(100% - 10px);
      
      box-sizing: border-box;
    }
    <p>div is positioned correctly</p>
    <div class="colorPicker">
      <div style="background: blue"></div>
    </div>
    
    <p>'color' input is not sized at all</p>
    <div class="colorPicker">
      <input type="color" />
    </div>
    
    <p>'text' input is too wide</p>
    <div class="colorPicker">
      <input type="text" />
    </div>
    
    <p>'button' input is not wide enough</p>
    <div class="colorPicker">
      <input type="button" />
    </div>