코드 질문드립니다.

코드 질문드립니다.

작성일 2023.09.26댓글 1건
    게시물 수정 , 삭제는 로그인 필요

<!DOCTYPE html>
<html lang="kr">

<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>TMEROOM</title>
    <link rel="stylesheet" href="style.css">
</head>

<body>

    <header>
        <h2 class="logo">TMEROOM</h2>
        <nav class="navigation">
            <a href="#">Home</a>
            <a href="#">About</a>
            <a href="#">Services</a>
            <a href="#">Contact</a>
            <button class="btnLogin-popup">로그인</button>
        </nav>
    </header>

    <div class="wrapper">
        <span class="icon-close">
            <ion-icon name="close"></ion-icon>
        </span>

        <div class="form-box login">
            <h2>로그인</h2>
            <form action="#">
                <div class="input-box">
                    <span class="icon">
                        <ion-icon name="mail"></ion-icon>
                    </span>
                    <input type="text" required>
                    <label>아이디</label>
                </div>
                <div class="input-box">
                    <span class="icon">
                        <ion-icon name="lock-closed"></ion-icon>
                    </span>
                    <input type="password" required>
                    <label>비밀번호</label>
                </div>
                <div class="remember-forgot">
                    <label><input type="checkbox"> 로그인 유지</label>
                    <a href="#">비밀번호를 잊어버리셨나요?</a>
                </div>
                <button type="submit" class="btn">로그인</button>
                <div class="login-register">
                    <p>계정이 없으신가요? <a href="#" class="register-link">생성하기</a></p>
                </div>
            </form>
        </div>

        <div class="form-box register">
            <h2>계정 생성</h2>
            <form action="#">
                <div class="input-box">
                    <span class="icon">
                        <ion-icon name="person"></ion-icon>
                    </span>
                    <input type="text" required>
                    <label>계정명</label>
                </div>
                <div class="input-box">
                    <span class="icon">
                        <ion-icon name="mail"></ion-icon>
                    </span>
                    <input type="email" required>
                    <label>이메일</label>
                </div>
                <div class="input-box">
                    <span class="icon">
                        <ion-icon name="lock-closed"></ion-icon>
                    </span>
                    <input type="password" required>
                    <label>비밀번호</label>
                </div>
                <div class="remember-forgot">
                    <label><input type="checkbox"> I agree to the terms & conditions</label>
                </div>
                <button type="submit" class="btn">생성하기</button>
                <div class="login-register">
                    <p>Already have an account? <a href="#" class="login-link">Login</a></p>
                </div>
            </form>
        </div>
    </div>

    <div class="form-box find">
        <h2>계정 찾기</h2>
        <form action="#">
            <div class="input-box">
                <span class="icon">
                    <ion-icon name="person"></ion-icon>
                </span>
                <input type="text" required>
                <label>계정명</label>
            </div>
            <div class="input-box">
                <span class="icon">
                    <ion-icon name="mail"></ion-icon>
                </span>
                <input type="email" required>
                <label>이메일</label>
            </div>
            <button type="submit" class="btn">찾기</button>
            <div class="login-register">
            </div>
        </form>
    </div>
</div>
    <script src="script.js"></script>
    <script type="module" src="https://unpkg.com/[email protected]/dist/ionicons/ionicons.esm.js"></script>
    <script nomodule src="https://unpkg.com/[email protected]/dist/ionicons/ionicons.js"></script>
</body>

</html>

@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700;800;900&display=swap');

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: 'Poppins', sans-serif;
}

body {
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    background: url('background.png') no-repeat;
    background-size: cover;
    background-position: center;
}

header {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    padding: 20px 100px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    z-index: 99;
}

.logo {
    font-size: 2em;
    color: #fff;
    user-select: none;
    background: url('logo.png') no-repeat;
}

.navigation a {
    position: relative;
    font-size: 1.1em;
    color: #fff;
    text-decoration: none;
    font-weight: 500;
    margin-left: 40px;
}

.navigation a::after {
    content: '';
    position: absolute;
    left: 0;
    bottom: -6px;
    width: 100%;
    height: 3px;
    background: #fff;
    border-radius: 5px;
    transform-origin: right;
    transform: scaleX(0);
    transition: transform .5s;
}

.navigation a:hover::after {
    transform-origin: left;
    transform: scaleX(1);
}

.navigation .btnLogin-popup {
    width: 130px;
    height: 50px;
    background: transparent;
    border: 2px solid #fff;
    outline: none;
    border-radius: 6px;
    cursor: pointer;
    font-size: 1.1em;
    color: #fff;
    font-weight: 500;
    margin-left: 40px;
    transition: .5s;
}

.navigation .btnLogin-popup:hover {
    background: #fff;
    color: #162938;
}

.wrapper {
    position: relative;
    width: 400px;
    height: 440px;
    background: transparent;
    border: 2px solid rgba(255, 255, 255, .5);
    border-radius: 20px;
    backdrop-filter: blur(20px);
    box-shadow: 0 0 30px rgba(0, 0, 0, .5);
    display: flex;
    justify-content: center;
    align-items: center;
    overflow: hidden;
    transform: scale(0);
    transition: transform .5s ease, height .2s ease;
}

.wrapper.active-popup {
    transform: scale(1);
}

.wrapper.active {
    height: 520px;
}

.wrapper .form-box {
    width: 100%;
    padding: 40px;
}

.wrapper .form-box.login {
    transition: transform .18s ease;
    transform: translateX(0);
}

.wrapper.active .form-box.login {
    transition: none;
    transform: translateX(-400px);
}

.wrapper .form-box.register {
    position: absolute;
    transition: none;
    transform: translateX(400px);
}

.wrapper.active .form-box.register {
    transition: transform .18s ease;
    transform: translateX(0);
}

.wrapper .icon-close {
    position: absolute;
    top: 0;
    right: 0;
    width: 45px;
    height: 45px;
    background: #162938;
    font-size: 2em;
    color: #fff;
    display: flex;
    justify-content: center;
    align-items: center;
    border-bottom-left-radius: 20px;
    cursor: pointer;
    z-index: 1;
}

.form-box h2 {
    font-size: 2em;
    color: #162938;
    text-align: center;
}

.input-box {
    position: relative;
    width: 100%;
    height: 50px;
    border-bottom: 2px solid #162938;
    margin: 30px 0;
}

.input-box label {
    position: absolute;
    top: 50%;
    left: 5px;
    transform: translateY(-50%);
    font-size: 1em;
    color: #162938;
    font-weight: 500;
    pointer-events: none;
    transition: .5s;
}

.input-box input:focus~label,
.input-box input:valid~label {
    top: -5px;
}

.input-box input {
    width: 100%;
    height: 100%;
    background: transparent;
    border: none;
    outline: none;
    font-size: 1em;
    color: #162938;
    font-weight: 600;
    padding: 0 35px 0 5px;
}

.input-box .icon {
    position: absolute;
    right: 8px;
    font-size: 1.2em;
    color: #162938;
    line-height: 57px;
}

.remember-forgot {
    font-size: .9em;
    color: #162938;
    font-weight: 500;
    margin: -15px 0 15px;
    display: flex;
    justify-content: space-between;
}

.remember-forgot label input {
    accent-color: #162938;
    margin-right: 3px;
}

.remember-forgot a {
    color: #162938;
    text-decoration: none;
}

.remember-forgot a:hover {
    text-decoration: underline;
}

.btn {
    width: 100%;
    height: 45px;
    background: #162938;
    border: none;
    outline: none;
    border-radius: 6px;
    cursor: pointer;
    font-size: 1em;
    color: #fff;
    font-weight: 500;
}

.login-register {
    font-size: .9em;
    color: #162938;
    text-align: center;
    font-weight: 500;
    margin: 25px 0 10px;
}

.login-register p a {
    color: #162938;
    text-decoration: none;
    font-weight: 600;
}

.login-register p a:hover {
    text-decoration: underline;
}


<script>
const wrapper = document.querySelector('.wrapper');
const loginLink = document.querySelector('.login-link');
const registerLink = document.querySelector('.register-link');
const btnPopup = document.querySelector('.btnLogin-popup');
const iconClose = document.querySelector('.icon-close');

registerLink.addEventListener('click', ()=> {
    wrapper.classList.add('active');
});

loginLink.addEventListener('click', ()=> {
    wrapper.classList.remove('active');
});

btnPopup.addEventListener('click', ()=> {
    wrapper.classList.add('active-popup');
});

iconClose.addEventListener('click', ()=> {
    wrapper.classList.remove('active-popup');
    wrapper.classList.remove('active');
});


계정찾기도 모달로 나오게 하고 싶은데 어떻게 수정해야하나요?



profile_image 익명 작성일 -

옆으로 이동되는 슬라이드형식 애니메이션이 들어가는 모션은 앱에서 보통 사용합니다

그렇기에 웹에서 해당 모션을 구현한다면 애니메이션을 좀 더 쉽게 구현 가능한 gsap라이브러리를 이용하면 코드량도 간결하고 상대적으로 쉽게 구현이 가능합니다

예시 코드 남겨드립니다

<!DOCTYPE html> <html lang="kr"> <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>TMEROOM</title> <link rel="stylesheet" href="style.css"> <style> @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700;800;900&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Poppins', sans-serif; } body { display: flex; justify-content: center; align-items: center; min-height: 100vh; background: url('background.png') no-repeat; background-size: cover; background-position: center; } header { position: fixed; top: 0; left: 0; width: 100%; padding: 20px 100px; display: flex; justify-content: space-between; align-items: center; z-index: 99; } .logo { font-size: 2em; color: #fff; user-select: none; background: url('logo.png') no-repeat; } .navigation a { position: relative; font-size: 1.1em; color: #fff; text-decoration: none; font-weight: 500; margin-left: 40px; } .navigation a::after { content: ''; position: absolute; left: 0; bottom: -6px; width: 100%; height: 3px; background: #fff; border-radius: 5px; transform-origin: right; transform: scaleX(0); transition: transform .5s; } .navigation a:hover::after { transform-origin: left; transform: scaleX(1); } .navigation .btnLogin-popup { width: 130px; height: 50px; background: transparent; border: 2px solid #fff; outline: none; border-radius: 6px; cursor: pointer; font-size: 1.1em; color: #fff; font-weight: 500; margin-left: 40px; transition: .5s; } .navigation .btnLogin-popup:hover { background: #fff; color: #162938; } .wrapper { position: relative; width: 400px; height: 440px; background: transparent; border: 2px solid rgba(255, 255, 255, .5); border-radius: 20px; backdrop-filter: blur(20px); box-shadow: 0 0 30px rgba(0, 0, 0, .5); display: flex; justify-content: center; align-items: center; overflow: hidden; transform: scale(0); transition: transform .5s ease, height .2s ease; } .wrapper.active-popup { transform: scale(1); } .wrapper.active { height: 520px; } .wrapper .form-box { position: absolute; left: 100%; width: 100%; padding: 40px; } .wrapper .icon-close { position: absolute; top: 0; right: 0; width: 45px; height: 45px; background: #162938; font-size: 2em; color: #fff; display: flex; justify-content: center; align-items: center; border-bottom-left-radius: 20px; cursor: pointer; z-index: 1; } .form-box h2 { font-size: 2em; color: #162938; text-align: center; } .input-box { position: relative; width: 100%; height: 50px; border-bottom: 2px solid #162938; margin: 30px 0; } .input-box label { position: absolute; top: 50%; left: 5px; transform: translateY(-50%); font-size: 1em; color: #162938; font-weight: 500; pointer-events: none; transition: .5s; } .input-box input:focus~label, .input-box input:valid~label { top: -5px; } .input-box input { width: 100%; height: 100%; background: transparent; border: none; outline: none; font-size: 1em; color: #162938; font-weight: 600; padding: 0 35px 0 5px; } .input-box .icon { position: absolute; right: 8px; font-size: 1.2em; color: #162938; line-height: 57px; } .remember-forgot { font-size: .9em; color: #162938; font-weight: 500; margin: -15px 0 15px; display: flex; justify-content: space-between; } .remember-forgot label input { accent-color: #162938; margin-right: 3px; } .remember-forgot a { color: #162938; text-decoration: none; } .remember-forgot a:hover { text-decoration: underline; } .btn { width: 100%; height: 45px; background: #162938; border: none; outline: none; border-radius: 6px; cursor: pointer; font-size: 1em; color: #fff; font-weight: 500; } .login-register { font-size: .9em; color: #162938; text-align: center; font-weight: 500; margin: 25px 0 10px; } .login-register p a { color: #162938; text-decoration: none; font-weight: 600; } .login-register p a:hover { text-decoration: underline; } </style> </head>
<body> <header> <h2 class="logo">TMEROOM</h2> <nav class="navigation"> <a href="#">Home</a> <a href="#">About</a> <a href="#">Services</a> <a href="#">Contact</a> <button class="btnLogin-popup">로그인</button> </nav> </header> <div class="wrapper active-popup"> <span class="icon-close"> <ion-icon name="close"></ion-icon> </span> <div class="form-box login active"> <h2>로그인</h2> <form action="#"> <div class="input-box"> <span class="icon"> <ion-icon name="mail"></ion-icon> </span> <input type="text" required> <label>아이디</label> </div> <div class="input-box"> <span class="icon"> <ion-icon name="lock-closed"></ion-icon> </span> <input type="password" required> <label>비밀번호</label> </div> <div class="remember-forgot"> <label><input type="checkbox"> 로그인 유지</label> <a href="#">비밀번호를 잊어버리셨나요?</a> </div> <button type="submit" class="btn">로그인</button> <div class="login-register"> <p>계정이 없으신가요? <a href="#" class="register-link">생성하기</a></p> </div> </form> </div> <div class="form-box register"> <h2>계정 생성</h2> <form action="#"> <div class="input-box"> <span class="icon"> <ion-icon name="person"></ion-icon> </span> <input type="text" required> <label>계정명</label> </div> <div class="input-box"> <span class="icon"> <ion-icon name="mail"></ion-icon> </span> <input type="email" required> <label>이메일</label> </div> <div class="input-box"> <span class="icon"> <ion-icon name="lock-closed"></ion-icon> </span> <input type="password" required> <label>비밀번호</label> </div> <div class="remember-forgot"> <label><input type="checkbox"> I agree to the terms & conditions</label> </div> <button type="submit" class="btn">생성하기</button> <div class="login-register"> <p>Already have an account? <a href="#" class="login-link">Login</a></p> </div> </form> </div> <div class="form-box find"> <h2>계정 찾기</h2> <form action="#"> <div class="input-box"> <span class="icon"> <ion-icon name="person"></ion-icon> </span> <input type="text" required> <label>계정명</label> </div> <div class="input-box"> <span class="icon"> <ion-icon name="mail"></ion-icon> </span> <input type="email" required> <label>이메일</label> </div> <button type="submit" class="btn">찾기</button> <div class="login-register"> </div> </form> </div> </div> </div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js" integrity="sha512-cOH8ndwGgPo+K7pTvMrqYbmI8u8k6Sho3js0gOqVWTmQMlLIi6TbqGWRTpf1ga8ci9H3iPsvDLr4X7xwhC/+DQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script> const wrapper = document.querySelector('.wrapper'); const formBoxs = document.querySelectorAll('.form-box'); const loginLink = document.querySelector('.login-link'); const registerLink = document.querySelector('.register-link'); const btnPopup = document.querySelector('.btnLogin-popup'); const iconClose = document.querySelector('.icon-close'); const forgotLink = document.querySelector('.remember-forgot a'); init(); function init(){ const initEl = '.form-box.login'; gsap.set(initEl,{'xPercent':-100},{'xPercent':0}); document.querySelector(initEl).classList.add('on'); popupHgt(initEl); } function popupTo(el){ gsap.fromTo(el,{'xPercent':0},{'xPercent':-100}); formBoxs.forEach(t=>{t.classList.remove('on')}); document.querySelector(el).classList.add('on'); popupHgt(el); } function popupFrom(el){ gsap.fromTo(el,{'xPercent':-100},{'xPercent':-200}); } function popupHgt(el = '.form-box.on'){ const hgt = document.querySelector(el).clientHeight; gsap.to(wrapper,{'height':hgt,duration: 0.2}); } window.addEventListener('resize',()=>{ popupHgt(); }); registerLink.addEventListener('click', ()=> { popupFrom('.form-box.login'); popupTo('.form-box.register'); }); loginLink.addEventListener('click', ()=> { popupFrom('.form-box.register'); popupTo('.form-box.login'); }); forgotLink.addEventListener('click', ()=> { popupFrom('.form-box.login'); popupTo('.form-box.find'); }); btnPopup.addEventListener('click', ()=> { wrapper.classList.add('active-popup'); }); iconClose.addEventListener('click', ()=> { wrapper.classList.remove('active-popup'); wrapper.classList.remove('active'); }); </script> <script type="module" src="https://unpkg.com/[email protected]/dist/ionicons/ionicons.esm.js"></script> <script nomodule src="https://unpkg.com/[email protected]/dist/ionicons/ionicons.js"></script> </body> </html>

워드프레스 CSS코드 질문드립니다.

워드프레스 CSS코드 질문드립니다. 워드프레스 블로그하거든요 테마는 GeneratePress (무료)버전이구요.. 본문에 태그 없애는 CSS코드를 알고싶습니다 ㅠㅠ 제가...

C언어 디버깅 코드 질문드립니다.

코드를 디버깅하고 문자열을 입력하면 가로로 증가되는데 이거를 가로가 아니라 세로로 증가되려면 코드... ㅠㅠ while 루프 안을 다음 코드로 대체하시면 되겠습니다 ""

미트리 추천인코드 질문

미트리 추천인코드 질문입니다. 미트리 사이트 회원가입 하려고 하니까 미트리... 미트리 추천인코드 좀 부탁 드립니다. 미트리 추천인코드 문의글에 답변 드립니다. 미트리...

HS코드 질문드립니다.

... 두가지 원단의 HS코드질문드립니다. 안녕하십니까 한국관세사회-네이버 지식iN 관세사 임형철 입니다. 원단은 혼용율, 염색, 날염여부, 제곱미터당 중량 등을 알아야...

미트리 추천인코드 질문드립니다.

미트리 추천인코드 알고있어야지만 회원가입이 완료된다고 나와있어서 질문드립니다. 뭘 적어야될지 몰라서 아직 회원가입을 진행못한 상태인데 인터넷에 검색해보니까...