※이번 시간은 CSS에서 자주 사용되는 속성 중 font와 border를 다루어 보려 합니다.

font 속성은 글자의 크기, 굵기, 글꼴 등을 정의하여 주는 속성이며 border는 테두리의 속성값을 정할 수 있는 속성입니다. 

저번 시간에 다루었던 width, height와 padding, margin과 같이 많이 사용되는 속성들입니다. 

목차

1. FONT

2. BORDER

 

1. FONT

※ font 속성은 글자의 크기, 굵기, 글꼴 등을 정의하여 주는 속성입니다. 

크게 6가지의 속성을 가지며 글자의 색상은 따로 font 속성의 하위가 아닌 color 속성으로 지정할 수 있습니다.

font-style 이탤릭체 등의 글꼴의 스타일 지정
font-weight 글자 두께
font-variant 글꼴 변형 (소문자를 대문자로 바꾸는 등의)
font-size 글자 크기
line-height 줄 간격
font-family 글꼴 (굴림, 돋움, …)

 

@font-style

※font-style은 폰트의 표시 형태를 지정하는 속성으로, 폰트의 기본 형태로 표시하는 normal 값과 이탤릭체 또는 기울임 꼴로 표시하는 italic과 oblique가 있습니다.

 

@코드로 보기
    <title>font 예제</title>
    <style>
        #ex1 {
            font-style: italic;
        }
    </style>
</head>
<body>
    <p>기본</p>
    <p id="ex1">이텔릭체</p>
</body>
</html>

 

 

@font-weight

※font-weight는 폰트가 표시되는 굵기를 지정하는 속성입니다.

100~900 사이의 굵기 단계를 표시하는 수치값이나 normal, bold 등의 키워드로 선언할 수 있습니다. 

 

@코드로 보기
    <title>font 예제</title>
    <style>
        #ex1 {
            font-weight: 100;
        }
        #ex2 {
            font-weight: 700;
        }
        #ex3 {
            font-weight: bold;
        }
    </style>
</head>
<body>
    <p>기본</p>
    <p id="ex1">굵기 100</p>
    <p id="ex2">굵기 700</p>
    <p id="ex3">bold 속성</p>
</body>
</html>

 

@font-variant

font-variant는 영문 폰트의 소문자 표시 형태를 변경하는 속성입니다.

  • font–variant–position : 폰트의 표시 위치를 지정하는 속성, 화학식의 윗첨자, 아랫첨자 등과 같은 형태
  • font–variant–ligatures : 발음 기호 형태와 [æ] 같은 묶음 표시 형태를 표시하는 속성
  • font–variant–caps : 대소 문자 형태를 변경하는 속성
  • font–variant–numeric : 분수나 회계용 숫자 등의 표시 형태를 변경하는 속성
  • font–variant–alternates : 폰트의 장식 요소나 특수 문자의 표시 형태를 변경하는 속성
  • font–variant–east–asia : 한자나 일본어의 폰트를 약자 형식으로 변경할 수 있는 속성

 

@font-size

font-size는 폰트의 크기를 지정하는 속성으로, xx-small, x-small, small, medium, large, x-large, xxlarge과 같은 절대 크기와 smaller, larger와 같은 상대 크기 등을 사용할 수 있습니다. (일반 웹 페이지에서는 px를 사용)

 

@font-family

font-family는 텍스트의 폰트를 지정하는 속성으로, 속성 값은 복수로 지정할 수 있으며 복수 지정 시에는 (,)로 구분합니다. 지정된 순서대로 표시할 수 있는 폰트를 찾게 됩니다.

저장되어 있는 폰트 이외에도 URL을 통하여 공유된 폰트를 사용할 수도 있습니다.

 

@코드로 보기
    <style>
        body {
            font-family: '궁서';
        }
    </style>

위 코드처럼 저장되어 있는 폰트를  사용하거나

 
@코드로 보기
    <style>
        @font-face {
            font-family: 'LOTTERIADDAG';
            font-weight: normal;
            font-style: normal;
        }
        body {
            font-family: 'LOTTERIADDAG';
        }
    </style>

URL을 통하여 공유된 폰트 사용이 가능합니다.

 

 

2. BORDER

※border는 테두리의 속성값을 정할 수 있는 속성입니다.

border-top, right, bottom, left 방식으로 방향마다 다른 속성값을 정하여 줄 수 있으며 축약형 명령어로 색, 두께, 스타일 등을 한 번에 지정하여 줄 수 있습니다. 

  • border-width : 선의 두께를 정합니다. 기본값은 medium입니다. 지정된 값 또는 px 등의 수치로 입력합니다.
  • border-style : 선의 모양을 정합니다. 기본값은 none입니다.
  • border-color : 선의 색을 정합니다. 기본값은 꾸미려는 요소의 색(color)입니다.
  • border-radius : 테두리의 굴곡정도를 정합니다. px, % 등의 수치로 입력합니다.
  • initial : 기본값으로 설정합니다.
  • inherit : 부모 요소의 속성값을 상속받습니다.

@border-width

-medium, thick, thin, length, initial, inherit의 기본값을 가지며 px 등의 수치로도 입력합니다.

 

@border-style

  • none  :  기본값 표시하지 않음
  • solid : 실선으로 표시
  • dotted : 점선으로 표시
  • double : 이중 실선으로 표시
  • ridge : 돌출된 선으로 표시
  • groove : 들어간 선으로 표시
  • inset : 보더 안쪽이 들어간 선으로 표시
  • outset : 보더 안쪽이 돌출된 선으로 표시
  • dashed : 파선으로 표시
  • hidden : 표시하지 않음

 

@코드로 보기
    <style>
        body {
            text-align: center;
        }
        #box {
            width: 200px;
            height: 200px;
            border: 2px solid black;
            border-radius: 5px;
        }
    </style>

 

200*200px 크기의 테두리, 2px굵기의 실선, 검은색의 테두리 속성값, 5px의 테두리 굴곡 적용

CSS(Cascading Style Sheet)는 HTML 문서의 스타일이나 레이아웃 등 디자인 서식을 작성하는 언어

 

※공부를 진행하다 보니 CSS의 속성 중 사용빈도, 활용도가 높은 속성들이 정리가 되었습니다.

그래서 이번 시간은 자주 사용되는 속성들을 자세히 파해쳐볼까 하여 준비하였습니다.

이 부분도 내용이 많은 편이기 때문에 파트를 나누어 정리해 보도록 하겠습니다.

(1) 편에선 width와 height, margin과 padding 속성에 대하여 정리해 보았습니다.

목차

1. width와 height

2. margin과 padding

 

1. width와 height

※width와 height속성은 단어의 뜻처럼 가로, 세로의 길이를 의미합니다. 값의 단위는 %  px, vw와 vh가 있습니다. px는 픽셀 값을 말하며 % 는 상위 컨테이너에서 차지하는 비율, vw와 vh는 html, body에 대한 비율을 말합니다.

width, height 속성은 padding, borders, margins 가 포함된 길이가 아닙니다. padding, borders, margins과과 별개의 넓이와 높이 값을 가집니다.

 

@속성

  • auto : 브라우저가 너비와 높이를 계산한다. 기본값이다.
  • length(길이) : 너비와 높이를 부동 소수점 숫자 뒤에 절대 단위 지정자( cm , mm , in , pt , pc ) 또는 상대 단위 지정자( em , ex , px )가 오는 값을 지정한다.
  • %(퍼센트) : 너비와 높이를 퍼센트로 폭을 적용한다.
  • inherit : 부모 요소로부터 값을 상속받는다.
  • VW, VH : html, body의 너비와 높이값에 대한 비율로 적용한다.
  • max-width, max-height : 최대로 가질 수 있는 너비, 높이 값을 지정합니다. 지정한 값 이하로만 사이즈가 적용됩니다.
  • min-width, min-heigth : 최소로 가질 수 있는 너비, 높이 값을 지정합니다. 지정한 값 이상으로만 사이즈가 적용됩니다.

 

 

2. margin과 padding

※margin과 padding 속성은 각각 외부여백과 내부여백을 의미합니다. border를 기준으로 보면 border와 content 사이의 여백을 padding, border와 다른 요소와의 여백을 margin이라 합니다.

 

<!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;
            border: 1px solid black;
            padding: 10px;
            margin: 20px;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

위의 코드처럼 content자체의 크기는 100*100이지만 1px크기의 border와의 내부여백 10px, border를 기준으로 한 외부여백이 20px로 적용된 것을 확인할 수 있습니다.

margin의 경우 위의 사진처럼 요소가 세로로 배치되어 있을 시 서로의 margin값을 공유하여 하나의 값으로 적용되며 두 요소의 margin값이 다르다면 더 큰 값으로 적용합니다. 

 

그러나 가로로 배치된 경우에는 요소 각각의 margin값이 적용되어 첫 번째 요소의 값과 두 번째 요소의 값을 합친 크기의 여백이 생기게 됩니다. 이점을 유의하여 배치해야 할 것입니다.

 

 

@margin을 이용한 가운데 정렬방법

            margin: 0px auto;

위 코드처럼 상단, 하단에 대한 값을 주고 우측, 좌측에 대한 값을 auto로 지정하면 좌, 우 여백을 같은 값으로 적용하여 요소가 가운데로 정렬됩니다.

 

 

 

@속성 값 입력 방법

            padding: 10px; /*top right bottom left 각각 10px로 적용*/
            padding: 10px 20px; /*top,bottom이 10px, right,left가 20px로 적용*/
            padding: 10px 20px 30px; /*top이 10px right,left가 20px bottom이 30px*/
            padding: 10px 20px 30px 40px; /*top right bottom left 순서로 적용*/

 

CSS에서 box형태의 속성값들은 거의 상단, 하단, 우측, 좌측의 순서로 값이 입력됩니다.

값이 하나일 때에는 전체 값이 적용되며 두 개일 경우 상단과 하단, 우측과 좌측으로 묶여 적용됩니다.

세 개일 경우는 상단, 우측과 좌측을 묶고 하단으로 적용되어 상단 10px, 우측, 좌측 20px, 하단 30px 값이 적용되는 것을 볼 수 있습니다. margin도 이와 같은 방식으로 적용되며 대부분의 box형태의 속성값들이 이와 같은 방식을 사용합니다.

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

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

목차

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 : 그리드 아이템들을 수평(행 축) 정렬

 

 

+ Recent posts