※홈페이지를 만들면서 필수적으로 필요한 화면 중 하나가 로그인 화면이라고 생각합니다.

이번 시간에는 간단한 로그인 폼을 만들어 보고 화면을 구성하면서 사용되는 속성값들에 대해서 하나씩 살펴보도록 하겠습니다.

목차

1. 로그인 폼 소스 보기

2. 로그인 폼 <body>

3. 로그인 폼 CSS

 

1. 로그인 폼 소스 보기

로그인 폼

 

<!DOCTYPE html>
<html lang="ko">
<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>
    <style>
        * {padding: 0px; margin: 0px;}
        form {
            width: 350px;
            margin: 0 auto;
            padding: 20px;
            border: 1px solid black;
            border-radius: 5px;
        }
        legend {
            font-size: 16px;
            font-weight: bold;
            padding-left: 5px;
            padding-bottom: 10px;
        }
        #loginbox label {float: left; width: 120px; font-size: 15px; margin-left: 20px;}
        li {list-style-type: none; margin-bottom: 5px;}
        fieldset {
            border: 1px solid #ccc;
            margin-bottom: 30px;
            padding: 10px;
        }
        #join {
            border: none;
            margin-top: 20px;
        }
        #joinbox {
            text-align: center;
            border: none;
            padding: 10px;
        }
        #joinbox button {
            font-size: 15px;
            padding: 5px;
            border-radius: 5px;
            border: 1px solid black;
        }
        #joinbox button:hover {
            background-color: gray;
        }
        #mailbox label {
            font-size: 12px;
            margin-left: 20px;
        }
        #mailbox input {
            vertical-align: middle;
        }
    </style>
 
</head>
<body>
    <form id="login">
        <fieldset id="loginbox">
            <legend>로그인</legend>
                <ul>
                    <li><label for="user-id">아이디</label><input id="user-id" type="text" placeholder="공백없이 2자 이상" autofocus required></li>
                    <li><label for="user-pw">비밀번호</label><input id="user-pw" type="password" placeholder="특수기호 포함 8자 이상" autocomplete="off" required></li>
                    <li><label for="user-pws">비밀번호확인</label><input id="user-pws" type="password" autocomplete="off" required></li>
                    <li><label for="user-email">이메일</label><input id="user-email" type="email" placeholder="abc@naver.com" autocomplete="off" required></li>
                    <li><label for="user-tel">전화번호</label><input id="user-tel" type="tel"></li>
                </ul>
        </fieldset>

        <fieldset id="mailbox">
            <legend>광고성 메일 수신여부</legend>
            <label for="maily">메일수신</label><input id="maily" type="radio" name="mail" value="y">
            <label for="mailn">메일수신 안함</label><input id="mailn" type="radio" name="mail" value="n" checked>
        </fieldset>

        <fieldset id="joinbox">
            <button type="submit">가입하기</button>
        </fieldset>
    </form>
</body>
</html>
 

2. 로그인 폼 <body>

<body>
    <form id="login">
        <fieldset id="loginbox">
            <legend>로그인</legend>
                <ul>
                    <li><label for="user-id">아이디</label><input id="user-id" type="text" placeholder="공백없이 2자 이상" autofocus required></li>
                    <li><label for="user-pw">비밀번호</label><input id="user-pw" type="password" placeholder="특수기호 포함 8자 이상" autocomplete="off" required></li>
                    <li><label for="user-pws">비밀번호확인</label><input id="user-pws" type="password" autocomplete="off" required></li>
                    <li><label for="user-email">이메일</label><input id="user-email" type="email" placeholder="abc@naver.com" autocomplete="off" required></li>
                    <li><label for="user-tel">전화번호</label><input id="user-tel" type="tel"></li>
                </ul>
        </fieldset>

        <fieldset id="mailbox">
            <legend>광고성 메일 수신여부</legend>
            <label for="maily">메일수신</label><input id="maily" type="radio" name="mail" value="y">
            <label for="mailn">메일수신 안함</label><input id="mailn" type="radio" name="mail" value="n" checked>
        </fieldset>

        <fieldset id="joinbox">
            <button type="submit">가입하기</button>
        </fieldset>
    </form>
</body>

※우선 각각 다른 속성값을 주기 위해 form id로 "login"을 각 필드마다 "loginbox", "mailbox", "joinbox"로 구분을 지어놓았습니다. 그리고 <ul><li>를 통하여 각 항목, <input>으로 입력란을 만들어 준 뒤 이를 <label>로 묶어주었습니다.

 

<label for="user-id"> 아이디 </label><input id="user-id" type="text" placeholder="공백 없이 2자 이상" autofocus required>

 

<label for="묶어줄 아이디"><id="묶어줄 아이디">로 활용하시면 됩니다.

<input type=""> : text, password, email, tel 등 원하는 입력방식에 맞추어 지정해 주시면 됩니다.

<input placeholder="내용"> :  내용을 입력하면 사라지는 힌트 개념이라고 생각하시면 됩니다.

<input autofocus> : 화면이 실행될 시 커서가 위치할 수 있도록 해줍니다.

<input required> : 필수 입력항목을 지정하는 것으로 submit버튼으로 넘어갈 때에 지정된 항목이 비어있다면 항목을 채우라는 메시지를 보냅니다. 

<input autocomplete> : 자동완성기능 사용여부를 정하는 속성입니다. on과 off를 사용합니다.

<input value="보여줄 값" readonly> : 값을 입력할 수 없고 입력되어 있는 값을 보여주기만 하는 속성입니다.

 

<label for="maily"> 메일수신 </label><input id="maily" type="radio" name="mail" value="y">

<label for="mailn"> 메일수신 안 함 </label><input id="mailn" type="radio" name="mail" value="n" checked>

 

<input type="radio"> : 라디오버튼 타입을 생성합니다.

<input name> : 같은 이름을 가진 버튼끼리는 한 가지 항목만 선택됩니다.

<input value="값"> : submit버튼으로 정보를 넘길 때에 들어갈 값을 입력합니다.

<input checked> : 화면이 실행될 시 체크가 되어있는 항목을 지정합니다. 

 

3. 로그인 폼 CSS

    <style>
        * {padding: 0px; margin: 0px;}
        form {
            width: 350px;
            margin: 0 auto;
            padding: 20px;
            border: 1px solid black;
            border-radius: 5px;
        }
        legend {
            font-size: 16px;
            font-weight: bold;
            padding-left: 5px;
            padding-bottom: 10px;
        }
        #loginbox label {float: left; width: 120px; font-size: 15px; margin-left: 20px;}
        li {list-style-type: none; margin-bottom: 5px;}
        fieldset {
            border: 1px solid #ccc;
            margin-bottom: 30px;
            padding: 10px;
        }
        #join {
            border: none;
            margin-top: 20px;
        }
        #joinbox {
            text-align: center;
            border: none;
            padding: 10px;
        }
        #joinbox button {
            font-size: 15px;
            padding: 5px;
            border-radius: 5px;
            border: 1px solid black;
        }
        #joinbox button:hover {
            background-color: gray;
        }
        #mailbox label {
            font-size: 12px;
            margin-left: 20px;
        }
        #mailbox input {
            vertical-align: middle;
        }
    </style>

※간단한 내용이며 한눈에 보기 위해 따로 CSS로 만들지 않고 <style>로 한 번에 입력하였습니다.

 

        form {
            width: 350px;
            margin: 0 auto;
            padding: 20px;
            border: 1px solid black;
            border-radius: 5px;
        }

전체적인 form에 대한 속성값을 지정해 줍니다.

margin 0 auto : left, right margin을 auto로 주어 가운데 정렬이 되도록 했습니다.

 

li {list-style-type: none; margin-bottom: 5px;}

list-style-type:none : <li> 항목 앞 기호를 없애기 위해 스타일 값을 none으로 지정해 주었습니다.

 

 #loginbox label {float: left; width: 120px; font-size: 15px; margin-left: 20px;}

float:left : <label></label>의 항목값이 좌측으로 정렬되도록 설정하였습니다.

 

        #joinbox button {
            font-size: 15px;
            padding: 5px;
            border-radius: 5px;
            border: 1px solid black;
        }
        #joinbox button:hover {
            background-color: gray;
        }

button:hover {backgrond-color:gray} : 버튼에 마우스가 올라갔을 때에 버튼 색상이 변경되도록 하였습니다.

 

 

※이렇게 간단하게 로그인 폼을 구성해 보았습니다. 

나머지 width, margin, padding 값들을 통하여 규격을 맞추어 디자인하였습니다. 

규격을 정하는 부분들은 직접 수치들을 변경해 보면서 진행해야 전체적인 구상을 할 수 있는 눈이 생길 것 같습니다.

※CSS에서 레이아웃 페이지를 나눌 때에 주로   플렉스(Flex)와 그리드(Grid)를 많이 사용합니다.

flexbox는 한 방향 레이아웃 시스템(1차원), grid는 두 방향 레이아웃 시스템(2차원)으로 이번 시간은 그리드에 대해서 알아보려 합니다. 그리드 레이아웃(Grid Layout)은 페이지를 여러 주요 영역으로 나누거나, 크기와 위치 및 문서 계층 구조의 관점에서 HTML 기본 요소로 작성된 컨트롤 간의 관계를 정의하는 데 사용합니다.

테이블과 마찬가지로 그리드 레이아웃은 세로 열과 가로 행을 기준으로 요소를 정렬할 수 있습니다. 하지만, 테이블과 달리 CSS 그리드는 다양한 레이아웃을 훨씬 더 쉽게 구현할 수 있습니다. 예를 들어, 그리드 컨테이너 속 자식 요소를, 마치 CSS로 일일이 위치를 지정해 준 것처럼, 실제로 겹치게 층을 지면서 자리를 잡도록 각 요소의 위치를 지정해 줄 수도 있습니다. 이번 시간은 간단한 기본 구조와 속성에 대해 알아보고 다음시간에 아이템배치방법이나 축약어등을 다루어 보도록 하겠습니다.

목차

1. GRID의 기본구조

2. GRID의 속성

 

1. GRID의 기본구조

@그리드 선언

grid 레이아웃을 위한 html의 기본 구조는 container(부모)와 item(자식)으로 이루어져 있습니다.

flex와 마찬가지로 CSS에 display : grid; 를 선언 후 <body>에서 형태를 잡아야 합니다.

 

   @코드로 보기
<!DOCTYPE html>
<html lang="ko">
<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>Document</title>
    <style>
        .container {
            display: grid; /*그리드 선언*/
            grid-template-columns: 200px 200px 200px;/*열 생성*/
            grid-template-rows: repeat(3, 100px); /*행 생성 repeat(생성개수, 크기) = 100px크기를 3개 생성*/
            background-color: #bbb;
        }
        .box:nth-child(even) {
            background-color: #eee; /*box클래스의 짝수(even) 자식들의 속성*/
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
        <div class="box">5</div>
        <div class="box">6</div>
    </div>
</body>
</html>

 

 

 

2.  GRID의 속성

@Grid container 속성 (부모 속성)

  • grid-template-row : 행(Track)의 크기를 정의
  • grid-template-columns: 열(Track)의 크기를 정의
  • grid-template-areas : 영역 이름을 참조해 템플릿 생성
  • grid-template : grid-template-xxx의 단축 속성
  • row-gap(grid-row-gap) : 행과 행 사이의 간격(Line)을 정의
  • column-gap(grid-column-gap) : 열과 열 사이의 간격(Line)을 정의
  • gap(grid-gap) : xxx-gap의 단축 속성
  • grid : grid-template-xxx과 grid-auto-xxx의 단축 속성

@Grid item 속성 (자식 속성)

  • grid-row-start : 그리드 아이템(Item)의 행 시작 위치 지정
  • grid-row-end : 그리드 아이템의 행 끝 위치 지정
  • grid-row : grid-row-xxx의 단축 속성(행 시작/끝 위치)
  • grid-column-start : 그리드 아이템의 열 시작 위치 지정
  • grid-column-end : 그리드 아이템의 열 끝 위치 지정
  • grid-column : grid-column-xxx의 단축 속성(열 시작/끝 위치)
  • grid-area : 영역 이름을 설정하거나, grid-row와 grid-column의 단축 속성
  • align-self : 단일 그리드 아이템을 수직(열 축) 정렬
  • justify-self : 단일 그리드 아이템을 수평(행 축) 정렬
  • order : 그리드 아이템의 배치 순서를 지정
  • z-index : 그리드 아이템의 쌓이는 순서를 지정

@grid-template-xxx속성

  • grid-template-row
  • grid-template-columns
  • grid-template-areas
  • grid-template

@gap속성 : 간격조절 가능

  • row-gap(grid-row-gap) : 행과 행 사이의 간격(Line)을 정의
  • column-gap(grid-column-gap) : 열과 열 사이의 간격(Line)을 정의
  • gap(grid-gap) : xxx-gap의 단축 속성

@정렬속성 (justify-items / align-items)

  • align-content  : 그리드 콘텐츠(Grid Contents)를 수직(열 축) 정렬
  • justify-content : 그리드 콘텐츠를 수평(행 축) 정렬
  • align-items : 그리드 아이템(Items)들을 수직(열 축) 정렬
  • justify-items : 그리드 아이템들을 수평(행 축) 정렬

 

 

※TRANSFORM 속성은 요소에 회전, 크기 조절, 기울이기, 이동 효과를 부여할 수 있습니다.

TANSITION 속성은 속성 변경이 즉시 영향을 미치게 하는 대신, 그 속성의 변화가 일정 기간에 걸쳐 일어나도록 해 주는 것으로 두 가지를 잘 활용한다면 다양한 애니메이션 적 효과를 줄 수 있습니다.

 

목차

1. TRANSFORM(변형)

2. TRANSITION(변화)

 

1. TRANSFORM (변형)

TRANSFORM 속성은 요소에 회전, 크기 조절, 기울이기, 이동 효과를 부여할 수 있습니다.

크게 2차원 변형과 3차원 변형으로  2가지의 형태를 가집니다.

  • 2차원 변형 : 웹 요소를 단순히 수평이나 수직으로 이동하고 회전하는 것
  • 3차원 변형 : x축과 y축에 원근감을 주는 z 축을 추가해 변형시키는 것

@2D 변형의 속성

rotate() 요소를 회전, 단위는 deg
scale(x,y) 요소의 너비와 높이를 같이 변경, 단위는 등배단위
scaleX() 요소의 너비만 변경, 단위는 등배단위
scaleY() 요소의 높이만 변경, 단위는 등배단위
skew(x,y) X축과 Y축에 따라 기울기 변환, 단위는 deg
skewX() X축을 기준으로 기울기 변환, 단위는 deg
skewY() Y축을 기준으로 기울기 변환, 단위는 deg
translate(x,y) 요소의 이동을 x축, y축으로 이동, 단위는 px
translateX() 요소를 x축으로 이동, 단위는 px
translateY() 요소를 y축으로 이동, 단위는 px
matrix(n,n,n,n,n,n) 6개의 매개변수를 한번에 처리
matrix(scaleX(), skewY(), skewX(), scaleY(), translateX(), translateY())

 

@코드로 보기
<!DOCTYPE html>
<html lang="ko">
<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>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: orange;
        }
        .box:hover {
            transform: scale(1.5,1.5);
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

위와 같이 적용하면 box에 마우스가 닿으면 x, y축이 각 1.5배씩 증가하게 됩니다.

 

 

@3D 변형의 속성

rotate3d(x, y, z, angle) 3D회전을 한번에 정의
rotateX() X축을 중심으로 3D회전을 정의
rotateY() Y축을 중심으로 3D회전을 정의
rotateZ() Z축을 중심으로 3D회전을 정의
scale3d(x, y, z) 3D스케일(크기) 변화를 한번에 정의
scaleX() X축을 중심으로 3D크기를 정의
scaleY() Y축을 중심으로 3D크기를 정의
scaleZ() Z축을 중심으로 3D크기를 정의
translate3d(x, y, z) 3D적 요소 이동을 한번에 정의
translateX() X축을 중심으로 3D이동을 정의
translateY() Y축을 중심으로 3D이동을 정의
translateZ() Z축을 중심으로 3D이동을 정의
matrix3d
(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n)
16개값으로 구성되어 4X4행렬로 모든 3Dtransform값을 정의
perspective(n) 3D 변형 요소의 투시도를 지정

 

 

 

2. TRANSITION(변화)

※CSS 속성을 변경할 때 애니메이션 속도를 조절하는 방법을 제공합니다. 속성 변경이 즉시 영향을 미치게 하는 대신, 그 속성의 변화가 일정 기간에 걸쳐 일어나도록 할 수 있습니다.

 

linear  등속 변화, cubic-bezier(0, 0, 1, 1)과 같다.
ease 느리게 시작했다가 빨라졌다 다시 느려진다. cubic-bezier(0.25, 0.1, 0.25, 1)과 같다.
ease-in 점점 빨라진다. cubic-bezier(0.42, 0, 1, 1)과 같다.
ease-out 점점 느려진다. cubic-bezier(0, 0, 0.58,1)과 같다.. 
ease-in-out 처음과 끝이 느리다.. cubic-bezier(0.42, 0, 0.58,1)와 같다.
cubic-bezier(N,N,N,N) 값을 입력하여 가/감속을 조작한다. 

※FONT와 TEXT는 디자인적인 부분이나 가독성 측면에서 매우 중요한 요소 중 하나입니다.

CSS를 활용하여 TEXT에 크기, 글꼴, 효과등을 주거나 정렬하는 방법을 알아보도록 하겠습니다.

 

목차

1. FONT

2. TEXT

 

1. FONT

폰트는 크게 4가지의 속성을 가집니다. 각 속성에 대해 자세히 알아보도록 하겠습니다.

font-size 길이(px, em, ex), 백분율(%; 140%) 폰트의 크기를 지정
font-family 글자체(굴림체, 궁서, 맑은 고딕 등) 폰트 모양을 지정
font-style normal, italic, oblique 폰트 형태(이태릭체 등)를 지정
font-weight normal, bold, bolder, lighter, 숫자(100 200, ‥ ,900) 폰트의 굵기를 지정

 

@font-size 속성

글꼴의 크기를 지정하는 속성입니다.

keyword medium(기본 값), xx-small, x-small, small, large, x-large, xx-large, smaller, larger
length px, em 등 고정 수치로 지정합니다.
% 부모 요소의 font-size 기준의 퍼센트로 지정합니다.

 

@font-family 속성

글꼴을 지정하는 속성입니다.

 

font-family: '고딕', '돋움';

첫 번째 글꼴을 사용하되 첫 번째 글꼴이 없을 시 ', '로 구분된 두 번째 글꼴을 사용하는 방식입니다.

글꼴은 더 추가할 수 있습니다.

 

 

@font-weight 속성

글꼴의 굵기를 지정하는 속성입니다.

normal 기본 값 (400)
bold 굵게 표현(700)
bolder 부모 요소 보다 두껍게 표현
lighter 부모 요소 보다 얇게 표현
number 100, 200, 300, 400, 500, 600, 700, 800, 900 (클수록 더 두껍게 표현)

 

@font-style 속성

글꼴의 스타일을 지정하는 속성입니다.

normal font-family 내에 분류된 기본 값
italic italic 스타일로 표현합니다. (italic)
oblique oblique 스타일로 표현합니다. (기울임)

 

2. TEXT

 

@text-decoration 속성

텍스트의 장식을 지정하는 속성입니다. 아래 속성들의 단축 속성으로, 기본 값은 차례대로 아래 3가지 속성의 값입니다. 

none 텍스트 꾸밈을 생성하지 않음 ( 기본값 )
underline 밑줄로 꾸밈을 설정
overline 윗줄로 꾸밈을 설정
line-through 중간을 지나는 줄로 꾸밈을 설정

@text-decoration-style 속성

solid 한줄 스타일 ( 기본 값 )
double 이중선 스타일
dotted 점선 스타일
dashed 파선 스타일
wavy 물결 스타일

 

@text-indent 속성

텍스트의 들여 쓰기를 지정하는 속성입니다. 

length px, em 등 고정 수치로 지정. 음수 허용
% 부모 요소의 width를 기준으로 퍼센트로 지정

 

@text-align 속성

텍스트의 정렬을 지정하는 속성입니다. text 가운데 정렬을 위해 많이 사용됩니다.

left 텍스트를 왼쪽으로 정렬
right 텍스트를 오른쪽으로 정렬
center 텍스트를 중앙으로 정렬
justify 텍스트를 라인 양쪽 끝으로 붙여서 정렬. (마지막 라인은 정렬 하지 않음)

 

@text-align과 display의 관계

 -  text-align은 inline-level에 적용

 -  text-align은 block-level에 적용할 수 없음 

 

block 요소를 가운데 정렬 하고자 한다면 margin의 auto 값을 이용해서 양쪽 여백값을 조절하면 됩니다. 

- 인라인 요소 : text-align (center) 

- 블록 요소 :  margin (auto) 

 

 ex) margin:0 auto;

-첫 번째 0은 top, bottom의 여백, 두 번째 auto부분은 left, right의 여백입니다. 좌우 여백을 auto로 줘서 자동으로 양쪽 여백을 같게 만들어 주면 가운데로 정렬됩니다.

 

+ Recent posts