HTML, CSS 및 Javascript를 사용하여 태그 입력 상자 만들기
8085 단어 incodercsshtmljavascript
태그 입력은 사용자가 입력 필드에 여러 항목을 태그로 추가하거나 삽입할 수 있는 사용자 인터페이스(UI) 구성 요소입니다. 위의 이미지에서 볼 수 있듯이 입력 상자가 있으며 입력을 클릭하면 테두리 색상이 변경됩니다. 입력에 태그를 추가하려면 무언가를 입력하고 ENTER 버튼 또는 SPACE 버튼을 누르면 텍스트가 태그로 변환됩니다.
다음을 좋아할 수 있습니다.
태그를 제거하려면 닫기 아이콘을 클릭하거나 백스페이스 버튼을 누르면 마지막 태그가 제거됩니다. 그러나 모든 태그를 제거하려면 모두 지우기 버튼을 클릭하여 제거할 수 있습니다.
이해할 수 없거나 이해하기 어려운 경우 미리보기를 확인할 수 있습니다here.
HTML 코드
<!-- --------------------- Created By InCoder --------------------- -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<link rel="stylesheet" href="main.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css">
</head>
<body>
<div class="container">
<div class="wrapper">
<div class="header">
<i class="fa-solid fa-tags"></i>
<h3>Tags</h3>
</div>
<div class="body">
<p>Press enter or add comma after each tag.</p>
<div class="input-form">
<ul>
<input type="text" placeholder="Add Tags">
</ul>
</div>
</div>
<div class="footer">
<button class="clearAll">Clear All</button>
</div>
</div>
</div>
<script src="script.js"></script>
</body>
</html>
CSS 코드
/* --------------------- Created By InCoder --------------------- */
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
*{
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
}
::selection{
color: #fff;
background-color: #fab759;
}
.container{
display: flex;
height: 100vh;
align-items: center;
justify-content: center;
background: linear-gradient(216deg, #fab759, #ec9e3e);
}
.container .wrapper{
width: 20rem;
padding: 0 .2rem;
background: #fff;
border-radius: .5rem;
color: rgb(0 0 0 / 90%);
}
.container .wrapper .header {
display: flex;
margin-top: .4rem;
margin-left: .8rem;
align-items: center;
color: rgb(0 0 0 / 90%);
}
.container .wrapper .header i {
margin-right: .2rem;
}
.container .wrapper .body p {
font-size: .8rem;
margin-left: .8rem;
}
.input-form ul {
cursor: text;
display: flex;
flex-wrap: wrap;
padding: 0 .4rem;
align-items: center;
margin: .4rem .4rem;
border-radius: .4rem;
transition: border .2s ease-in-out;
border: 2px solid rgb(0 0 0 / 30%);
}
.input-form ul li {
margin: .4rem .2rem;
list-style: none;
padding: .2rem .4rem;
border-radius: .3rem;
background: rgb(0 0 0 / 10%);
}
.input-form ul li i {
cursor: pointer;
border-radius: 50rem;
padding: .2rem .3rem;
color: rgb(0 0 0 / 50%);
}
.input-form ul li i:hover {
background: rgb(0 0 0 / 10%);
}
.input-form ul.focus {
border: 2px solid #ec9e3e;
}
.input-form ul input {
flex: 1;
height: 2rem;
border: none;
outline: none;
}
.clearAll{
border: 0;
float: right;
color: #fff;
cursor: pointer;
font-size: .9rem;
margin-top: .2rem;
margin-right: 1rem;
padding: .4rem 1rem;
border-radius: .4rem;
margin-bottom: .6rem;
background: rgb(236 158 62 / 90%);
transition: color .2s ease-in-out, background .2s ease-in-out;
}
.clearAll:hover {
background: rgb(236 158 62 / 100%);
}
.clearAll:focus {
outline-offset: 2px;
background: rgb(236 158 62);
outline: 2px solid rgb(236 158 62);
}
자바스크립트 코드
// --------------------- Created By InCoder ---------------------
let inputForm = document.querySelector('.input-form')
input = document.querySelector('.input-form input')
ul = document.querySelector('.input-form ul')
input.addEventListener('focus', () => {
inputForm.querySelector('ul').classList.toggle('focus')
})
inputForm.addEventListener('click', () => {
input.focus()
inputForm.querySelector('ul').classList.add('focus')
})
document.addEventListener('click', (e) => {
if (e.target != input) inputForm.querySelector('ul').classList.remove('focus')
})
let tags = []
const createNewTag = () => {
ul.querySelectorAll("li").forEach(li => li.remove());
tags.slice().reverse().forEach(tag => {
let LI = `<li>${tag} <i class="fa-solid fa-times" onClick="removeTag(this, '${tag}')"></i></li>`
ul.insertAdjacentHTML('afterbegin', LI)
})
}
const addTag = (e) => {
if (e.key == 'Enter' || e.keyCode == 32) {
let tag = e.target.value.replace(/\s+/g, ' ')
if (tag.length > 1 && !tags.includes(tag)) {
tag.split(',').forEach(tag => {
tags.push(tag)
createNewTag()
})
}
e.target.value = ''
}
if (e.target.value.length > 0) return
if (e.key == 'Backspace') {
tags = [...tags.slice(0, tags.length - 1)];
ul.querySelectorAll("li").forEach(li => li.remove())
createNewTag()
}
}
const removeTag = (elem, tag) => {
let index = tags.indexOf(tag);
tags = [...tags.slice(0, index), ...tags.slice(index + 1)];
elem.parentElement.remove();
}
input.addEventListener('keyup', (e) => addTag(e))
clearAll = document.querySelector('.clearAll')
clearAll.addEventListener('click', () => {
tags = []
createNewTag()
})
Reference
이 문제에 관하여(HTML, CSS 및 Javascript를 사용하여 태그 입력 상자 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/incoderweb/create-tag-input-box-using-html-css-and-javascript-hi6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)