HTML, CSS 및 Javascript를 사용하여 태그 입력 상자 만들기

안녕 친구들, 오늘 이 블로그에서는 HTML, CSS 및 Javascript를 사용하여 태그 입력 상자를 만드는 방법을 배웁니다. 이전 블로그에서 how to create an input with a character limit using HTML, CSS, and Javascript을 보았습니다. 이제 태그 입력 상자를 만들 차례입니다. 이전에 javascript과 관련된 많은 프로젝트를 공유했으며 원하는 경우 확인할 수 있으며 확인하는 것을 잊지 마십시오 HTML, CSS, and Javascript projects .

태그 입력은 사용자가 입력 필드에 여러 항목을 태그로 추가하거나 삽입할 수 있는 사용자 인터페이스(UI) 구성 요소입니다. 위의 이미지에서 볼 수 있듯이 입력 상자가 있으며 입력을 클릭하면 테두리 색상이 변경됩니다. 입력에 태그를 추가하려면 무언가를 입력하고 ENTER 버튼 또는 SPACE 버튼을 누르면 텍스트가 태그로 변환됩니다.

다음을 좋아할 수 있습니다.


  • Responsive Personal Portfolio design
  • Filterable Image Gallery with preview
  • Random Password Generator
  • Google Drive Link Converter

  • 태그를 제거하려면 닫기 아이콘을 클릭하거나 백스페이스 버튼을 누르면 마지막 태그가 제거됩니다. 그러나 모든 태그를 제거하려면 모두 지우기 버튼을 클릭하여 제거할 수 있습니다.

    이해할 수 없거나 이해하기 어려운 경우 미리보기를 확인할 수 있습니다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()
    })
    

    좋은 웹페이지 즐겨찾기