Front-End/HTML

로그인 화면 버튼 구현

hyeeoooook 2025. 11. 21. 20:19

 

<body>
    <!--이미지 파일-->
    <div class="main_image">
        <p style="text-align: center;"><img src="./cookie.jpg" width="200"></p>
    </div>
    <!--로그인 텍스트-->
    <div class="login_h">
        <h2><b><p style="text-align: center; color: black;">HTML 태그가 뭐야?</p></b></h2>
    </div>

    <div class="login-email">
        <!--이메일-->
        <p style="text-align: center;"><input type="text" placeholder="E-mail"></p>
    </div>

    <div class="login-pw">
        <!--패스워드-->
        <p style="text-align: center;"><input type="password" placeholder="PW"></p>
    </div>

    <!-- form사용 = 이후에 데이터를 제출하기 위해서 미리 도안화 -->
    <form>
        <!--로그인 버튼 / 회원가입 버튼(예정)-->
        <p style="text-align: center;">
            <a style="text-align: center;"><button id="btn_register">회원가입</button></a>
            <a style="text-align: center;"><button id="btn_login">로그인</button></a>
        </p>
    </form>

    <!-- 버튼 눌림 감지 -->
    <script>
        const loginButton = document.getElementById("btn_login");

        loginButton.addEventListener("click", () => {
            alert("하이");
            }
        );
    </script>
</body>

 

위의 코드는 내가 작성한 코드이다.

하지만 몇 가지 문제점이 있음을 발견, 그것은 form 태그와 div 태그의 구조가 적절하지 않다는 것이다.

해당사항을 변경해 보겠다.

문제점
1. form은 보통 input과 버튼을 함께 감싸야함
2. <p>안에 <botton>을 넣는 건 가능하지만 의미적으로 <p>는 문단용, 버튼을 감쌀 필요는 없다.
3. <a>안에 <botton>은 옳지 않음, <botton>자체가 클릭 가능한 요소이기 때문에 <a>로 감싸면 중첩의 의미가 혼동된다.

 


코드 변경

<body>
    <!--이미지 파일-->
    <div class="main_image">
        <p style="text-align: center;"><img src="./cookie.jpg" width="200"></p>
    </div>
    <!--로그인 텍스트-->
    <div class="login_h">
        <h2><b><p style="text-align: center; color: black;">HTML 태그가 뭐야?</p></b></h2>
    </div>

    <!-- form사용 = 이후에 데이터를 제출하기 위해서 미리 도안화 -->
    <form id="login_form" style="text-align: center;"><!--form으로 이메일, 패스워드를 감쌈-->
        
        <!--이메일-->
        <div class="login-email">
            <input type="text" placeholder="E-mail">
        </div>

        <!--패스워드-->
        <div class="login-pw">
            <input type="password" placeholder="PW">
        </div>

        <!--로그인 버튼 / 회원가입 버튼(예정)-->
        <p style="text-align: center;">
            <button id="btn_register">회원가입</button>
            <button id="btn_login">로그인</button>
        </p>
    </form>

    <!-- 버튼 눌림 감지 -->
    <script>
        const loginButton = document.getElementById("btn_login");

        loginButton.addEventListener("click", () => {
            alert("하이");
            }
        );
    </script>
</body>

 

 

자세히 뜯어서 보자.

1. form은 보통 input과 버튼을 함께 감싸야함

2. <p>안에 <botton>을 넣는 건 가능하지만 의미적으로 <p>는 문단용, 버튼을 감쌀 필요는 없다.
3. <a>안에 <botton>은 옳지 않음, <botton> 자체가 클릭 가능한 요소이기 때문에 <a>로 감싸면 중첩의 의미가 혼동된다.

<!-- form사용 = 이후에 데이터를 제출하기 위해서 미리 도안화 -->
<!-- form으로 모두 엮은 모습-->
    <form id="login_form" style="text-align: center;"><!--form으로 이메일, 패스워드를 감쌈-->
        
        <!--기존 이메일-->
        <div class="login-email">
        <p style="text-align: center;"><input type="text" placeholder="E-mail"></p>
  	    </div>
        
        <!--변경 이메일-->
        <div class="login-email">
            <input type="text" placeholder="E-mail">
        </div>

        <!--패스워드-->
        <div class="login-pw">
            <input type="password" placeholder="PW">
        </div>

        <!--로그인 버튼 / 회원가입 버튼(예정)-->
        <p style="text-align: center;">
            <button id="btn_register">회원가입</button>
            <button id="btn_login">로그인</button>
        </p>
    </form>

단순히 div로만 묶여있던 텍스트들을 form으로 로그인 버튼까지 한 번에 묶어 가운데 정렬을 한 모습이다.

기존 이메일과 패스워드에 p 태그로 묶여있던것을 제외해 버렸다. 이유는 p태그는 문단용이기 때문

기존 버튼에 <a>태그를 이용했는데 이는 중첩되는 행위 이유는 아래와 같다.

 

a vs botton

a href="...."은 단순 링크 이동이 목적

botton + form은 데이터 전송, 서버 처리가 목적임

 

즉, 이후에 서버로 데이터를 보내도록 구현을 진행할 예정이므로 a보단 botton 태그가 좀 더 올바르다.

 

다음 포스팅으로는 <script>에 있는 값을 js로 옮기도록 하겠다.

'Front-End > HTML' 카테고리의 다른 글

[CSS] Scroll-Snap  (0) 2025.11.23
CSS에 대한 나의 생각과 고찰  (0) 2025.11.23
CSS와 로그인 페이지 UI 제작과정  (0) 2025.11.22
HTML의 기본구조 및 Semantic 구조란?  (0) 2025.11.21
회원가입 화면 구현  (0) 2025.11.21