<학습 목표>
CSS 이해 : CSS 파일을 사용하는 이유와 HTML에서 CSS 파일을 불러오는 방법에 대해 설명할 수 있다.
CSS 이해 : CSS 파일내에서 원하는 HTML 태그를 선택하는 방법 (4번 영상)(id, class로 선택하는 방법 등)에 대해 설명할 수 있다.
CSS 이해 : CSS에서 원하는 태그를 선택한 후, 해당 태그에 원하는 속성을 부여할 수 있다.
CSS 이해 : margin, border, padding 의 차이에 대해 이해하고 설명할 수 있다.
CSS 이해 : flex 속성을 이해하고 여러 태그를 화면 상의 원하는 위치에 배치할 수 있다.
CSS 심화 : media query에 대해 이해하고, 특정 조건에 반응하는 속성을 줄 수 있다.
CSS 심화 : transition, animation 등 실시간 화면 움직임에 대한 속성을 이해하고, 설명할 수 있다.
추가 학습 : github profile md 꾸미기 / figma 알아보기
CSS : Cascading Style Sheet
HTML로 만든 기본 구조 위에 색, 배치 방법, 위치, 모양 등 다양한 디자인을 가능하게 한다.
cascading은 폭포처럼 떨어져 내린다는 뜻인데, html 문서의 DDM(document object model) tree 구조에서, 디자인 속성을 한 요소(element)에 적용하면 그 하위 요소로 전달 및 적용되는 특성을 갖고 있다는 의미이다.
<!-- body 태그 안에 있는 모든 태그 요소들은 빨간색 글자로 표시됨 -->
<body style="font-color:red">
<h1>Hello</h1>
</body>
내부 스타일시트
<head></head> 사이에 <style></style> 부분에 css를 바로 삽입 가능하다.
단, CSS의 재사용이 안되므로 외부 스타일시트에 작성하는 것이 좋다.
외부 스타일시트
별도의 .css 파일에 작성 후, 이를 html에서 불러오는 방식.
css는 외부 서버에서 불러오는 것도 가능.
<link rel="stylesheet" type="text/css" href="mystyle.css">
<link rel="stylesheet" type="text/css" href="http://cdn.site.com/css/mystyle.css">
<h1 style="color:blue; margin-left:30px;">This is a heading</h1>
동일한 속성값이 외부 스타일, 내부 스타일, 인라인 스타일로 적용되어 있는 경우, 우선순위는 가장 나중에 정의되는 스타일이 가져간다.
따라서 인라인 스타일의 우선순위가 가장 높고, 외부와 내부 스타일 시트는 문서 상 정의된 순서에 따라 우선순위가 결정된다.
웹 브라우저 자체에서도 html element에 대한 자체적 css 혹은 사용자 정의 css를 가질 수 있다.
일반적인 우선순위 : 브라우저 디자인 정의 -> 외부 스타일시트 -> 내부 스타일시트 -> 인라인 스타일시트
선택자 : 스타일을 지정할 HTML 요소를 가리키는 것
선언부 : 특정 CSS 속성 이름과, 지정하고 싶은 값을 표현하는 곳
선택자 {선언부}
h1 {color: green; font-size: 10px}
/* */| 선택자(selector) | 예시 | 설명 |
|---|---|---|
| .class | .intro | html 태그에서 class=”intro”로 된 모든 태그 영역 선택 |
| #id | #banner | html 태그에서 id=”banner”로 된 태그 영역 선택 |
| * | * | 문서내 모든 요소를 선택 |
| 태그 | p | 문서내 모든 <p> 태그 영역 선택 |
| 태그, 태그 | div, p | 모든 <div> 와 <p> 태그 영역 선택 |
| 태그 태그 | div p | <div> 태그 안에 있는 모든 <p> 태그 영역 선택 |
p {
text-align: center;
color: red;
}
h1,h2,h3,h4 { color: blue; }
특정 속성을 가진 태그만 선택 가능
input[type=text] {
background-color: blue;
color: white;
}
#id_name { color: blue; }
---
<div id="id_name">
...
</div>
.class_name1 { color: blue; }
p.class_name2 { color: red; }
h1.header { color: blue;}
h2.header { color: green;}
---
<div class="class_name1">
...
</div>
폰트 설정의 경우 컴퓨터에 폰트가 설치되어 있어야 하며 설치된 폰트와 상관없이 폰트 적용을 위해서는 구글 등에서 제공하는 web font 라는 것을 사용해야 함.
font-family : 폰트 이름과 유형을 지정하는 속성. 영문을 기준으로 폰트의 유형은 세가지로 구분.
h1 {
font-family: "Times New Roman", verdana, arial;
}
fall back font라는 지정된 폰트가 없을 때 사용하는 기본 폰트를 지정해야 하는데, 이름 보다는 폰트 유형을 지정하는 것이 좋다.font-style : 폰트의 스타일을 지정하는 속성. normal, italic, oblique가 있다. oblique 는 italic 과 유사하며 잘 사용되지 않는다.
.text1 { font-style: normal}
.text2 { font-style: italic}
font-size : 폰트 크기를 지정 속성. px, %, rem, em 등 여러 단위로 사용가능.
.text1 { font-size: 10px}
.text2 { font-size: 2em}
font-weight : 폰트의 두께 지정 속성. normal, bold, bolder 등 사용 가능.
.text1 { font-weight: normal}
.text2 { font-weight: bold}
<a></a>에 적용되는 가상 셀렉터들
a:link {
color: red;
text-decoration: none;
}
a:visited {
color: blue;
text-decoration: none;
}
a:hover {
color: hotpink;
text-decoration: underline;
}
a:active {
background-color: blue;
text-decoration: underline;
}
#text1 { color: red; }
#text2 { color: #FF0000; }
#text3 { color: rgb(255, 0, 0); }
#text4 { color: rgba(255, 99, 71, 0.5) }
#text5 { color: hsla(9,100%, 64%, 0.5) }| 단위 | 설명 |
|---|---|
| cm | centimeter |
| mm | millimeter |
| in | inch (1in = 2.54cm) |
| px | 픽셀, pixel |
| pt | 포인트, point (1pt = 1/72 inch) |
| 단위 | 설명 |
|---|---|
| em | 부모 요소의 글꼴에 비례. (2em은 현재 글꼴 크기의 2배를 의미.) |
| ex | 현재 글꼴의 x 높이에 비례. (거의 사용되지 않음) |
| rem | 루트 요소()의 글꼴 크기에 비례. |
| vw | 뷰포트 너비의 1%에 비례. |
| vh | 뷰포트 높이의 1%에 비례. |
| vmin | 뷰포트의 너비와 높이 중 더 작은 치수 1%에 비례. |
| vmax | 뷰포트의 너비와 높이 중 더 큰 치수 1%에 비례. |
| % | 퍼센트, 100% 를 기준으로 하는 상대 크기 |
뷰포트(viewport) 의미로, 웹페이지가 사용자에게 보여지는 영역을 뜻한다.
Contents box - 콘텐츠 영역으로 텍스트 및 이미지의 실제 영역.
Padding box - 테두리와 콘텐츠 사이의 안쪽 여백.
Border box - 박스를 둘러싼 테두리(경계) 영역.
Margin box - 박스 외부 영역으로 박스가 가지는 여백 공간
박스요소에 크기를 지정하면 기본적으로 콘텐츠 영역에 적용된다.
전체 박스 크기는 border, margin, padding 에 콘텐츠 영역 크기를 더해야 한다.
box-sizing속성은 기본이 content-box지만, boder-box로 바꾸면 border 기준 크기 계산이 가능하다.
position 속성.float, display 속성.display : grid 속성을 주면, 그 안의 content 들을 행, 열로 나누어 표시할 수 있다.
<div class="container">
<div class="header">
</div>
<div class="contents">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
</div>
<div class="footer">
</div>
</div>
position
1) static
2) relative
3) absolute
4) fixed
5) sticky
5) z-index
float
float로 좌, 우측부터 정렬되도록 배열 가능하다.clear로 float 속성 무효화 가능하다.block은 width=100%로 한 줄을 차지하므로 다른 콘텐츠와 나란히 배치 불가능한 반면, inline은 나란히 배치 가능하다.
// 방법1
div {
text-align:center;
}
// 방법2
img {
display: block;
margin: auto;
}
...
<div>
<img src="a.jpg">
</div>
.container {
display: flex;
/* display: inline-flex; */
}
flex 컨테이너 내부 item들은 기본이 가로 방향으로 배치되고, 각자 자신의 width만큼 차지한다.
height는 컨테이너 높이만큼으로 맞춰진다.
flex-direction : 가로, 세로 방향 배치를 결정할 수 있다.flex-wrap : 넘치는 컨텐츠를 줄바꿈 해줄 수 있다.justify-content : 좌우 정렬 축을 지정할 수 있다.align-items : 한 행의 상하 정렬 축을 지정할 수 있다. align-content : 여러 행일 때 상하 정렬 축을 지정할 수 있다.flex : flex-grow, flex-shrink, flex-basis 한 번에 사용 가능하다.
flex-grow : 0이 기본값이고, 각 item에 세팅된 flex-grow 값 비율에 맞게 container 공간을 나누어 꽉 채운다. container에서 각 item의 flex-basis을 제외한 공간을 나누어 체운다.flex-shrink : 1이 기본값이고, 0보다 큰 값이 들어가면 flex-basis보다 작아질 수 있다. 0이 들어가면 flex-basis보다 절대 작아지지 않는다.flex-basis : item의 길이 기준점.item {
flex: 1;
/* flex-grow: 1; flex-shrink: 1; flex-basis: 0%; */
flex: 1 1 auto;
/* flex-grow: 1; flex-shrink: 1; flex-basis: auto; */
flex: 1 500px;
/* flex-grow: 1; flex-shrink: 1; flex-basis: 500px; */
}
@media (조건) {
스타일
}
/*800px 이하 화면에서 배경을 초록색으로 바꾸는 코드*/
@media (max-width: 800px) {
* {
background-color: green;
}
}
<head>
<style>
div {
width: 100px;
height: 100px;
background: red;
/* 트랜지션 효과: 모든 속성의 변화를 2초에 걸쳐 전환한다. */
transition: all 2s;
}
div:hover { /* 여기에 트랜지션을 설정하면 마우스가 내려올 때는 발생하지 않는다.*/
border-radius: 50%;
background: blue;
}
</style>
</head>
<body>
<div></div>
</body>
CSS 개념 모음
W3Schools.com CSS
Mozilla CSS
CSS transition
CSS animation
잘 보고 갑니다 :)