1장. css 개념 이해
예제 1-1) HTML에서 CSS제거해 보기
본 예제에서는 HTML과 CSS의 관계를 이해하고 css를 사용하는 이유를 알아보기 위해 웹 페이지의 소스코드 저장하여 html로만 이루어진 사이트와 css가 적용된 사이트를 비교하여봅니다.
step-1> 웹브라우저 실행하여 url 입력하기
- 웹 브라우저를 실행하고 상단의 URL 창에 다음 주소를 입력하고 엔터를 칩니다.
- http://www.naver.com
step-2> 소스 코드 다운받기
웹 브라우저 화면에서 오른쪽 버튼을 눌러 다른 이름으로 저장을 선택하여 적당한 곳에 저장합니다.
step-3> 파일 열기
저장을 한 폴더에 가서 확인을 해보면 NAVER_files과 NAVER.html 두 개의 파일이 저장되어 있습니다. 이 중 NAVER_files을 삭제한 뒤, NAVER.html 파일을 실행시킵니다.
step-4> 결과 확인
html로만 이루어진 NAVER화면과 CSS가 적용되어 있던 기존 NAVER화면을 비교해봅시다.
예제 1-2) css 작성과 실행하기
CSS 기본 작성법과 HTML문서에서의 위치와 동작원리등을 살펴보기위한 예제 입니다.
코드 설명
- h2 태그를 셀렉터로 지정하고
blue
컬러를 지정.
예제 1-3) css 포함 방법 3가지
내부
, 외부
, 인라인
3가지 방법을 이용해 css 를 html 문서에 포함하는 방법을 살펴봅니다.
코드 설명
- 내부CSS 정의에 따라 모든 h2는
darkorange
색상으로 표현됨. 첫번째 h2
는 인라인 정의에 따라 새롭게fuchsia
색상으로 변경됨.두번째 h2
는 기본 내부CSS 적용으로darkorange
로 출력.세번째 h2
는 클래스 지정으로 외부 CSS에 선언된red
로 출력.
2장. 셀렉터와 스타일 속성
예제 2-1) 기본 셀렉터
본 예제에서는 태그, 클래스, 아이디의 세가지 기본 셀렉터에 대해 실습 합니다.
코드 설명
- 세개의 <h2> 태그가 사용되었고 각각 태그, 클래스, 아이디 셀렉터를 사용해 글자색을 지정.
예제 2-2) 기본 셀렉터 조합
셀렉터를 조합해 좀 더 정밀하게 특정 요소를 선택할 수 있습니다.
코드 설명
header
클래스와div.header
클래스 선택자는 각각 붉은색과 파란색을 출력h1,h2
태그는 모두 녹색을 출력text-1:
header 클래스 적용으로 red.text-2:
아무런 CSS도 적용되지 않음.text-3:
div.header 클래스 적용으로 blue.text-4,5,6:
h1,h2 셀렉터 적용으로 녹색출력.
예제 2-3) 컬러 속성
컬러를 표현하기 위해 색상이름, HEX(#)코드, RGB코드로 나타내는 방식을 실습을 통해 알아 봅니다.
코드 설명
- 글자색은 red, 배경색은 black 으로 지정.
- red의 hex 표기는 r,g,b 각각 두자리 조합으로
#FF0000
. - red의 rgb 표기는
rgb(255,0,0)
. - black 의 경우도 같은 방식임.
예제 2-4) 텍스트 및 폰트 속성
폰트, 글자크기, 글자 두께, 글자 모양, 글자 정렬등의 텍스트 및 폰트관련 속성 실습 예제 입니다.
코드 설명
- h1 태그에
Times New Roman
폰트 적용. - 다른 텍스트는 브라우저 설정에 따라 출력됨(
대부분 굴림
계열임). 2em
은 기본 텍스트 크기의2배
크기.text-align
속성에 따라 가운데 혹은 우측정렬.
예제 2-5) 텍스트 정렬 속성
텍스트를 정렬하는 text-align 속성과 vertical-align 속성을 이용해 이미지와 텍스트를 정렬하는 예제 이니다.
코드 설명
- img 태그에 적용된 vertical-align 속성에 따른 배치 확인
예제 2-6) 링크 속성
다양한 css속성을 사용한 하이퍼링크 실습 예제 입니다.
2-6.html
코드 설명
- 링크의 기본 컬러는
red
이고 클릭해서 방문하면blue
로 변경. text-decoration: none
으로 링크 텍스트에밑줄 없음
.- 마우스가 링크에 올라가면(hover) orange 컬러로 변하고 클릭하는 동안에는 green컬러에 밑줄이 생김.
3장. 박스 모델과 포지셔닝
예제 3-1) CSS 단위
본 예제에서는 css에서 사용하는 단위에 대해 알아봅니다. px와 em, rem을 통해 절대 단위와 상대 단위의 차이를 이해합니다.
3-1.html
코드 설명
em
의 경우 상위 요소인body
의 글자 크기에 따라 기준이 변함.rem
은최상위 요소
를 따르므로 브라우저 자체 설정이 바뀌기 전까지 기준이 변하지 않음.
예제 3-2) 기본 박스모델
본 예제에서는 css의 박스모델에 대해서 알아봅니다. 파일을 생성하고 박스 모델을 이해하기위해 다음과 같이 padding과 margin값을 설정하여 코드를 작성합니다. 명확하게 확인할 수 있도록 border을 이용해 테두리선 또한 적용합니다.
3-2.html
코드 설명
em
의 경우 상위 요소인body
의 글자 크기에 따라 기준이 변함.rem
은최상위 요소
를 따르므로 브라우저 자체 설정이 바뀌기 전까지 기준이 변하지 않음.
개발자도구 실행
크롬 브라우저에서 키보드의 F12버튼을 클릭하여 개발자도구를 실행합니다.
박스모델 확인하기
Elements 탭에서 다음과 같이 박스모델을 확인합니다.
예제 3-3) position 설정을 통한 박스 배치
본 예제에서는 position 속성을 통해 html 요소들의 위치를 지정하고 레이아웃을 구성하는 방법을 알아봅니다.
3-3.html
코드 설명
- 실행시 브라우저 폭이 좁을경우 Box-4가 Box-1 위에 중첩됨.(크기 변경해 가면서 변화 확인)
- box1을 기준으로 box2, box3는 position:relative로 상대 위치 지정.
- box4는 절대위치로 left, top 속성으로 위치 지정.
- box5는 고정위치로 화면크기가 변해도 항상 지정된 위치에 표시됨.
예제 3-4) float 속성
float 속성을 이용해 이미지의 높이 영역에 텍스트를 배치하는 예제 입니다.
3-4.html
코드 설명
- 이미지와 텍스트 블럭을 나란하게 배치.
- 텍스트는 양쪽정렬을 사용하고 img 태그의 float속성을 left 로 지정함.
- 제대로 결과를 확인하려면 텍스트의 양이 충분하거나 브라우저 폭을 줄여야 함.
- .box 클래스를 사용하는 4개의 박스를
float:left
를 사용해 차례로 배치. - box4 에 클래스 적용을 안해도 왼쪽에 붙게 되므로
clear:left
속성을 추가해야 함.(소스 수정해서 확인해 볼것)
예제 3-5) display 속성 변경
html 요소들의 인라인 레벨과 블록 레벨에 대해 이해하고, 인라인 레벨 및 블록 레벨로 변경하는 방법을 알아봅니다.
step-1> 소스 코드 작성
<!doctype html>
<html>
<head>
<title>display example</title>
</head>
<body>
<h1>Text-1</h1>
<p>Text-2</p>
<a>Text-3</a>
<span>Text-4</span>
</body>
</html>
step-2> 브라우저에서 확인하기
브라우저에서 실행 결과를 확인 합니다. F12
를 눌러 개발자 도구
를 실행시키고, 각 요소들에 커서를 가져가 요소들이 영역을 어떻게 차지하는지 확인합니다. 아래 결과와 같이 h태그와 p태그
는 한 줄을, a태그와 span태그
는 각 요소의 너비만큼의 영역을 차지합니다.
step-3> 인라인, 블록 레벨 변경
h1은 inline 으로 p는 inline-block, a는 block 으로 변경 합니다.
<style>
h1{
display: inline;
}
p{
display: inline-block;
}
a{
display: block;
}
</style>
3-5.html
코드 설명
- h1(Text-1)과 p(Text-2) 는 원래 블럭 속성이지만 변경된 속성으로 나란하게 배치.
- a(Text-3)와 span(Text-4)은 나란하게 있었지만 변경된 속성으로 한줄씩 배치.
예제 3-6) display 속성을 활용한 박스 배치
display 속성으로 다양한 박스를 정의하고 배치하는 실습 예제 입니다.
3-6.html
코드 설명
- inline 박스는 나란히 배치되지만 높이나 크기를 가질수 없음.
- inline-block 박스는 나란히 배치되면서 블럭의 속성들을 사용할 수 있음.
- 소스의
inline
클래스에서 width, height 는 무시됨. <h2>Hello</h2>
는display:none
속성으로 화면에 보이지 않음.
예제 3-7) 다단 레이아웃 구성
화면의 콘텐츠를 다단으로 구성하는 경우 박스 요소들을 inline-block
으로 지정한 다음 width 의 비율을 조정해 적절하게 컬럼을 분할할 수 있습니다. 예제를 통해 화면 레이아웃 구현을 실습 합니다.
3-7.html
코드 설명
- 각각의 div 영역을
inline-block
으로 지정해 나란히 배치 - 모든 요소들에 대해 박스 크기 계산을 위해
box-sizing
속성을border-box
로 통일 - 각각의 컬럼은 전체 화면 크기의 30% 씩을 차지하도록 설정.
@media..
부분은 화면 크기에 따라 동적으로 디자인을 적용하기 위한 반응형 설정.- 여기서는 600px 이하가 되면 각각의 컬럼의 크기를 100%로 조정해 컬럼을 유지하지 않고 위아래로 배치.
- 실행시 브라우저 폭이 좁을 경우 다단 표현이 안됨.(크기 조절 필요)
예제 3-8) 박스와 이미지 정렬
3-8.html
코드 설명
- 블럭 박스의 크기가 100%가 아닌경우
margin:auto
로 중앙 정렬. - 이미지의 경우
display:block
으로 변경 후margin:auto
로 중앙 정렬.
4장. 복합 셀렉터
예제 4-1) CSS상속
부모 요소와 자식 요소에 대해 이해하고 상속이 어떻게 이루어지는지 알아보는 예제 입니다.
4-1.html
코드 설명
- 부모 요소인 body에서 지정한 배경색, 글자크기, 글자색이 자식 요소인 h2나 div 에 상속되어 적용.
- div에는 상속받은 배경색을 대신해 새로운 배경색을 지정하고 추가로 margin, padding, width 적용.
예제 4-2) 셀렉터 조합
여러 셀렉터를 조합하는 예제를 통해 다양한 셀렉터 활용을 배웁니다. 실제 개발에는 이것보다 훨씬 복잡한 셀렉터 조합이 사용되므로 반드시 모든 소스의 내용을 이해하도록 실습합니다.
4-2.html
간단한 목록을 만들고 셀렉터 조합에 따라 어떻게 동작하는지 확인하도록 합니다.
코드 설명
- 소스 코드의 주석을 참고해 각각의 태그에 어떤 셀렉터가 적용되었는지 확인.
예제 4-3) 가상 셀렉터
가상 선택자를 이용해 다양한 동적 속성을 부여하는 예제 입니다.. css-9.html파일을 다음과 같이 작성합니다.
step-1> 소스 코드 작성
<!doctype html>
<html>
<head>
<title>Virtual Selector Example</title>
</head>
<body>
<h1>Virtual Selector Example</h1>
<h2>HTML Tutorial</h2>
<h2>CSS Tutorial</h2>
<h2>JavaScript Tutorial</h2>
<div>Show Message - Mouse over..
<p><b>Note:</b>This message will show when mouse over "Show Message.."</p>
</div>
<hr>
<div class="content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</div>
</body>
</html>
step-2> before 가상선택자
먼저 before 가상선택자를 이용해 해당 요소 앞에 콘텐츠와 번호를 추가하도록 합니다. 여기서는 h1 태그 앞에 ###
을 추가해 보고 h2 태그에는 태그앞에 Section 1
과 같이 순차적으로 증가하는 번호를 넣도록 했습니다.
body {
counter-reset: section;
}
h1::before {
content: '###';
}
h2::before {
counter-increment: section;
content: "Section " counter(section) ": ";
}
step-3> hover 가상선택자
hover 가상선택자는 특정 요소 위에 마우스가 올려지면 동작할 수 있는 스타일을 지정할 수 있습니다. 이를 이용해 디자인을 변경하거나 콘텐츠를 동적으로 숨기거나 보여줄 수 있습니다. 여기서는 p 태그에 대해 기본적으로 보여지지 않게 display:none
으로 지정하고 div 태그에 마우스가 올라가면 p 태그의 내용이 보여지게 됩니다.
p {
display: none;
}
div:hover p {
display: block;
}
step-4> 기타 콘텐츠 제어 가상선택자
이번에는 다양한 가상 선택자를 활용해 봅니다. 먼저 selection
은 마우스로 콘텐츠를 블럭으로 지정할때 동작하는 스타일을 지정할 수 있습니다. first-letter, first-line
등을 사용해 각각 문장의 첫글자, 첫줄에만 적용되는 속성을 지정합니다.
::selection {
color: red;
background: yellow;
}
.content::first-letter {
color: #ff0000;
font-size: xx-large;
}
.content::first-line {
color: #0000ff;
font-variant: small-caps;
}
4-3.html
코드 설명
<h1>
태그로 작성된 제목 앞에###
이 동적으로 생성 됨.<h2>
태그로 작성된 소제목 앞에Section 1~3
까지의 번호가 자동 생성.Show Message
텍스트 위로 마우스를 올리면 숨겨진 텍스트가 나옴.- 예제 문장의 첫글자가 대문자로 표시되고 첫줄은 소문자 크기의 대문자로 출력됨.
예제 6-1) BS 기초 종합
CDN 을 이용해 Bootstrap css 및 필요한 JavaScript 라이브러리를 포함하고 기본 컴포넌트를 활용해 간단한 로그인 폼을 만들어 본다.
step-1> CDN으로 BS css 및 JavaScript 포함.
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<title>BS Login</title>
</head>
<body>
<h1>Bootstrap :: Login</h1>
</body>
</html>
step-2> 로그인 양식 만들기
HTML form 태그를 이용해 아이디와 비밀번호를 입력하는 로그인 양식을 만듭니다.
<div>
<h1>Bootstrap :: Login</h1>
<hr>
<div>
<div>
<label>User ID</label>
<input type="text" class="form-control" placeholder="Enter user id or email">
</div>
<div>
<label>Password</label>
<input type="password" class="form-control" placeholder="Enter password">
</div>
<button>Sign in</button>
<button>Sign up</button>
</div>
<hr>
</div>
step-3> BS 적용하기
먼저 전체 양식이 박스 형태로 나타날 수 있도록 컨테이너 설정을 합니다. 또한 폭을 75%로 설정하고 margin, padding, 배경색, 텍스트 가운데 정렬, 박스 그림자 설정을 하도록 합니다.
<div class="container w-75 my-5 p-5 bg-warning text-center shadow">
</div>
입력양식은 별도의 <div>
로 묶여 있으며 다시 적절한 크기로 컨테이너 설정을 합니다. 입력 양식 텍스트는 왼쪽 정렬을 하도록 합니다.
<div class="container w-50 text-left">
</div>
다음 입력요소들은 form-group을 이용해 묶어 줍니다.
마지막으로 입력이 잘못된 경우 출력되는 경고메시지를 alert
을 이용해 만들어 줍니다. 경고메시지는 close 버튼으로 사라지도록 설정 합니다.
최종적으로 수정된 소스와 결과는 다음과 같습니다.
예제 6-2) BS로 레이아웃 잡기
BS Grid 및 유틸리티 클래스를 이용해 다양한 레이아웃을 연습 합니다. 기본 그리드 시스템을 이용해 상단배너, 중앙 왼쪽 메인콘텐츠, 중앙 오른쪽 사이드메뉴, 하단 바닥글로 구성된 레이아웃을 만들어 봅니다.
- 기본 컨테이너의 높이는 style 속성으로 500px로 지정
- 상단 배너와 하단 바닥글은 각각 25% 의 높이를 가짐
- 중앙 콘텐츠와 사이드 메뉴는 가각 8과 4 크기로 분할
- 색상을 달리해서 구분
- 상단배너와 하단 바닥글 영역의 텍스트는 수평, 수직 중앙정렬
박스안의 텍스트 정렬은 text-center
로 수평정렬을 하고 my-auto
로 top, bottom margin 을 설정해 수직정렬을 합니다. flex 를 사용할수도 있습니다.
Quiz-1) 소스코드 설명 페이지 만들기
이번 문제는 실행 결과와 같은 화면을 그대로 구현해 보는것을 목표로 합니다.
본문에 학과, 학번, 이름 등을 넣고 작성 합니다.
실행 결과
힌트 보기
- 화면의 구성요소를 각각 box 로 구성할 수 있도록 클래스를 설계 한다.
- 제목을 제외 하고 세개의 박스가 필요하며 Example 박스 안에 소스코드 박스가 들어가는 구조.
- 소스 코드 부분은
<xmp>
태그를 활용. - margin, padding, border 등 박스 요소의 속성들을 충분하게 사용.
Quiz-2) 사이드 메뉴 웹페이지 구조 만들기
고정된 사이드 메뉴를 가지는 간단한 웹페이지 구조를 만드는 것이 목표 입니다. 실행결과를 보고 최대한 동일하게 만들어 보도록 합니다.
- 사이드 메뉴는 마우스가 올라갈 경우 배경과 글자색이 변경 되도록 해야 합니다.
- 본문에 학과, 학번, 이름 등을 넣고 작성 합니다.
- 헤더영역과 사이드메뉴는 고정되어 있고 본문이 스크롤되어 헤더 영역으로 들어갈때 헤더 아래쪽으로 들어가야 함.
실행 결과
힌트 보기
- 사이드 메뉴는
<ul>,<li>
의 목록으로 구성. - 문서 전체를 감싸는 컨테이너가 있어야 작업에 유리함.
- 본문은 세개의 박스로 구성.
- 사이드 메뉴를 고정시키기 위해서는
position: fixed
사용. - 콘텐츠가 겹칠때 레이어 우선순위 지정을 위해
z-index
사용.
Quiz-3) 부트스트랩 테이블 구조 만들기
부트스트랩의 container, table, button, pagnation등을 이용해 데이터 목록을 보여주는 화면을 만들어 봅니다.
- 전체 콘텐츠는 중앙정렬된 그림자가 있는 박스로 구성
- 테이블은 헤더를 어둡게 설정하고 짝홀수 로우의 배경색을 다르게 설정
- 마우스가 지나가는 로우의 배경색을 변경
- 페이지 목록 이동을 위한 페이지네이션 추가