返回

原生 CSS + JS 实现一个标签输入框

前端

在当今快速发展的数字世界中,用户界面(UI)设计扮演着至关重要的角色。UI设计旨在通过优化用户与数字产品之间的交互,为用户创造直观、美观和高效的使用体验。其中,标签输入框作为一种常见的UI元素,在许多网站和应用程序中广泛使用。

标签输入框,顾名思义,就是允许用户输入并添加标签的输入框。标签可以用来分类、标记或信息,方便用户组织和查找内容。标签输入框在许多场景中都有应用,比如添加关键词、创建分类、收集反馈等。

本教程将从头开始指导您使用原生 CSS 和 JavaScript 实现一个标签输入框。我们将从了解标签输入框的基本原理和交互方式入手,逐步深入到具体的代码实现中。

原理和交互

标签输入框的原理非常简单。它是一个包含输入框和标签容器的容器元素。用户可以在输入框中输入内容,然后按回车键生成标签。生成的标签将被添加到标签容器中。用户还可以通过点击标签容器中的标签来删除它们。

以下是一些标签输入框常见的交互方式:

  • 点击输入框:激活输入框,允许用户输入内容。
  • 输入内容:在输入框中输入标签的内容。
  • 按回车键:生成标签。
  • 点击标签:选中标签。
  • 点击标签中的删除按钮:删除标签。

HTML 结构

在开始编写 CSS 和 JavaScript 代码之前,我们需要先定义标签输入框的 HTML 结构。标签输入框的 HTML 结构通常如下所示:

<div class="tags-input">
  <input type="text" placeholder="输入标签">
  <div class="tags-container"></div>
</div>

在这个 HTML 结构中,<div class="tags-input">是标签输入框的容器元素,<input type="text" placeholder="输入标签">是输入框,<div class="tags-container"></div>是标签容器。

CSS 代码

接下来,我们需要编写 CSS 代码来定义标签输入框的样式。以下是一些基本的 CSS 样式:

/* 标签输入框的容器元素 */
.tags-input {
  display: flex;
  align-items: center;
  width: 100%;
  border: 1px solid #ccc;
  border-radius: 5px;
  padding: 5px;
}

/* 输入框 */
.tags-input input {
  width: 100%;
  border: none;
  outline: none;
  font-size: 14px;
}

/* 标签容器 */
.tags-container {
  display: flex;
  flex-wrap: wrap;
  margin-left: 5px;
}

/* 标签 */
.tags-container .tag {
  display: inline-block;
  padding: 5px;
  border: 1px solid #ccc;
  border-radius: 5px;
  margin-right: 5px;
  margin-bottom: 5px;
  font-size: 14px;
  cursor: pointer;
}

/* 选中标签 */
.tags-container .tag.selected {
  background-color: #ccc;
}

/* 标签中的删除按钮 */
.tags-container .tag .delete-btn {
  display: inline-block;
  width: 10px;
  height: 10px;
  border: 1px solid #ccc;
  border-radius: 5px;
  margin-left: 5px;
  cursor: pointer;
}

JavaScript 代码

最后,我们需要编写 JavaScript 代码来实现标签输入框的交互。以下是一些基本的 JavaScript 代码:

// 获取标签输入框元素
const tagsInput = document.querySelector('.tags-input');

// 获取输入框元素
const input = tagsInput.querySelector('input');

// 获取标签容器元素
const tagsContainer = tagsInput.querySelector('.tags-container');

// 添加标签
const addTag = (e) => {
  // 如果按的是回车键
  if (e.key === 'Enter') {
    // 获取输入框中的值
    const value = input.value;

    // 如果输入框中的值不为空
    if (value) {
      // 创建一个标签元素
      const tag = document.createElement('div');
      tag.classList.add('tag');
      tag.textContent = value;

      // 创建一个删除按钮
      const deleteBtn = document.createElement('button');
      deleteBtn.classList.add('delete-btn');
      deleteBtn.textContent = '×';

      // 将删除按钮添加到标签中
      tag.appendChild(deleteBtn);

      // 将标签添加到标签容器中
      tagsContainer.appendChild(tag);

      // 清空输入框
      input.value = '';

      // 为标签添加点击事件监听器
      tag.addEventListener('click', () => {
        tag.classList.toggle('selected');
      });

      // 为删除按钮添加点击事件监听器
      deleteBtn.addEventListener('click', () => {
        tag.remove();
      });
    }
  }
};

// 为输入框添加键盘事件监听器
input.addEventListener('keydown', addTag);

这就是使用原生 CSS 和 JavaScript 实现标签输入框的全部代码了。希望本教程对您有所帮助。