display는 요소를 삭제하거나 인라인 속성이나 블록 속성으로 바꿔 보이게 한다.


visibility는 해당 요소를 숨기거나 보이게 할 수 있다.




여기서 인라인 속성이란 좌우로 나열하여 보여주는 것이고


블록속성은 위 아래로 나열하여 보여준다.




display: [none / inline / block];


visibility: [hidden / visible];


위와 같이 사용한다.




none : 삭제


inline : 인라인 적용


block : 블록 적용


hidden : 숨기기


visible : 보이기





삭제와 숨기기는 별 차이 없어보이지만


삭제를 하면 공간을 차지 하지 않고 사라지지만


숨기기를 하면 빈 공간으로 남아있다.


예제를 확인해보자



<html>
    <head>
        <meta charset="UTF-8">
        <title>요소 보이기/숨기기</title>
        <link rel="icon" href = "img/btn.png">
        <style>
            li{
                list-style-type: none;
                background-color: aqua;
                padding: 20px;
                display: inline;
            }
            a:hover{
                /*해당 요소를 숨기므로 영역은 남아있음*/
                visibility: hidden;/*[visible|hidden]*/
            }
            #dis{
                /*해당 요소를 지우므로 영역도 없어짐*/
                /*지웠다 새로 그리는 느낌이기 때문에 조금 느려질 수 있다.*/
                display: none;/*[none|inline|block]]*/
            }
        </style>
        <!--스타일이 많으면 로딩이 느려질 수 있다.-->
        <!--아이디가 # 클래스가 . 태그는 p-->
    </head>
    <body>
        <ul>
            <a href="#"><li>HTML</li></a>
            <a href="#"><li>CSS</li></a>
            <a href="#"><li>JAVA-SCRIPT</li></a>
            <a href="#" id="dis"><li>J-Query</li></a>
            <a href="#"><li>BOOT STRAP</li></a>
        </ul>
    </body>

</html>



인라인 속성이라 좌우로 나열되고 사진에는 안나왔지만 마우스가 CSS 부분에 있어 중간에 빈 부분이 있다.


그리고 J-Query도 나와야 하지만 display: none;이라 자리의 흔적조차 보이지 않는다.










display를 이용해서


https://qdgbjsdnb.tistory.com/134


https://qdgbjsdnb.tistory.com/142


두 예제를 합친 최종본의 본문을 보였다 숨겼다를 적용해보자


본문 내용은 조금 변경한다.



<html>
    <head>
        <meta charset="UTF-8">
        <title>메인 Page</title>
        <link rel="icon" href = "img/btn.png">
        <style>
            div.content{
                background-image: url("img/bg.png");
                background-repeat: no-repeat;
                background-position: right bottom;
                background-size: 200px;
                height: 60%;
            }
            dt{
                font-weight: 600;
                font-size: 120%;
            }
            #dt1:hover{
                /*해당 요소를 숨기므로 영역은 남아있음*/
                visibility: hidden;/*[visible|hidden]*/
            }
            #dt2:hover{
                /*해당 요소를 숨기므로 영역은 남아있음*/
                visibility: hidden;/*[visible|hidden]*/
            }
            #dt3:hover{
                /*해당 요소를 숨기므로 영역은 남아있음*/
                visibility: hidden;/*[visible|hidden]*/
            }
            #dt4:hover{
                /*해당 요소를 숨기므로 영역은 남아있음*/
                visibility: hidden;/*[visible|hidden]*/
            }
        </style>
    </head>
    <body>
        <iframe src="exercise_03_navi.html" width="100%" height="51" frameborder="0" scrolling="no"></iframe>
        
        <h2>HTML</h2>
        <hr/>
        <div class="content">
            <dl>
                <a href="#" id="dt1">
                    <dt>
                        정의
                        <dd>
                            HTML은 Hyper Text Markup Language의 약자 입니다.
                        </dd>
                    </dt>
                </a>
                <a href="#" id="dt2">
                    <dt>
                        용도
                        <dd>
                            웹 어플리케이션의 뼈대를 만듭니다.
                        </dd>
                    </dt>
                </a>
                <a href="#" id="dt3">
                    <dt>
                        추가 학습1
                        <dd>
                            CSS
                        </dd>
                    </dt>
                </a>
                <a href="#" id="dt4">
                    <dt>
                        추가 학습2
                        <dd>
                            JAVA SCRIPT, J-Query
                        </dd>
                    </dt>
                </a>
            </dl>
        </div>
        <iframe src="exercise_03_footer.html" width="100%" frameborder="0" scrolling="no"></iframe>
    </body>
</html>



결과는 다음과 같다.














첫번째 결과에 추가학습 2에 마우스를 올렸을 때 스크린샷이다.(마우스가 안찍힘)













추가로 예전에 했던 iframe 예제에서 메뉴의 HTML을 눌렀을 때


위의 페이지로 이동하게 하려면 다음과 같이 바꾸면 된다.



여기서 파란 네모친 부분에 HTML을 누르면


다음 화면으로







이 부분은 메뉴바에서 <a href="subpage01.html"><li>HTML</li></a>부분이 있는데


이렇게 입력했을 때는 iframe 내에서만 열려 이상하게 표시된다.


그러므로 대상을 부모 프레임으로 바꾸어 주어야 한다.


<a href="subpage01.html" target="_parent"><li>HTML</li></a> 타겟을 위와같이 입력하면 된다.




먼저 결과화면부터



만들 내용은


먼저 ul, li(리스트)를 이용해서 5가지 요소(HTML, CSS, JAVA-SCRIPT, J-Query, BOOT STRAP)을 만들고


a태그로 감싸 링크를 만든다.


------ 여기까지는 예전에 했던 예제(https://qdgbjsdnb.tistory.com/134)와 같은데 이 다음부터 새로 배운 내용들을 적용한다.


1. ul 태그를 div 태그로 감싼다.(화면의 바를 좌측에서 우측으로 채우기 위해)


2. 링크들을 좌측 정렬 하고, padding 을 적용해서 간격을 준다.


3. 배경색을 지정


4. ul의 list-style을 없애 항목들의 º 표시를 없앤다.


5. a태그의 속성을 변경해 색깔을 상황에 따라 설정






결과 코드는 다음과 같다.



<!--다른 페이지에서 호출 되는 경우 일부분만 만들어도 된다.-->
<!--
    왼쪽에서 오른쪽으로 정렬
    링크 걸기, 링크 밑줄 제거
-->
<style>
    a, li{
        float:left;
        padding: 5px 20px;
        background-color: black;
        font-weight: 600;

    }
    ul{
        list-style: none;
        min-width: 900px;
    }
    a:link{
        text-decoration: none;
        color: white;
    }
    a:visited{
        text-decoration: none;
        color: white;
    }
    a:active{

        text-decoration: none;
        color: black;
    }
    li:hover{
        /*마우스 올렸을때 li 상자 색바꾸기*/
        background-color: red;
    }
    .bar{
        /*바를 좌에서 우로 쭉 연결되게끔*/
        height: 41px;
        width: 100%;
        background-color: black;
    }
</style>
<div class="bar">
<ul>
    <a href="#"><li>HTML</li></a>
    <a href="#"><li>CSS</li></a>
    <a href="#"><li>JAVA-SCRIPT</li></a>
    <a href="#"><li>J-Query</li></a>
    <a href="#"><li>BOOT STRAP</li></a>
</ul>
</div>
<!--참조만 할 html 파일은 html영역, head영역 body영역 등 생략이 가능-->



이 문제를 저번과 같이 iframe으로 합쳐보자

보통 html의 body에 쭈욱 입력을 해 놓으면


글 내용의 경우 우측으로 나열되고


그 외에 블록문은 전부 아래로 나열이 된다.


블록문을 다른 방향으로 나열하기 위해 사용하는 style 문이 float이다.


다음 예제를 확인해보자



<html>
    <head>
        <meta charset="UTF-8">
        <title>Float</title>
        <link rel="icon" href="img/btn.png">
        <style>
            div{
                width: 50px;
                height: 25px;
                border: 3px solid yellowgreen;
                margin: 5px;
                /*정렬 기준을 왼쪽으로 block -> inline*/
                float:left;
            }
        </style>
    </head>
    <body>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </body>
</html>


원래 아래로 나열되는 것이 위와 같이 나열되었다.



다음으로는 link


글자에 링크를 거는 a태그의 속성인데 링크에 마우스를 올리거나 누르는 순간이나 초기 상태 등을 설정한다.


link, visited, hover(예전에 이미지에 한번 썻었다.), active를 사용해 설명한다.



<html>
    <head>
        <meta charset="UTF-8">
        <title>링크</title>
        <link rel="icon" href="img/btn.png">
        <style>
            /*
            링크 상태
            link : 링크걸린 초기 상태
            visited : 한번 클릭된 링크 상태
            hover : 마우스가 올라간 상태
            active : 누르는 순간
            */
            a:link{
                text-decoration: none;
            }
            a:visited{
                /*
                방문했던 링크
                */
                text-decoration: none;
                color: orange;

            }
            a:hover{
                /*
                마우스 올렸을 때
                색깔 파랑
                폰트 굵게
                밑줄
                */
                color:blue;
                font-weight: 600;
                text-decoration: underline;
            }
            a:active{
                /*
                클릭했을 때
                */
                color: green;
                text-decoration: none;
            }
        </style>
    </head>
    <body>
        <a href="http://www.w3schools.com/css/" target="blank">
            CSS TUTORILAS
        </a>
    </body>
</html>


각각의 결과는 아래와 같이 나온다.






첫번째가 평상시


두번째가 마우스를 올렸을 때


세번째가 클릭했을 때


네번째가 방문 했던 기록이 있을 때


실제로 웹사이트를 볼 때 경험해본 기능일 것이다. 






이번에는 예전에 [HTML]02-06.iframe, 다른 사이트 참조 + 예제(https://qdgbjsdnb.tistory.com/134) 글에서 다뤘던 예제를 이용해서


링크의 '_'를 없애고


마우스를 올렸을 때 테두리가 생기게 해보자.



<!--
    1.이미지에 해당 사이트 링크를 걸것
    2.마우스 오버 했을때 테두리가 가도록 수정
    3.링크의 밑줄 제거
-->
<style>
    img{
        border: 1px solid white;
    }
    img:hover{
        border: 1px solid black;
    }

    a:link{
        text-decoration: none;
    }
</style>



<a href="http://www.daum.net"target="_blank">
    <img src="img/daum.png" alt="다음 이미지" width="150" height="70"/>
</a>
<a href="http://www.google.com"target="_blank">
    <img src="img/google.png" alt="구글 이미지" width="150" height="70"/>
</a>
<a href="http://www.msn.com"target="_blank">
    <img src="img/msn.jpg" alt="MSN 이미지" width="150" height="70"/>
</a>
<a href="http://www.nate.com"target="_blank">
    <img src="img/nate.png" alt="NATE 이미지" width="180" height="70"/>
</a>
<a href="http://www.naver.com"target="_blank">
    <img src="img/naver.png" alt="네이버 이미지" width="120" height="70"/>
</a>


따로 html 틀을 안잡아도 작동이 되긴 한다.


위의 코드를 실행하면 전과 다르게 이미지 우측 아래 밑줄이 사라지고 마우스를 올렸을 때 박스가 생긴다.


text-decoration: none;를 통해서 밑줄이 사라지게 된다.


navi와 footer을 합친 iframe 예제를 확인해봐도 똑같이 적용되어 밑줄이 사라져 깔끔하게 보인다.






background는 특정 사진을 배경에 입히는것.


여태까지 body 안에 있는 항목들의 Style을 조정했는데


배경을 입히고 싶다면 그냥 body에 Style을 주면 된다.


먼저 간단하게 색깔을 입히는 방법



<html>
    <head>
        <meta charset="UTF-8">
        <title>배경 꾸미기</title>
        <link rel="icon" href = "btn.png">
        <style>
            h1{
                background-color: aquamarine;
            }
            div{
                background-color: blanchedalmond;
            }
            body{
                background-color: coral;
            }
        </style>
        <!--스타일이 많으면 로딩이 느려질 수 있다.-->
        <!--아이디가 # 클래스가 . 태그는 p-->
    </head>
    <body>
        <h1>Welcome To CSS page</h1>
        <p>CSS background color</p>
        <div>background area</div>

    </body>

</html>







다음으로는 이미지를 직접 지정하여 띄우는 방법이다.


CSS 파일을 만든 폴더에 img 폴더를 만들고 picture.gif라는 파일을 넣어 놨다.


이미지는 아무거나 사용해도 된다.



<html>
    <head>
        <meta charset="UTF-8">
        <title>배경 이미지</title>
        <link rel="icon" href="img/btn.png">
        <style>
            body{
                /*화면보다 이미지가 작으면 x/y 축으로 반복 된다.*/
                background-image: url("img/picture.gif");
                /*
                한쪽 축으로 이미지를 반복
                background-repeat: repeat-x;
                background-repeat: repeat-y;
                */
                
                /*반복 하지 않고*/
                background-repeat: no-repeat;
                /*원하는 위치에 배치하기*/
                /*background-position: 위치 속성*/
                background-position: right bottom;
                


            }
        </style>
    </head>
    <body>

    </body>
</html>





마지막에 right bottom이라고 하여 우측 아래에 출력된 화면


주석을 하거나 지워서 확인해보자


마지막으로 이미지 사이즈를 바꿔보자



<html>
    <head>
        <meta charset="UTF-8">
        <title>배경 이미지</title>
        <link rel="icon" href="img/btn.png">
        <style>
            body{
                /*이미지가 화면 보다 크면 전부 표시되지 않는다.*/
                background-image: url(img/201801_type1_1920.jpg);
                /*이미지 크기 변경으로 해결*/
                /*background-size: 100% 100%와 같이 비율로 조정도 가능*/
                
                /*
                이미지 크기 변경 방법
                1. 사이즈 입력
                2. cover - 이미지가 클 경우 화면에 맞춰 자른다.(기본)
                3. contain - 비율이 벗어나지 않는 선에서 축소
                background-size: 속성;
                */
                background-size: contain;

            }
        </style>
    </head>
    <body>

    </body>
</html>





첫번째는 아무 속성을 주지 않아 사진이 커서 화면 밖으로 삐져 나갔다.


두번째는 contain을 사용.


주석을 통해 직접 실행하여 차이를 확인해보자.






예전에 테이블에 부여했던 테두리를 자세히 설명한다.


테두리는 기본적으로 border 키워드를 사용


border-width, border-style, border-color 세가지가 있고,


세가지를 합친 border: [width style color] 키워드도 있다.


또한 border-[top/bottom/left/right]-attr(속성)을 통해


테두리의 각 부분의 속성을 컨트롤 할 수 있다.


사용법과 예시를 확인해보자



<html>
    <head>
        <meta charset="UTF-8">
        <title>Input</title>
        <link rel="icon" href = "btn.png">
        <style>
            /*border-width, border-style, border-color 세가지를 합친*/
            /*border: [width style color]을 사용한 것.*/
            /*또한 border-[top/bottom/left/right]-attr(속성)을 통해*/
            /*테두리의 각 부분의 속성을 컨트롤 할 수 있다.*/

            .one{
                border: 5px solid red;
            }

            .two{
                border-style: dashed;
                border-width: thin;
                border-color: brown;
            }

            .three{
                border-bottom-style: dotted;
                border-top-style: double;
                border-right-style: solid;
                border-left-style: solid;
                border-left-color: aquamarine;
                /*선이 없을 경우, 색깔만 줘도 아무 변화 없다.*/
            }

            .four{
                border-bottom-style:groove;
                border-top-style: groove;

                border-right-style: ridge;
                border-left-style: ridge;
            }

            .five{
                /*한번에 주는 방법*/
                /*12-3-6-9, 시계방향*/
                border-style: double solid dotted dashed; 
            }
        </style>
        <!--스타일이 많으면 로딩이 느려질 수 있다.-->
        <!--아이디가 # 클래스가 . 태그는 p-->
    </head>
    <body>
        <p class="one">This is content</p>
        <p class="two">This is content</p>
        <p class="three">This is content</p>
        <p class="four">This is content</p>
        <p class="five">This is content</p>
    </body>

</html>



실행 화면







테이블에 적용 예시


마진 기능을 추가하여 좀 더 이쁘게 자리잡았다. 


<html>
    <head>
        <meta charset="UTF-8">
        <title>로그인 박스</title>
        <style>
            table, th, td{
                border: 1px solid black;
                border-collapse: collapse;
            }
            th{
                width: 50px;
                padding: 3px;
            }
            td{
                width: 50px;
                padding: 3px;
            }
            </style>
    </head>
    <body>
        <h2>로그인</h2>
        <hr/>
        <form action="" method="GET">
            <fieldset>
            <table>
                <tr><!--행(row)선언-->
                    <th><b>ID</b></th>
                    <th><input type="text" name = "UserID" value=""placeholder = "아이디를 입력 해주세요."/></th>
                    <th rowspan="2"><input type="submit" value="로그인"/></th>
                </tr>
                <tr><!--행(row)선언-->
                    <th><b>PW</b></th>
                    <th><input type="password" name = "UserPW" value=""placeholder = "비밀번호를 입력 해주세요."/></th>
                </tr>
                <tr><!--행(row)선언-->
                    <th colspan="3"><input type="button" value="회원가입"/> <input type="button" value="아이디/비번 찾기"></th>
                </tr>
            </table>
            </fieldset>
        </form>

    </body>
</html>




<html>
    <head>
        <meta charset="UTF-8">
        <title>회원가입 페이지</title>
        <style>
            table, th, td{
                border: 1px solid black;
                border-collapse: collapse;
            }
            th, td{
                padding: 3px;
            }
        </style>
    </head>
    <body>
        <fieldset>
        <h2>회원가입</h2>
        <hr/>
        <form action="" method="GET">
        <table>
            <tr>
                <th>아이디</th>
                <td><input type="text" name = "UserID" value=""/></td>
            </tr>
            <tr>
                <th>비밀번호</th>
                <td><input type="text" name = "UserPW" value=""/></td>
            </tr>
            <tr>
                <th>비밀번호 확인</th>
                <td><input type="text" name = "ReUserPW" value=""/></td>
            </tr>
            <tr>
                <th>이름</th>
                <td><input type="text" name = "Name" value=""/></td>
            </tr>
            <tr>
                <th>이메일</th>
                <td><input type="email" name="mail" required/></td>
            </tr>
            <tr>
                <th>생년월일</th>
                <td>
                    <select name="year">
                        <option value="1995">1995</option>
                        <option value="1996"d>1996</option>
                        <option value="1997" selected>1997</option>
                        <option value="1998">1998</option>
                        <option value="1999">1999</option>
                        <option value="2000">2000</option>
                    </select>
                    <select name="month">
                        <option value="01" selected>01</option>
                    </select>
                    <select name="day">
                        <option value="01" selected>01</option>
                    </select>
                </td>
            </tr>
            <tr>
                <th>성별</th>
                <td>
                    <input type="radio" name="gender" value="male"/> 남자
                    &nbsp;&nbsp;&nbsp;&nbsp;
                    <input type="radio" name="gender" value="female"/> 여자
                </td>
            </tr>
            <tr>
                <th>취미</th>
                <td>
                    <input type="checkbox" name="hobby" value="드라이브"/>드라이브
                    <input type="checkbox" name="hobby" value="스포츠"/>스포츠
                    <input type="checkbox" name="hobby" value="게임"/>게임
                    <input type="checkbox" name="hobby" value="낚시"/>낚시
                </td>
            </tr>
            <tr>
                <th>나이</th>
                <td><input type="number" name="age" min="1" max="200" value="20"/></td>
            </tr>
            <tr>
                <th>보안등급</th>
                <td><input type="range" name="security" min="0" max="100" value="0" step="20"/></td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit" value="회원가입"/>
                </td>
            </tr>
        </table>
        </form>
        </fieldset>
    </body>
</html>










CSS는 따로 어려운게 아니고


html 코드의 바디 부분에 나오는 블록들에


속성을 달아주는 것이다.


html에서 테이블, 표를 만들때 Style을 통해 테두리를 만들었는데


그것도 CSS의 한 부분이라고 할 수 있다.





근데 구지 body에 명시 안하고 style에 하는 이유를 비유하자면


뼈대를 만들어놓고 스타일을 입혀야지


뼈대 만들면서 입히면 어떻게 될지 모르기 때문이다.


이러한 방법으로 하면 작업이 좀 느려질 뿐만 아니라


사이트 접근 시 뼈대만 보이다가 갑자기 style 효과가 주어지는 등 불안정적인 상태가 보인다.


그러므로 head에 쓰는걸 권장.





예전에 java FX할 때 프로젝트를 만들면 CSS 파일이 항상 담겨 있었다.


.css 확장자 파일은 하나의 style의 집합체라고 보면 되고


html에서 따로 경로 참조 코드를 쓰면 불러와진다.





보통 블록에 Id나 Class를 부여하여


해당 블록을 지정하여 속성을 변경한다.


또한 태그를 써서 전부 선택 할 수도 있다.





Id에 부여하는 방법은 #을 사용하여 잡고


Class를 부여하는 방법은 '.'을 사용하여 잡고


태그는 블록으로 잡는다.





특별한 케이스로도 있다.


만약 표 안의 특정 태그를 잡고싶을 때에는 '>'를 표시해서 자식관계를 표시하는데


'>'는 생략이 가능하다.


또한 input의 경우는 '[]'를 사용하여 특정 type 들만 골라서 변경 할 수 있다.


이러한 


아래 예시를 통해 여러가지 경우를 확인해보자.




<html>
    <head>
        <meta charset="UTF-8">
        <title>Input</title>
        <link rel="icon" href = "btn.png">
        <style>
            /*css 주석*/
            /*p태그 잡는 법*/
            p{
                /*전체 p 태그에 배경색 주기*/
                background-color: gray;
            }

            /*class 잡는 법*/
            .myclass{
                /*class="myclass"의 글자 색상 변경*/
                color: brown;
            }
            
            /*myid 잡는 법*/
            #myid{
                color: darkgoldenrod
                /*id가 중복인게 여러개 인 경우 무조건 첫번째 것을 인지*/
            }

            /*여러개 선택*/
            p, div{
                /*글자 굵기 : 600 b 태그*/
                font-weight: 600;
            }

            /*div의 자식인 p 잡는 법*/
            div>p{
                /*>를 통해서 자식 관계를 잡는데 >를 생략해도 정상적으로 잡힌다.*/
                background-color: blueviolet;
            }

            /*input 잡는 법*/
            input[type = 'text']{ /*[]를 생략하면 input이 전부 잡히고 특정 타입만 변경할 때 쓴다.*/
                background-color: forestgreen;
            }
            input[type = 'email']{
                background-color:lightskyblue;
            }

            /*img 태그 잡는 법*/
            img{
                /*하나만 설정하면 비율에 맞춰서 작아 진다.*/
                width:100;
                border: 1px solid white;
                /*border는 테두리 라인을 말한다.*/
                /*테두리는 다음 장에서 자세히*/
            }
            /*마우스가 올라갔을 경우 강조 표시*/
            img:hover{
                border: 1px solid black;
                /*테두리(픽셀)가 생기면서 마우스를 올릴 때 마다 이미지가 밀린다.*/
                /*위의 border을 통해 픽셀 테두리를 만들어 놓으면 이미지가 밀리지 않는다.*/
            }
            
        </style>
        <!--스타일이 많으면 로딩이 느려질 수 있다.-->
        <!--아이디가 # 클래스가 . 태그는 p-->
    </head>
    <body>
        <p id="myid">id가 있는 요소</p>
        <p class="myclass">Class가 있는 요소</p>
        <p class="myclass">Class가 있는 요소</p>
        <p>태그만 있는 요소</p>
        <div>DIV 요소</div>
        <!--div는 기능 X, 영역만 묶어줌-->
        <div>
            <p>DIV 안의 P 태그</p>
        </div>
        <input type="text" placeholder="이름"/>
        <input type="email" placeholder="이메일"/>
        <br/><br/>
        <img src="img/img01.jpg" alt="초록버섯"/>
        <img src="img/img02.jpg" alt="꽃"/>
        <img src="img/img03.jpg" alt="마리오"/>
        <img src="img/img04.jpg" alt="초코송이"/>
    </body>

</html>







이미지는 아무거나 쓰세요


위의 코드를 보면 style에 특이한걸 넣은게 아닌데도 코드의 길이가 길다.





input을 사용할 때 form을 사용했었는데


form은 내용을 서버에 전달할 때 핵심인 개념이다.


저번 게시글에서 form으로 input 항목들을 묶었을 때 reset 버튼을 만들어 누르면 전부 리셋되는걸 확인 했었을 것이다.


이렇게 form으로 묶어 속성에 보낼 서버와 보낼 방식을 지정하고


특정 버튼을 누르면 작동이 된다.


방식에는 아래와 같이 두가지 지정 방법이 있다


get 방식은 url 그대로 보내 빠르지만 보안이 안좋다.


post 방식은 head와 붙여 보내 느리지만 보안에 좋다.



마지막으로 데이터가 전송된 것을 확인하려면 서버가 필요하지만 우선 서버는 생략한다.



form을 선언할 때 <form action="" method="POST">와 같이 만들면 된다.



아래의 예제를 확인해 get과 post의 차이를 확인해보자



<html>
    <head>
        <meta charset="UTF-8">
        <title>Input</title>
        <link rel="icon" href = "btn.png">
    </head>
    <body>
        <!--action="보낼 서버", method="GET|POST"-->
        <form action="" method="GET">
            First Name<input type="text" name="firstname"/>
            <br/>
            Last Name<input type="text" name="lastname"/>
            <br/><br/>
            <input type="submit"/>
        </form>

    </body>

</html>







주소줄을 보면 내가 입력한 정보가 제출을 눌렀을때 url에 전부 나오는게 보인다.


이러한 이유로 보안에 안좋다.


참고로 한글을 입력하면 url에는 한글로 보이긴 한데 복사해서 붙여넣으면 url 코딩 방법으로 이상하게 나온다.






<html>
    <head>
        <meta charset="UTF-8">
        <title>Input</title>
        <link rel="icon" href = "btn.png">
    </head>
    <body>
        <!--action="보낼 서버", method="GET|POST"-->
        <form action="" method="POST">
            First Name<input type="text" name="firstname"/>
            <br/>
            Last Name<input type="text" name="lastname"/>
            <br/><br/>
            <input type="submit"/>
        </form>

    </body>

</html>




method를 post로 바꾸면 url에 뜨지 않는다.






이것을 08(https://qdgbjsdnb.tistory.com/136)의 예제에 적용하면 다음과 같다.




<html>
    <head>
        <meta charset="UTF-8">
        <title>로그인 박스</title>
        <style>
                th{
                    width: 50px;
                }
                td{
                    width: 50px;
                }
            </style>
    </head>
    <body>
        <h2>로그인</h2>
        <hr/>
        <form action="" method="GET">
            <fieldset>
            <table>
                <tr><!--행(row)선언-->
                    <th ><b>ID</b></th>
                    <th><input type="text" name = "UserID" value=""placeholder = "아이디를 입력 해주세요."/></th>
                    <th rowspan="2"><input type="submit" value="로그인"/></th>
                </tr>
                <tr><!--행(row)선언-->
                    <th><b>PW</b></th>
                    <th><input type="password" name = "UserPW" value=""placeholder = "비밀번호를 입력 해주세요."/></th>
                </tr>
                <tr><!--행(row)선언-->
                    <th colspan="3"><input type="button" value="회원가입"/> <input type="button" value="아이디/비번 찾기"></th>
                </tr>
            </table>
            </fieldset>
        </form>

    </body>
</html>




<html>
    <head>
        <meta charset="UTF-8">
        <title>회원가입 페이지</title>
        <style>
            td{
                width: 300px;
            }
        </style>
    </head>
    <body>
        <fieldset>
        <h2>회원가입</h2>
        <hr/>
        <form action="" method="GET">
        <table>
            <tr>
                <th>아이디</th>
                <td><input type="text" name = "UserID" value=""/></td>
            </tr>
            <tr>
                <th>비밀번호</th>
                <td><input type="text" name = "UserPW" value=""/></td>
            </tr>
            <tr>
                <th>비밀번호 확인</th>
                <td><input type="text" name = "ReUserPW" value=""/></td>
            </tr>
            <tr>
                <th>이름</th>
                <td><input type="text" name = "Name" value=""/></td>
            </tr>
            <tr>
                <th>이메일</th>
                <td><input type="email" name="mail" required/></td>
            </tr>
            <tr>
                <th>생년월일</th>
                <td>
                    <select name="year">
                        <option value="1995">1995</option>
                        <option value="1996"d>1996</option>
                        <option value="1997" selected>1997</option>
                        <option value="1998">1998</option>
                        <option value="1999">1999</option>
                        <option value="2000">2000</option>
                    </select>
                    <select name="month">
                        <option value="01" selected>01</option>
                    </select>
                    <select name="day">
                        <option value="01" selected>01</option>
                    </select>
                </td>
            </tr>
            <tr>
                <th>성별</th>
                <td>
                    <input type="radio" name="gender" value="male"/> 남자
                    &nbsp;&nbsp;&nbsp;&nbsp;
                    <input type="radio" name="gender" value="female"/> 여자
                </td>
            </tr>
            <tr>
                <th>취미</th>
                <td>
                    <input type="checkbox" name="hobby" value="드라이브"/>드라이브
                    <input type="checkbox" name="hobby" value="스포츠"/>스포츠
                    <input type="checkbox" name="hobby" value="게임"/>게임
                    <input type="checkbox" name="hobby" value="낚시"/>낚시
                </td>
            </tr>
            <tr>
                <th>나이</th>
                <td><input type="number" name="age" min="1" max="200" value="20"/></td>
            </tr>
            <tr>
                <th>보안등급</th>
                <td><input type="range" name="security" min="0" max="100" value="0" step="20"/></td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit" value="회원가입"/>
                </td>
            </tr>
        </table>
        </form>
        </fieldset>
    </body>
</html>




03(https://qdgbjsdnb.tistory.com/131)에서 사용한 로그인과 회원가입에 적절한 노드들을 사용해보자.


완성된 결과물은 다음과 같다.








02-03의 게시물의 예제와 input을 통해 위의 사진과 같이 만들어보자





-정답-


로그인


<html>
    <head>
        <meta charset="UTF-8">
        <title>로그인 박스</title>
        <style>
                th{
                    width: 50px;
                }
                td{
                    width: 50px;
                }
            </style>
    </head>
    <body>
        <fieldset>
        <table>
            <tr><!--행(row)선언-->
                <th ><b>ID</b></th>
                <th><input type="text" name = "UserID" value=""placeholder = "아이디를 입력 해주세요."/></th>
                <th rowspan="2"><input type="submit" value="로그인"/></th>
            </tr>
            <tr><!--행(row)선언-->
                <th><b>PW</b></th>
                <th><input type="password" name = "UserPW" value=""placeholder = "비밀번호를 입력 해주세요."/></th>
            </tr>
            <tr><!--행(row)선언-->
                <th colspan="3"><input type="button" value="회원가입"/> <input type="button" value="아이디/비번 찾기"></th>
            </tr>
        </table>
        </fieldset>

    </body>
</html>


회원가입


<html>
    <head>
        <meta charset="UTF-8">
        <title>회원가입 페이지</title>
        <style>
            td{
                width: 300px;
            }
        </style>
    </head>
    <body>
        <fieldset>
        <h2>회원가입</h2>
        <hr/>
        <table>
            <tr>
                <th>아이디</th>
                <td><input type="text" name = "UserID" value=""/></td>
            </tr>
            <tr>
                <th>비밀번호</th>
                <td><input type="text" name = "UserPW" value=""/></td>
            </tr>
            <tr>
                <th>비밀번호 확인</th>
                <td><input type="text" name = "ReUserPW" value=""/></td>
            </tr>
            <tr>
                <th>이름</th>
                <td><input type="text" name = "Name" value=""/></td>
            </tr>
            <tr>
                <th>이메일</th>
                <td><input type="email" name="mail" required/></td>
            </tr>
            <tr>
                <th>생년월일</th>
                <td>
                    <select name="year">
                        <option value="1995">1995</option>
                        <option value="1996"d>1996</option>
                        <option value="1997" selected>1997</option>
                        <option value="1998">1998</option>
                        <option value="1999">1999</option>
                        <option value="2000">2000</option>
                    </select>
                    <select name="month">
                        <option value="01" selected>01</option>
                    </select>
                    <select name="day">
                        <option value="01" selected>01</option>
                    </select>
                </td>
            </tr>
            <tr>
                <th>성별</th>
                <td>
                    <input type="radio" name="gender" value="male"/> 남자
                    &nbsp;&nbsp;&nbsp;&nbsp;
                    <input type="radio" name="gender" value="female"/> 여자
                </td>
            </tr>
            <tr>
                <th>취미</th>
                <td>
                    <input type="checkbox" name="hobby" value="드라이브"/>드라이브
                    <input type="checkbox" name="hobby" value="스포츠"/>스포츠
                    <input type="checkbox" name="hobby" value="게임"/>게임
                    <input type="checkbox" name="hobby" value="낚시"/>낚시
                </td>
            </tr>
            <tr>
                <th>나이</th>
                <td><input type="number" name="age" min="1" max="200" value="20"/></td>
            </tr>
            <tr>
                <th>보안등급</th>
                <td><input type="range" name="security" min="0" max="100" value="0" step="20"/></td>
            </tr>
        </table>
        </fieldset>
    </body>
</html>



selected의 값은 많기 때문에 귀찮아서 쓰다가 패스....

link는 페이지를 열었을때 페이지 이름 옆에 나타나는 아이콘을 의미한다.


아래의 예를 들면 <link rel="icon" href = "btn.png">와 같이 사용한다.







input은 type으로 종류를 정하고


value로 내용, 기본값을 설정하고


name을 지정할 수 있다.




input은 기능을 가진 버튼을 만들 수 있기 때문에 제일 중요한 부분이다.




type은



button, submit, password, checkbox, radio, hidden, file, select, email, number, range, color, date, month, datetime-local, image


time, url, week, reset


다양하지만 전부 외울 필요는 없고 필요할 때 찾다보면 익숙해진다.




그 외에


fieldset 블록은 하나의 틀, 프레임을 만든다.(아래 실행 화면 참조.)




<html>
    <head>
        <meta charset="UTF-8">
        <title>Input</title>
        <link rel="icon" href = "btn.png">
    </head>
    <body>
        <input type="button" value="click"/>
        <!--button : 이벤트를 실행하는 트리거 역할-->

        <input type="submit" value="전송"/>
        <!--어떤 값을 제출하는 역할, 서버에 제출-->


        <!--자주 쓰임, 중요!-->
        <fieldset>
            <legend>text & password</legend>
            ID : <input type="text" name = "UserID" value=""placeholder = "아이디를 입력 해주세요."/>
            <br/>
            PW : <input type="password"name = "UserPW" value="">
        </fieldset>
        <!--text : 텍스트 박스-->
        <!--password : 암호 박스-->
        <!--value속성은 기본값을 말함, 처음에 담겨있을 값-->
        <!--placeholder 속성은 커서를 안올리면 보이지만 올리면 사라지는 글-->

        <fieldset>
            <legend>checkbox & radio</legend>
            <input type="checkbox" name="hobby" value="영화"/> 영화
            <input type="checkbox" name="reading" value="독서"/> 독서
            <input type="checkbox" name="game" value="게임"/> 게임
                
            <br/>

            <!--name이 꼭 일치해야 그룹으로 묶여 하나만 선택된다.-->
            <input type="radio" name="gender" value="male"/> 남자
            <input type="radio" name="gender" value="female"/> 여자

            <br/>
                
            <input type="radio" name="number" value="1"/> 1
            <input type="radio" name="number" value="2"/> 2
            <input type="radio" name="number" value="3"/> 3
            <input type="radio" name="number" value="4"/> 4
        </fieldset>

        <fieldset>
            <legend>text & hidden</legend>
            <input type="text" name="userName" value="홍길동" readonly>
            <!--readonly는 읽기전용, 수정 불가하게 바꿈-->
            <input type="hidden" name="userName" value="홍길동">
        </fieldset>

        <fieldset>
            <legend>File</legend>
            <form>
                <input type="file" name="img"/>
                <input type="submit" value="전송"/>
                <!--submit은 value를 빈칸으로 하면 브라우져에 따라 기본값이 다르다.-->
            </form>
            <!--form은 나중에 따로 설명한다.-->
        </fieldset>

        <fieldset>
            <legend>select</legend>
            <select name="cars">
                <option value="volvo">Volvo</option>
                <option value="saab">Saab</option>
                <option value="fiat" selected>Fiat</option>
                <!--selected를 해놓으면 기본값으로 체크 되어 있음-->
                <option value="audi">Audi</option>
            </select>
        </fieldset>


        <!--자주 안쓰임, 유용하지만 HTML5만 지원함, 브라우져에 따라 작동 안됨-->
        <fieldset>
            <legend>e-mail</legend>
            <form>
                E-mail : 
                <input type="email" name="mail" required/>
                <!--required라고 입력하면 정상 값을 입력하지 않으면 오류 풍선이 뜸-->
                <input type="submit"/>
            </form>
        </fieldset>

        <fieldset>
            <legend>number & range</legend>
            나이(1~200) : 
            <input type="number" name="age" min="1" max="200"/>
            <!--숫자형이 아니고 문자형임-->
            <!--min, max로 범위 설정 가능-->
            <br/>
            points(0~100)
            <input type="range" name="point" min="0" max="100" value="50" step="20"/>
            <!--스크롤을 만듦, step으로 한번 당길 때 움직이는 양을 설정할 수 있다.-->
        </fieldset>

        <!--대체품이 있음, bootstrap 등..-->
        <fieldset>
            <legend>color</legend>
            좋아하는 색상 : <input type="color" name="color"/>
            <!--색상 선택 기능-->
        </fieldset>

        <fieldset>
            <legend>date & month</legend>
            날짜:<input type="date" name="day"/>
            <br/>
            월:<input type="month" name="month">
            <br/>
            날짜+시간:<input type="datetime-local"name="time"/>
        </fieldset>

        <input type="image"src="btn.png" alt="버튼 아이콘" width="100"height="100"/>

        <fieldset>
            <legend>time & url & week & reset</legend>
            <form>
                ID:<input type="text"><br/>
                TIME:<input type="time"><br/>
                URL:<input type="url"><br/>
                WEEK:<input type="week"><br/>
                <input type="reset" value="reset">
                <input type="submit" value="로그인"/>
            </form>
        </fieldset>
    </body>

</html>



아래는 실행화면












iframe은 현재 사이트에 다른 사이트의 화면을 띄어주는 틀을 만드는 코드


하지만 보안상 피싱사이트에서 이 기능을 이용해


정보를 빼가 이용하므로 조심해야 한다.


예를들어 사이트 주소를 잘못첫는데 네이버가 나왔다.


그리고 id pw를 입력하면 바로 정보가 유출된다고 보면 된다.




src와 width, height를 이용해 조절한다.




<html>
    <head>
        <meta charset="UTF-8">
        <title>Iframe</title>
    </head>
    <body>
        <iframe src="07_list.html" width="500px" height="300px"></iframe>
        <!--iframe은 다른 사이트를 화면에 띄어주는 코드-->
        <!--iframe은 피싱사이트 연결에 자주 사용되어 보안상 주의해야 할 코드-->
        <!--고로 대형 사이트들은 막아놓음-->

        <iframe src="04_table.html" width="500px" height="200px"frameborder = "0" scrolling="no"></iframe>
        <!--frame의 틀과 스크롤을 없애기-->

        <iframe src="https://www.youtube.com" width="500px" height="300px"></iframe>
        <!--유튜브의 경우는 막아놨기 때문에 안나옴-->
        <!--즉 허용된 사이트만 외부 링크를 가져올 수 있다.-->

        <iframe src="https://youtube.com/embed/nM0xDI5R50E" width="500px" height="300px"></iframe>
        <!--하지만 sns공유기능에서 링크를 따와 맨 뒤의 코드 "nM0xDI5R50E" 부분을-->
        <!--https://youtube.com/embed/ 뒤에 붙이면 해당 유튜브만 따올 수 있다.-->


    </body>

</html>



실행 화면은 다음과 같다.









유튜브 링크의 경우는 다음과 같은 부분을 말한다.























예전에 https://qdgbjsdnb.tistory.com/129 에서 사용한 html 예제 파일을 이용해서 iframe을 활용해보자


기존의 html 파일의 상단에 링크 하나 추가(navi)


기존의 html 파일의 하단에 사이트 링크들 추가(footer)



먼저 압축파일을 받아 각종 사이트 대표 이미지를 받아


HTML 폴더에 img 폴더를 만들어 넣어주자


img.zip


받고나서 아래 코드 입력







navi



<ul>
    <a href="#"><li>HTML</li></a>
    <a href="#"><li>CSS</li></a>
    <a href="#"><li>JAVA-SCRIPT</li></a>
    <a href="#"><li>J-Query</li></a>
    <a href="#"><li>BOOT STRAP</li></a>
</ul>

<!--참조만 할 html 파일은 html영역, head영역 body영역 등 생략이 가능-->




다음으로 footer, 기존 틀은 생략



<a href="http://www.daum.net"target="_blank">
    <img src="img/daum.png" alt="다음 이미지" width="150" height="70"/>
</a>
<a href="http://www.google.com"target="_blank">
    <img src="img/google.png" alt="구글 이미지" width="150" height="70"/>
</a>
<a href="http://www.msn.com"target="_blank">
    <img src="img/msn.jpg" alt="MSN 이미지" width="150" height="70"/>
</a>
<a href="http://www.nate.com"target="_blank">
    <img src="img/nate.png" alt="NATE 이미지" width="180" height="70"/>
</a>
<a href="http://www.naver.com"target="_blank">
    <img src="img/naver.png" alt="네이버 이미지" width="120" height="70"/>
</a>





다음으로 페이지 합치기




<html>
    <head>
        <meta charset="UTF-8">
        <title>메인 Page</title>
    </head>
    <body>
        <iframe src="exercise_03_navi.html" width="100%" height="30" frameborder="0" scrolling="no"></iframe>
        
        <h2>메인 페이지</h2>
        <hr/>
        <br><small>NHH 엔터테인먼트</small>가 <b>가카오</b>를 상대로 특히 침해 소송을 벌인 것과 관련해,<br/>
        <br>가카오가 제기한 <mark>특허 무효</mark> 심판 3건 중 2건에서 가카오가 승소했다.<br/>
        <br><br/>
        <!--br안의 내용을 입력안하면 그냥 Enter키를 누른것과 유사-->
        <br>가카오는 14일 <del>NHH엔터테인먼트</del>의 특허 자회사 <ins>케이이노베이션</ins>이 보요 특허 침해로 제기한<br/>
        <br>특허소송과 관련해 자사가 진행한 <sup>특허 무효심판</sup>에서 승소했다고 밝혔다.<br/>
    
        <iframe src="exercise_03_footer.html" width="100%" frameborder="0" scrolling="no"></iframe>
    </body>
</html>









+ Recent posts