- CSS의 사용 목적을 이해한다.
- CSS의 기본 문법과 구조를 이해한다.
- CSS를 HTML에 적용하는 방법에 대해서 이해한다.
- HTML 안에 CSS를 직접 정의하는 것을 권장하지 않는 이유를 이해한다.
- CSS를 이용해 텍스트를 꾸밀 수 있다.
- CSS에서 쓰이는 단위의 두 가지 구분을 이해한다.
- 각 단위가 적합한 경우를 구분할 수 있다.
- MDN 또는 W3School 등의 레퍼런스 사이트를 이용해 CSS 속성을 검색하고 사용할 수 있다.
전반적인 사용자 경험을 개선하기 위한 설계 영역
CSS 스타일을 적용할 수 있는 방법은 3가지가 있다.
- 인라인 스타일 : 같은 줄에서 스타일을 적용
- 내부 스타일 시트 : CSS 파일 내에 작성하는 내용을 별도의 파일로 구분하지 않고
<style>
요소 내에 작성- 외부 스타일 시트 :
<link>
요소로 HTML 파일과 CSS 파일을 연결하여 사용
그러나 하나에 집중하기 위해 파일이나 구간을 구분하는 관심사 분리 측면에서
인라인 스타일과 내부 스타일 시트는 권장하지 않는다.
CSS 파일을 HTML 파일에 연결할 때는, <link>
태그 안에서 href 속성을 통해 파일을 연결한다.
<link rel="stylesheet" href="index.css" />
<link>
요소는 HTML 파일과 다른 파일을 연결하는 목적으로 사용한다.<link>
요소의 rel
은 연결하고자 하는 파일의 역할이나 특징을 나타낸다.rel
속성에 stylesheet
를 추가한다.href
속성에는 파일의 위치를 추가해야 한다.id는 하나의 문서에서 한 요소에만 사용해야 한다.
id가 있는 요소를 선택할 때는 # 기호를 사용한다.
- HTML 코드
<h4 id="navigation-title">안녕하세요, 반갑습니다.</h4>
- CSS 코드
#navigation-title { color: red; }
- 실행 결과
- HTML 코드
<ul> <li class="item">Home</li> <li class="item">Mac</li> <li class="item">iPhone</li> <li class="item">iPad</li> </ul>
- CSS 코드
.item { text-decoration: underline; }
- 실행 결과
id | class |
---|---|
# 으로 선택 | . 으로 선택 |
한 문서에 단 하나의 요소에만 적용 | 동일한 값을 갖는 요소 많음 |
특정 요소에 이름을 붙이는 데 사용 | 스타일의 분류(classification)에 사용 |
전체 셀렉터는 문서의 모든 요소를 선택한다.
* { }
태그 셀렉터는 같은 태그명을 가진 모든 요소를 선택한다. 복수로도 선택할 수 있다.
h1 { }
div { }
section, h1 { }
ID 셀렉터는 #id
로 입력하여 선택한다.
#only { }
class 셀렉터는 .class
로 입력하여 선택한다. 같은 class를 가진 모든 요소를 선택한다.
.widget { }
.center { }
attribute 셀렉터는 같은 속성을 가진 요소를 선택한다.
a[href] { }
p[id="only"] { }
p[class~="out"] { }
p[class|="out"] { }
section[id^="sect"] { }
div[class$="2"] { }
div[class*="w"] { }
자식 셀렉터는 첫 번째로 입력한 요소의 바로 아래 자식인 요소를 선택한다.
아래 예시의 경우 <header>
요소 바로 아래에 있는 두 개의 <p>
요소는 선택되지만, <span>
요소의 자식인 <p>
요소는 선택되지 않는다. (후손 셀렉터와의 차이를 반드시 알고 있어야 한다.)
header > p { }
예시)
<header>
<p> <!-- 선택 -->
<span>
<p></p>
</span>
</p>
<p> <!-- 선택 -->
<span>
<p></p>
</span>
</p>
</header>
후손 셀렉터는 첫 번째로 입력한 요소의 후손을 선택한다.
아래 예시의 경우 <header>
요소의 자식인 <p>
요소뿐 아니라,<header>
요소의 자식의 자식인 <p>
요소까지 모두 선택된다. (자식 셀렉터와의 차이점을 반드시 알고 있어야 한다.)
header p {}
예시)
<header>
<p><!-- 선택 -->
<span>
<p><!-- !!선택!! -->
</p>
</span>
</p>
<p><!-- 선택 -->
<span>
<p><!-- !!선택!! -->
</p>
</span>
</p>
</header>
형제 셀렉터는 같은 부모 요소를 공유하면서, 첫 번째 입력한 요소 뒤에 오는 두 번째 입력한 요소를 모두 선택한다. 아래 예시의 경우 <section>
요소 뒤에 있는 세 개의 <p>
요소를 모두 선택한다.
section ~ p { }
<header>
<section></section>
<p></p> <!-- 선택 -->
<p></p> <!-- 선택 -->
<p></p> <!-- 선택 -->
</header>
인접 형제 셀렉터는 같은 부모 요소를 공유하면서, 첫 번째 입력한 요소 바로 뒤에 오는 두 번째 입력한 요소를 선택한다. 예시의 경우 <section>
요소 뒤에 있는 세 개의 <p>
요소 중 첫 번째 <p>
요소를 선택한다.
section + p { }
<header>
<section></section>
<p></p> <!-- 선택 -->
<p></p>
<p></p>
</header>
가상 클래스는 요소의 상태 정보에 기반해 요소를 선택한다.
:link { } /*사용자가 방문하지 않은 <a>요소를 선택한다.*/
a:visited { } /*사용자가 방문한 <a>요소를 선택한다. */
a:hover { } /* 마우스를 요소 위에 올렸을 때 선택한다. */
a:active { } /* 활성화 된(클릭된) 상태일 때 선택한다. */
a:focus { } /* 포커스가 들어와 있을 때 선택한다. */
input:checked + span { } /*체크 상태일 때 선택한다. */
input:enabled + span { } /*사용 가능한 상태일 때 선택한다. */
input:disabled + span { } /*사용 불가능한 상태일 때 선택한다. */
p:first-child { }
ul > li:last-child { }
ul > li:nth-child(2n) { }
section > p:nth-child(2n+1) { }
ul > li:first-child { }
li:last-child { }
div > div:nth-child(4) { }
div:nth-last-child(2) { }
section > p:nth-last-child(2n + 1) { }
p:first-of-type { }
div:last-of-type { }
ul:nth-of-type(2) { }
p:nth-last-of-type(1) { }
input:not([type="password"]) { }
div:not(:nth-of-type(2)) { }
input[type="text"]:valid { }
input[type="text"]:invalid { }
기기나 브라우저 사이즈 등의 환경에 영향을 받지 않는 절대적인 크기로 정하는 경우
px(픽셀)을 사용한다.
일반적인 경우 상대 단위인 rem을 추천한다.
<body>
태그에서의 %는 HTML이 차지하는 모든 영역,<div>
, <p>
<span>
특징 | block | inline-block | inline |
---|---|---|---|
줄바꿈 여부 | 줄바꿈이 일어남 | 줄바꿈이 일어나지 않음 | 줄바꿈이 일어나지 않음 |
기본적으로 갖는 너비(width) | 100% | 글자가 차지하는 만큼 | 글자가 차지하는 만큼 |
width, height 사용 가능 여부 | 가능 | 가능 | 불가능 |
오늘은 HTML로 구성한 구조 위에 스타일시트 언어인 CSS를 사용하여 디자인을 적용하는 방법에 대해 알아보았다. 강의와 예시를 보며 문제를 풀어보았을 때는 수월하게 풀리는 듯 했지만.. 막상 과제로 주어진 자기소개서를 CSS를 사용하여 꾸밀 때는 어떤 기능을 사용하고 적용해야 할지 명확하게 그려지지 않았다.
아직 처음 배운 날이니만큼 너무 낙담하지 말고, 먼저 전체적으로 보여주고 싶은 틀을 스케치한다음, 각각의 영역에서 어떤 요소와 속성들이 필요한지 정리한 뒤 차근차근 구현해나가는 연습을 해야겠다.