原生CSS+JS实现一个标签输入框
时间:2023-03-20 01:31:09
科技观察
最近在项目中需要做一个标签输入框,比较实用。演示效果如下:主要交互需求如下:点击输入框输入内容。按Enter生成标签。按退格键删除标签。单击标签上的关闭按钮可删除标签。我习惯了各种React框架或UI库。你有多久没有接触原生开发了?有时候页面比较简单,不需要引入完整的框架。本机实现完全令人满意。让我们来看看!1.自适应输入框布局无论是什么组件,布局都是最重要的。这个布局分为标签和输入框两部分。假设HTML如下:CSS
简单修改:.tags-content{display:flex;弹性包装:包装;对齐项目:弹性启动;间隙:6px;宽度:400px;框大小:边框框;填充:8px12px;边框:1px实心#D9D9D9;边界半径:4px;字体大小:16px;行高:24px;#4F46E5;溢出:自动;光标:文本;}标签{显示:弹性;对齐项目:居中;填充:4px04px8px;字体大小:16px;行高:24px;背景:#F5F5F5;rgba(0,0,0,0.85);cursor:default;}tag-close{width:18px;高度:18px;游标:指针;background:url("data:image/svg+xml,%3Csvgwidth='10'height='10'viewBox='001010'fill='none'xmlns='http://www.w3.org/2000/svg'%3E%3Cpathd='M5.5785l2.93-3.493a.089.089000-.068-.146h-.891a.182.182000-.137.064l-2.4172.88-2.416-2.88a.178.178000-.137-.064h-.89a.089.089000-.069.146L4.4135l-2.933.493a.089.089000.068.146h.89a.182.182000.138-.064l2.416-2.882.4172.88c.033.04.083.064-134.69l2.93-3.493z'fill='%23000'fill-opacity='.45'/%3E%3C/svg%3E")centerno-repeat;}.tags-input{flex:auto;border:0;outline:0;padding:4px0;line-height:24px;font-size:16px;}.}注意一些实现技巧:标签之间的空隙可以通过gap来实现。为了使面积inputbox填充剩余空间,这里使用flex:auto。为了让parent保持焦点,这里使用:focus-within。效果如下:但是这里的inputbox还是有一些问题,如如下图:由于input的输入内容不能跟随宽度适配,所以有时文本会被截断:理想情况下,当输入内容较多时,应该作为一个整体换行。如何实现晚上吗?用普通的div就可以实现。
CSS