输入附加组件

因为输入组件 CSS 的工作方式,几乎不可能在一个元素之前或之后附加另一个元素,并让它宽度自适应地占满剩余空间。

当前仅有的方法,要么知道输入组件的宽度,要么使用 display:table-cell ,后者有着自己的问题,尤其是绝对定位在跨浏览器时遭遇的困难。

有了 Flexbox 布局,所有的问题都烟消云散,并且代码也极其简单。此外,输入栏和输入附加组件默认同高。

前置附加组件

数量

后置附加组件

前置附加组件和后置附加组件

HTML 代码

<!-- appending -->
<div class="InputAddOn">
    <input class="InputAddOn-field" />
    <button class="InputAddOn-item"></button>
</div>

<!-- prepending -->
<div class="InputAddOn">
    <span class="InputAddOn-item"></span>
    <input class="InputAddOn-field" />
</div>

<!-- both -->
<div class="InputAddOn">
    <span class="InputAddOn-item"></span>
    <input class="InputAddOn-field" />
    <button class="InputAddOn-item"></button>
</div>

CSS 代码

.InputAddOn {
    display: flex;
}

.InputAddOn-field {
    flex: 1;
    /* field styles */
}

.InputAddOn-item {
    /* item styles */
}

在 Github 中查看这个 demo 中完整的输入附加组件 源代码