具有可变宽度输入的固定宽度元素

Fixed width element with variable width input

您可能会说之前有人问过这个问题,但这是一个带有错误的变体。所以我们都知道用来回答这个问题的技术: Fixed width div on left, fill remaining width div on right

但是,如果可变宽度元素是输入标签,这将不起作用。

http://jsfiddle.net/8pk4K/2050/

即使覆盖默认输入 css 也无法解决此问题:

display: block;
overflow:hidden; 
background-color:green;
height: 100px;
width: auto;

我已经玩这个很久了,它只发生在输入标签上,如果你用一个跨度替换它(默认显示内联但将它设置为显示块)它仍然有效。

知道为什么这只适用于输入标签而没有别的吗?

编辑: 为了澄清起见,我知道解决这个问题的方法是将输入放入 div 并将宽度 100% 应用于输入。我的问题是为什么这是必要的,而不是如何解决它。

尝试为 .header 和 .header-right 添加宽度(以 % 为单位)。 喜欢

.header{
width:20%;
}
.header-right{
width:80%;
}

您可以使用 calc 来生成您想要的宽度,因为输入是替换元素,具有与图像一样的固有尺寸

CSS

.header-right{
    display: block;
    overflow:hidden; 
    background-color:green;
    height: 100px;
    border: none;
    width: calc(100% - 240px); //Add this
    }

注意:您必须给 select 一个尺寸(宽度),否则给您默认的浏览器宽度

DEMO HERE

我知道这个问题,表单元素的样式总是很麻烦。

我想出了这个解决方法,将输入包装在右边 div。

<div class="header"></div>
<div class="header-right">
    <input type="text" />
</div>
.header{
    float:left;
    background: #efefef;
    background-repeat: no-repeat;
    width: 240px;
    height: 100px;
    }

.header-right{
    overflow:hidden; 
    background-color:#000;
    height: 100px;
    position: relative;
    }
.header-right input {
    background: green;
    position: absolute;
    width: 100%;
    height: 100%;
}

JSFiddle