能否在HTML的input标签中添加下拉菜单以实现响应式表单需求?
需求可以实现,但不能直接在<input>标签内部嵌入元素,需要通过CSS视觉模拟达到相同效果
原生<input>是单标签,不支持嵌套子元素,你要的input内嵌下拉菜单的效果(参考下图)可以通过容器包裹、定位模拟的方式实现:
实现思路
- 把输入框、下拉触发控件、下拉菜单都放在同一个父容器内,父容器样式模拟成输入框的外观,从视觉上看起来是一个整体
- 下拉菜单使用绝对定位吸附在父容器对应位置,通过CSS控制点击/hover时的显隐
- 响应式适配只要给父容器设置百分比宽度、最大宽度等规则即可适配不同设备尺寸
你当前的代码可以调整为以下结构实现需求:
<!-- 新增父容器包裹所有元素 --> <div class="pay-input-wrapper"> <input type="number" class="form_input" id="pay" placeholder=""> <!-- 下拉选择控件 --> <div class="dropdown-trigger"> <span>USD</span> <ul class="dropdown-list"> <li>USD</li> <li>EUR</li> <li>CNY</li> </ul> </div> <label for="pay" class="form_label_pay">you pay</label> </div>
.pay-input-wrapper { position: relative; display: inline-flex; align-items: center; border: 1px solid #ddd; border-radius: 6px; padding: 0 12px; width: 100%; max-width: 360px; } .form_input { border: none; outline: none; padding: 10px 0; flex: 1; background: transparent; } .dropdown-trigger { position: relative; padding-left: 12px; border-left: 1px solid #ddd; cursor: pointer; } .dropdown-list { position: absolute; top: calc(100% + 4px); right: 0; list-style: none; margin: 0; padding: 4px 0; border: 1px solid #ddd; border-radius: 4px; width: 80px; background: #fff; display: none; } /* hover触发显示下拉,也可以加JS实现点击触发 */ .dropdown-trigger:hover .dropdown-list { display: block; } .dropdown-list li { padding: 6px 12px; } .dropdown-list li:hover { background: #f5f5f5; }
如果需要更复杂的交互逻辑,比如点击选择后回填内容、点击其他区域关闭下拉,加少量JS即可实现。
内容的提问来源于stack exchange,提问作者Suhem Bali
相关产品推荐
相关产品推荐

