
CSS(Cascading Style Sheets)는 웹 페이지의 스타일을 정의하는 언어입니다. HTML이 웹 페이지의 구조와 콘텐츠(텍스트, 이미지 등)를 정의하는 반면, CSS는 페이지의 시각적 디자인과 레이아웃을 담당합니다. CSS를 사용하면 글꼴, 색상, 여백, 테두리, 위치 등을 조정하여 HTML 요소들을 꾸밀 수 있습니다. 이를 통해 동일한 HTML 콘텐츠에 다양한 스타일을 적용하거나, 레이아웃을 조정하는 것이 가능합니다.
CSS는 웹 페이지를 더 아름답고 일관되게 만드는 데 필수적입니다. 웹 페이지에 CSS를 사용하면 다음과 같은 이점이 있습니다:
HTML과 CSS는 웹 페이지를 만들기 위해 협력하는 두 가지 핵심 기술입니다. HTML은 페이지의 구조와 콘텐츠를 담당하며, CSS는 HTML이 정의한 콘텐츠에 스타일과 레이아웃을 부여합니다.
CSS는 선택자(selector)와 선언 블록(declaration block)으로 구성됩니다. 선택자는 어떤 HTML 요소에 스타일을 적용할지를 지정하며, 선언 블록은 실제 스타일 규칙을 정의합니다.
선택자 {
속성: 값;
}
color, font-size, margin).예시:
p {
color: blue;
font-size: 16px;
}
위 코드는 모든 <p> 요소의 글자 색을 파란색으로, 글자 크기를 16px로 설정합니다.
CSS에서는 선언(declaration)을 통해 스타일 속성(예:
color,font-size)을 정의하며, 이러한 선언들은 중괄호{}로 묶어 선언 블록을 만듭니다. 규칙(rule)은 선택자와 선언 블록의 조합입니다.
h1 {
color: red;
text-align: center;
}
<h1> 요소의 텍스트 색상을 빨간색으로, 텍스트를 중앙에 정렬합니다.CSS 선택자는 특정 HTML 요소를 선택하여 스타일을 적용하는 역할을 합니다. 다양한 종류의 선택자가 있으며, 상황에 맞게 사용할 수 있습니다.
요소명(태그) 선택자: 특정 요소명(태그) 으로 요소를 선택합니다.
p {
color: green;
}
클래스 선택자: 클래스 이름으로 요소를 선택하며, 클래스는 여러 요소에서 공유할 수 있습니다. 클래스 선택자는 .으로 시작합니다.
.highlight {
background-color: yellow;
}
ID 선택자: 고유한 ID로 요소를 선택합니다. ID는 페이지에서 한 번만 사용해야 하며, 선택자는 #으로 시작합니다.
#main-title {
font-size: 24px;
}
>): 특정 요소의 자식 요소만 선택합니다.div > p {
color: blue;
}후손 선택자 (공백): 특정 요소의 모든 하위 요소를 선택합니다.
div p {
color: blue;
}
형제 선택자 (+ 및 ~):
인접 형제 선택자 (+): 특정 요소 바로 뒤에 있는 형제 요소를 선택합니다.
h1 + p {
margin-top: 0;
}
일반 형제 선택자 (~): 특정 요소 이후에 나타나는 모든 형제 요소를 선택합니다.
h1 ~ p {
color: gray;
}
속성 선택자는 특정 속성을 가진 요소를 선택합니다.
속성 값 선택자: 특정 속성 값을 가진 요소를 선택합니다.
input[type="text"] {
background-color: lightblue;
}
부분 일치 선택자:
[attribute^="value"]: 특정 속성이 지정된 값으로 시작하는 경우 선택.[attribute$="value"]: 특정 속성이 지정된 값으로 끝나는 경우 선택.[attribute*="value"]: 특정 속성이 지정된 값을 포함하는 경우 선택.가상 클래스: 특정 상태에 있는 요소를 스타일링합니다.
a:hover {
color: red;
}가상 요소: 요소의 특정 부분을 스타일링합니다.
p::first-line {
font-weight: bold;
}::before, ::after와 같은 가상 요소는 콘텐츠 앞뒤에 스타일을 추가할 때 유용합니다.인라인 스타일은 HTML 요소에 직접
style속성을 추가하여 CSS를 적용하는 방식입니다. 이 방식은 특정 요소에만 스타일을 적용할 때 유용하지만, 스타일을 HTML 코드에 직접 넣기 때문에 유지 보수가 어렵습니다.
<p style="color: blue; font-size: 16px;">인라인 스타일 예제</p>
장점
단점
내부 스타일은
<head>태그 안에<style>태그를 사용하여 스타일을 정의하는 방법입니다. 주로 개별 페이지에 한정된 스타일을 적용할 때 사용됩니다.
<!DOCTYPE html>
<html>
<head>
<style>
p {
color: green;
font-size: 18px;
}
</style>
</head>
<body>
<p>내부 스타일 예제</p>
</body>
</html>
장점
단점
외부 스타일시트는 CSS를 별도의
.css파일로 작성하고, HTML 문서에<link>태그를 사용해 연결하는 방식입니다. 대규모 웹사이트에서 공통으로 스타일을 적용할 때 사용되며, 스타일과 HTML이 완전히 분리되어 유지 보수가 용이합니다.
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<p>외부 스타일시트 예제</p>
</body>
</html>
styles.css 파일의 내용:
p {
color: red;
font-size: 20px;
}
장점
단점
CSS에서 여러 스타일이 한 요소에 적용될 때, 적용 우선순위(Specificity)에 따라 어떤 스타일이 우선되는지 결정됩니다. 우선순위는 다음과 같이 계산됩니다:
!important를 사용한 스타일은 모든 우선순위보다 우선시됩니다.<head>
<style>
#unique { color: red; } /* ID 선택자 */
.highlight { color: blue; } /* 클래스 선택자 */
p { color: green; } /* 태그 선택자 */
</style>
</head>
<body>
<p id="unique" class="highlight" style="color: orange;">CSS 우선순위 예제</p>
</body>
위 코드에서 <p> 요소는 인라인 스타일이 가장 우선시되므로 color: orange;가 적용됩니다.
CSS에서는 일부 속성이 부모 요소로부터 자식 요소로 상속됩니다. 텍스트 관련 속성(예:
color,font-family)이 상속되는 대표적인 예입니다.
<head>
<style>
.parent { color: blue; }
.child { font-weight: bold; }
</style>
</head>
<body>
<div class="parent">
<p class="child">상속된 색상과 굵기 적용 예제</p>
</div>
</body>
위 예제에서는 .parent의 color: blue;가 자식 요소인 <p> 요소에 상속되어, 파란색으로 표시됩니다.
CSS에서 크기를 정의할 때 여러 단위를 사용할 수 있으며, 각각의 단위는 크기 계산 방식이 다릅니다.
px (픽셀): 절대 단위로, 고정된 크기를 의미합니다. 일반적으로 화면 해상도에 따라 1px은 디스플레이에서 고정된 크기로 표시됩니다.
font-size: 16px;
em: 요소의 폰트 크기를 기준으로 한 상대 단위입니다. 부모 요소의 폰트 크기에 상대적으로 크기가 결정됩니다.
padding: 2em; /* 부모의 font-size * 2 */
rem: 최상위 요소 (html)의 폰트 크기를 기준으로 한 상대 단위입니다. 페이지 전체에서 일관된 크기 비율을 유지할 수 있어 주로 사용됩니다.
margin: 1.5rem; /* root의 font-size * 1.5 */
% (퍼센트): 부모 요소의 크기를 기준으로 한 상대 단위입니다. 주로 폭과 높이를 설정할 때 사용됩니다.
width: 50%; /* 부모 요소 크기의 50% */
CSS에서는 다양한 형식으로 색상을 지정할 수 있습니다.
색상 이름: CSS가 지원하는 색상 이름을 사용하여 색상을 지정합니다.
color: red;
HEX 코드: 16진수 값을 사용하여 색상을 표현합니다. #RRGGBB 형식으로 작성하며, 각 2자리 숫자가 Red, Green, Blue 값을 나타냅니다.
color: #ff0000; /* 빨간색 */
RGB: RGB(Red, Green, Blue) 값을 사용하여 색상을 지정합니다. 각 채널은 0~255 범위의 숫자로 지정됩니다.
color: rgb(255, 0, 0); /* 빨간색 */
RGBA: RGB 색상에 투명도(Alpha) 값을 추가하여 색상을 지정합니다. Alpha 값은 0(투명)부터 1(불투명) 사이의 값입니다.
color: rgba(255, 0, 0, 0.5); /* 반투명 빨간색 */
웹 페이지를 다양한 화면 크기에 맞게 디자인할 때, 뷰포트를 기준으로 한 단위가 유용합니다.
vw (뷰포트 너비): 뷰포트 너비의 1%를 의미합니다. 예를 들어, 50vw는 뷰포트 너비의 50%에 해당하는 크기입니다.
width: 50vw;
vh (뷰포트 높이): 뷰포트 높이의 1%를 의미합니다. 예를 들어, 100vh는 화면의 전체 높이에 해당하는 크기입니다.
height: 100vh;
vmin, vmax: 뷰포트의 너비와 높이 중 작은 값 또는 큰 값을 기준으로 1%를 의미합니다.
vmin: 뷰포트 너비와 높이 중 작은 값을 기준으로 한 1%.vmax: 뷰포트 너비와 높이 중 큰 값을 기준으로 한 1%.font-size: 2vmin; /* 뷰포트 너비 또는 높이 중 작은 값의 2% */
이러한 단위를 활용하여 반응형 레이아웃을 구축할 수 있으며, 다양한 기기에서 일관된 사용자 경험을 제공할 수 있습니다.
글꼴 스타일을 설정하는 속성들은 텍스트의 모양을 결정하는 데 사용됩니다.
font-family: 텍스트에 적용할 글꼴을 지정합니다. 여러 글꼴을 쉼표로 구분하여 지정할 수 있으며, 브라우저가 첫 번째 글꼴을 사용할 수 없을 경우 다음 글꼴을 사용합니다.
font-family: "Arial", sans-serif;
font-size: 텍스트 크기를 지정합니다. px, em, rem 등의 단위로 설정할 수 있습니다.
font-size: 16px;
font-weight: 텍스트의 굵기를 지정합니다. 값으로 normal, bold, lighter 또는 숫자(100~900)를 사용할 수 있습니다.
font-weight: bold;
font-style: 글자의 기울기를 지정하며, 일반적으로 이탤릭체를 만들 때 사용됩니다. normal, italic, oblique 값이 있습니다.
font-style: italic;
font-variant: 소문자를 작은 대문자 형태로 변환하는 등 텍스트 변형을 지정합니다.
font-variant: small-caps;
텍스트 스타일 속성은 텍스트의 색상, 정렬, 밑줄 등을 설정할 수 있습니다.
color: 텍스트의 색상을 지정합니다.
color: #333;
text-align: 텍스트 정렬을 설정합니다. left, right, center, justify 등의 값을 가집니다.
text-align: center;
text-decoration: 텍스트에 밑줄, 취소선 등을 추가합니다. none, underline, line-through, overline 등의 값을 사용합니다.
text-decoration: underline;
text-transform: 텍스트의 대소문자를 변환합니다. none, uppercase(대문자), lowercase(소문자), capitalize(첫 글자만 대문자) 값을 가질 수 있습니다.
text-transform: uppercase;
text-shadow: 텍스트에 그림자를 추가합니다. h-shadow v-shadow blur color 형식으로 지정합니다.
text-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
line-height: 텍스트의 줄 간격을 설정합니다. 기본적으로 1.2~1.5 배의 값을 많이 사용하며, px, em, % 등 단위로도 설정할 수 있습니다.
line-height: 1.5;
letter-spacing: 글자 간격을 설정합니다. 값이 클수록 글자 간격이 넓어집니다.
letter-spacing: 2px;
word-spacing: 단어 간의 간격을 설정합니다.
word-spacing: 4px;
이러한 텍스트와 글꼴 스타일링 속성을 활용하여 텍스트의 가독성과 디자인을 향상시킬 수 있습니다.
CSS 박스 모델은 HTML 요소가 페이지에 차지하는 공간을 계산하는 방식을 정의합니다. 각 요소는 사각형 박스를 형성하며, 박스 모델을 통해 콘텐츠 크기와 여백, 테두리 등을 설정할 수 있습니다.
박스 모델은 아래와 같은 네 가지 주요 요소로 구성됩니다.
width와 height 속성으로 크기를 조절할 수 있습니다.padding 속성을 통해 설정할 수 있습니다.border 속성을 통해 설정할 수 있습니다.margin 속성으로 조절할 수 있습니다.+---------------------------+
| Margin |
| +---------------------+ |
| | Border | |
| | +-------------+ | |
| | | Padding | | |
| | | +---------+ | | |
| | | | Content | | | |
| | | +---------+ | | |
| | +-------------+ | |
| +---------------------+ |
+---------------------------+
width, heightwidth: 요소의 너비를 설정합니다. padding, border, margin을 제외한 content 영역의 너비입니다.
width: 200px;
height: 요소의 높이를 설정합니다. padding, border, margin을 제외한 content 영역의 높이입니다.
height: 100px;
padding, margin, borderpadding: 콘텐츠와 테두리 사이의 여백을 설정합니다. 네 방향(상, 하, 좌, 우)을 개별적으로 지정할 수도 있고, 전체 패딩을 한번에 지정할 수도 있습니다.
padding: 10px; /* 네 방향 동일 */
padding: 10px 20px; /* 상하 10px, 좌우 20px */
padding: 5px 10px 15px 20px; /* 상, 우, 하, 좌 순서 */
margin: 요소 바깥쪽의 여백을 설정합니다. 패딩과 마찬가지로 네 방향을 개별적으로 지정할 수 있습니다.
margin: 10px; /* 네 방향 동일 */
margin: 10px 20px; /* 상하 10px, 좌우 20px */
margin: 5px 10px 15px 20px; /* 상, 우, 하, 좌 순서 */
border: 요소의 테두리를 설정합니다. 테두리의 굵기, 스타일, 색상을 지정할 수 있습니다.
border: 2px solid black;
border-top: 2px solid red;
border-right: 2px dashed green;
border-bottom: 2px dotted blue;
border-left: 2px double yellow;
box-sizing
box-sizing속성은 요소의width와height가padding과border를 포함할지 여부를 결정합니다.
content-box (기본값): width와 height에 padding과 border를 포함하지 않습니다.border-box: width와 height에 padding과 border를 포함합니다. 전체 요소의 너비와 높이를 더 쉽게 관리할 수 있어 주로 사용됩니다..box {
width: 200px;
height: 100px;
padding: 10px;
border: 5px solid black;
box-sizing: border-box; /* 전체 너비와 높이를 200px, 100px로 고정 */
}
box-sizing: border-box;을 사용하면 요소의 크기를 더 쉽게 계산할 수 있으며, 반응형 디자인에서도 유용합니다.
CSS에서는 요소의 배경과 색상을 다양하게 조정할 수 있습니다. 배경색, 배경 이미지, 반복, 위치, 고정 여부, 크기 등을 설정하여 원하는 스타일을 만들 수 있습니다.
배경색: background-color 속성으로 요소의 배경색을 설정합니다.
background-color: lightblue;
배경 이미지: background-image 속성으로 요소에 배경 이미지를 추가합니다. 이미지 경로를 url() 함수 안에 넣습니다.
background-image: url('background.jpg');
배경 이미지가 반복되는 방식을 설정합니다. 기본값은
repeat이며, 수평과 수직으로 이미지를 반복합니다.
repeat: 수평 및 수직 방향으로 배경을 반복합니다.repeat-x: 수평 방향으로만 반복합니다.repeat-y: 수직 방향으로만 반복합니다.no-repeat: 반복하지 않고 이미지를 한 번만 표시합니다.background-repeat: no-repeat;
배경 이미지의 위치를 설정합니다.
top,bottom,left,right,center와 같은 키워드를 사용할 수 있으며, 위치를 조정하기 위해 px, %, vw, vh 등 단위도 사용할 수 있습니다.
background-position: center;
background-position: 50% 50%;
배경 이미지의 스크롤 동작을 설정합니다. 기본값은
scroll이며, 페이지 스크롤 시 배경이 함께 움직입니다.
scroll: 배경이 스크롤과 함께 움직입니다.fixed: 배경이 고정되어 스크롤해도 움직이지 않습니다.local: 요소의 스크롤에 따라 배경이 움직입니다.background-attachment: fixed;
배경 이미지의 크기를 조정합니다.
auto,cover,contain등의 값으로 설정할 수 있으며, px, %, vw, vh 등 단위로 크기를 지정할 수도 있습니다.
auto: 원본 이미지 크기를 유지합니다.cover: 요소의 크기에 맞추어 배경을 확장하며, 전체를 덮습니다(일부 잘릴 수 있음).contain: 요소 안에 배경을 맞추어 표시하며, 이미지가 잘리지 않습니다.background-size: cover;
배경 속성들을 한 줄로 작성하여 간단하게 설정할 수 있습니다.
background: url('background.jpg') no-repeat center center / cover;
background-color: #f0f0f0;
이렇게 하면, 배경 이미지가 가운데에 고정되고 크기가 요소에 맞춰 조정되며, 배경색은 회색으로 설정됩니다.
CSS에서는 요소의 배치와 정렬을 다양한 방법으로 설정할 수 있습니다.
display와position속성부터, 플렉스박스(Flexbox)와 그리드(Grid) 레이아웃까지 여러 옵션을 제공합니다.
display 속성
display속성은 요소의 박스 형식을 지정하며, 요소가 레이아웃에 표시되는 방식을 결정합니다.
block: 요소가 블록 레벨로 표시됩니다. 다른 블록 요소와 독립적인 줄에 배치됩니다.inline: 요소가 인라인 레벨로 표시됩니다. 줄 안에서 다른 요소들과 함께 배치됩니다.inline-block: 요소가 인라인처럼 표시되지만, 블록 요소처럼 너비와 높이를 설정할 수 있습니다.none: 요소가 화면에서 숨겨지며, 레이아웃 공간도 차지하지 않습니다.display: block;
display: inline;
display: inline-block;
display: none;
position 속성
position속성은 요소의 위치를 지정하며,top,right,bottom,left속성과 함께 사용됩니다.
static: 기본값으로, 일반적인 문서 흐름에 따라 배치됩니다.relative: 요소의 원래 위치를 기준으로 이동할 수 있습니다.absolute: 부모 요소나 조상 요소 중 position이 relative, absolute, fixed인 요소를 기준으로 절대 위치에 배치됩니다.fixed: 뷰포트를 기준으로 위치가 고정되며, 스크롤해도 위치가 변하지 않습니다.sticky: 스크롤에 따라 상대적으로 움직이다가 특정 위치에서 고정됩니다.position: absolute;
top: 20px;
left: 50px;
CSS의 Flexbox(Flexible Box Layout)는 1차원 레이아웃 모델로, 요소들을 행 또는 열 단위로 정렬하고 배치할 수 있는 방법을 제공합니다. Flexbox는 부모 컨테이너(
flex container)와 자식 요소들(flex items)로 구성되며, 부모 요소에display: flex속성을 설정하여 사용합니다.
Flexbox는 다음과 같은 용어로 이루어져 있습니다.
display: flex를 설정한 부모 요소입니다. 이 컨테이너는 flex items를 배치하는 역할을 합니다.flex container의 자식 요소들로, 유연하게 배치됩니다.부모 요소(flex container)에 설정하는 속성들은 자식 요소들이 정렬되는 방식을 제어합니다.
display
display: flex; 또는 display: inline-flex;로 설정합니다.flex는 블록 요소처럼 동작하고, inline-flex는 인라인 요소처럼 동작합니다..container {
display: flex;
}
flex-direction
요소들이 배치될 주 축(main axis)의 방향을 지정합니다.
row(기본값): 요소들이 가로로 배치됩니다.row-reverse: 요소들이 가로로 역방향으로 배치됩니다.column: 요소들이 세로로 배치됩니다.column-reverse: 요소들이 세로로 역방향으로 배치됩니다..container {
display: flex;
flex-direction: row;
}
justify-content
주 축(main axis) 방향으로 요소들을 정렬합니다.
flex-start(기본값): 왼쪽(또는 위쪽)에 정렬합니다.flex-end: 오른쪽(또는 아래쪽)에 정렬합니다.center: 가운데 정렬합니다.space-between: 요소들 사이의 간격을 동일하게 분배합니다.space-around: 요소들 사이와 양 끝에 동일한 간격을 분배합니다.space-evenly: 요소들 사이와 양 끝에 균일하게 간격을 분배합니다..container {
display: flex;
justify-content: center;
}
align-items
교차 축(cross axis) 방향으로 요소들을 정렬합니다.
flex-start: 상단(또는 왼쪽)에 정렬합니다.flex-end: 하단(또는 오른쪽)에 정렬합니다.center: 교차 축의 가운데에 정렬합니다.baseline: 요소들의 텍스트 기준선(baseline)에 맞춰 정렬합니다.stretch(기본값): 요소들을 컨테이너의 크기에 맞춰 늘립니다..container {
display: flex;
align-items: center;
}
flex-wrap
요소들이 컨테이너의 크기를 넘어갈 때 줄바꿈을 할지 여부를 설정합니다.
nowrap(기본값): 요소들이 줄바꿈 없이 한 줄에 배치됩니다.wrap: 요소들이 줄바꿈되어 여러 줄에 걸쳐 배치됩니다.wrap-reverse: 줄바꿈되지만, 역방향으로 배치됩니다..container {
display: flex;
flex-wrap: wrap;
}
align-content
여러 줄의 요소들을 교차 축 방향으로 정렬합니다. flex-wrap을 사용하여 여러 줄이 생성된 경우에만 적용됩니다.
flex-start: 교차 축의 시작에 정렬합니다.flex-end: 교차 축의 끝에 정렬합니다.center: 교차 축의 가운데에 정렬합니다.space-between: 줄 사이의 간격을 동일하게 분배합니다.space-around: 줄 사이와 양 끝에 동일한 간격을 분배합니다.stretch(기본값): 줄이 컨테이너의 크기에 맞게 늘어납니다..container {
display: flex;
align-content: center;
}
자식 요소(flex items)에 설정하는 속성들은 개별 요소의 크기와 배치를 제어합니다.
flex-grow
요소가 남은 공간을 얼마나 차지할지를 설정합니다. 기본값은 0이며, 1 이상의 값으로 설정하면 컨테이너의 남은 공간이 요소들 사이에 비례적으로 분배됩니다.
.item {
flex-grow: 1;
}
flex-shrink
컨테이너의 크기가 줄어들 때 요소가 얼마나 줄어들지를 설정합니다. 기본값은 1이며, 0으로 설정하면 요소가 줄어들지 않습니다.
.item {
flex-shrink: 1;
}
flex-basis
요소의 기본 크기를 설정합니다. auto가 기본값이며, 픽셀(px), 퍼센트(%), 또는 다른 단위를 사용할 수 있습니다.
.item {
flex-basis: 100px;
}
flex
flex-grow, flex-shrink, flex-basis를 축약하여 설정하는 속성입니다. 예를 들어, flex: 1 0 100px;는 flex-grow: 1;, flex-shrink: 0;, flex-basis: 100px;와 동일합니다.
.item {
flex: 1 0 100px;
}
align-self
개별 요소의 교차 축 정렬을 설정합니다. align-items 속성에 영향을 받지 않고, 요소 하나만 독립적으로 정렬할 수 있습니다.
flex-start, flex-end, center, baseline, stretch 중 하나를 사용할 수 있습니다..item {
align-self: center;
}
아래는 Flexbox를 사용하여 간단한 레이아웃을 구현한 예제입니다.
HTML 구조:
<div class="container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
</div>
CSS 코드:
.container {
display: flex;
justify-content: space-around;
align-items: center;
height: 200px;
background-color: #f0f0f0;
}
.item {
flex: 1;
text-align: center;
padding: 20px;
background-color: #a0c4ff;
margin: 5px;
}
이 코드는 justify-content: space-around로 각 아이템이 수평으로 간격을 두고 배치되며, align-items: center로 아이템들이 세로로 가운데 정렬됩니다.
결론
CSS Flexbox 레이아웃은 요소들을 유연하게 배치할 수 있도록 도와주는 강력한 레이아웃 시스템입니다. Flexbox를 사용하면 간단한 레이아웃부터 복잡한 배치까지 손쉽게 구성할 수 있으며, 반응형 디자인에서도 매우 유용합니다. Flex 컨테이너와 Flex 아이템의 속성을 적절히 조합하여 다양한 레이아웃을 만들 수 있습니다.
CSS에서는 애니메이션과 변환 기능을 통해 웹 요소에 생동감을 더할 수 있습니다. 애니메이션은 특정 상태에서 다른 상태로의 움직임을 정의하고, 변환은 요소의 위치, 크기, 회전 등을 조절합니다.
CSS 애니메이션은
@keyframes와animation속성을 사용하여 정의합니다.@keyframes에서 단계별 애니메이션 효과를 정의하고,animation속성에서 애니메이션을 요소에 적용합니다.
@keyframes slideIn {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(0);
}
}
animation 속성
animation속성은 요소에 애니메이션을 적용하는 속성입니다.name,duration,timing-function,delay,iteration-count등의 속성을 가질 수 있습니다.
.element {
animation: slideIn 2s ease-out 1s 3;
}
animation-name: 사용할 애니메이션 이름을 지정합니다.animation-duration: 애니메이션이 실행되는 시간을 설정합니다.animation-timing-function: 애니메이션 속도 곡선을 지정합니다. (예: ease, linear, ease-in-out 등)animation-delay: 애니메이션이 시작하기 전 대기 시간을 설정합니다.animation-iteration-count: 애니메이션 반복 횟수를 설정합니다. infinite로 무한 반복도 가능합니다.
transition속성은 요소의 상태가 변경될 때 자연스럽게 이동하도록 합니다. 일반적으로hover,focus등의 상태에서 사용됩니다.
.button {
background-color: blue;
transition: background-color 0.3s ease;
}
.button:hover {
background-color: green;
}
transition-property: 전환할 속성을 지정합니다. (예: background-color, transform)transition-duration: 전환 효과의 지속 시간을 지정합니다.transition-timing-function: 전환 속도 곡선을 설정합니다.transition-delay: 전환 효과가 시작되기 전 대기 시간을 설정합니다.2D 변환은 요소의 위치나 모양을 2차원 평면에서 변형합니다.
translate: 요소를 이동시킵니다.
transform: translate(50px, 100px);
scale: 요소의 크기를 조절합니다.
transform: scale(1.5);
rotate: 요소를 회전시킵니다.
transform: rotate(45deg);
skew: 요소를 기울입니다.
transform: skew(10deg, 20deg);
2D 변환은 단독으로 사용하거나, 여러 변환을 조합할 수 있습니다.
transform: translate(50px, 100px) scale(1.2) rotate(30deg);
3D 변환은 요소를 3차원 공간에서 변형하며,
perspective속성을 통해 원근감을 부여할 수 있습니다.
rotateX: 요소를 X축을 기준으로 회전합니다.
transform: rotateX(45deg);
rotateY: 요소를 Y축을 기준으로 회전합니다.
transform: rotateY(60deg);
rotateZ: 요소를 Z축을 기준으로 회전합니다.
transform: rotateZ(30deg);
perspective: 3D 공간에서 요소의 원근감을 설정합니다. 보통 부모 요소에 적용됩니다.
perspective: 500px;
.container {
perspective: 600px;
}
.card {
transform: rotateY(45deg);
}
애니메이션과 변환을 통해 웹 요소에 다이나믹한 효과를 추가할 수 있으며, 사용자 경험을 더욱 풍부하게 만들 수 있습니다.
반응형 디자인은 다양한 화면 크기와 디바이스에 맞게 웹페이지의 레이아웃과 스타일을 유연하게 조정하는 방법입니다. 이를 통해 한 웹페이지를 PC, 태블릿, 스마트폰 등에서 모두 잘 보이도록 만듭니다.
@media)미디어 쿼리는 특정 조건에 따라 CSS를 적용할 수 있도록 하는 규칙입니다. 화면 크기, 해상도, 방향 등 조건에 따라 서로 다른 스타일을 적용하여 반응형 디자인을 구현할 수 있습니다.
/* 기본 스타일 */
body {
font-size: 16px;
}
/* 화면 너비가 768px 이하일 때 적용 */
@media (max-width: 768px) {
body {
font-size: 14px;
}
}
/* 화면 너비가 480px 이하일 때 적용 */
@media (max-width: 480px) {
body {
font-size: 12px;
}
}
max-width: 특정 너비 이하일 때 스타일을 적용.min-width: 특정 너비 이상일 때 스타일을 적용.orientation: 화면 방향(portrait, landscape)에 따라 스타일 적용.유연한 그리드 레이아웃은 비율 기반의 크기를 사용하여 화면 크기에 따라 요소의 크기를 조정하는 레이아웃 방식입니다. 주로
flex또는grid레이아웃과 함께 사용됩니다.
.container {
display: flex;
flex-wrap: wrap;
}
.item {
flex: 1 1 200px; /* 최소 200px, 화면 크기에 따라 크기 조정 */
margin: 10px;
}
이 예제에서는 flex: 1 1 200px를 사용하여 요소가 최소 200px 이상으로 배치되도록 설정하고, 화면 크기에 따라 자동으로 크기를 조정합니다.
반응형 디자인에서는 이미지와 배경이 화면 크기에 맞게 조정되도록 설정해야 합니다.
반응형 이미지: 이미지에 max-width: 100%를 설정하면, 이미지가 부모 요소의 너비를 넘지 않도록 제한할 수 있습니다.
img {
max-width: 100%;
height: auto;
}
반응형 배경: background-size: cover를 사용하여 배경 이미지가 요소를 완전히 덮도록 설정합니다. 화면 크기에 따라 비율이 유지됩니다.
.background {
background-image: url('background.jpg');
background-size: cover;
background-position: center;
}
모바일 우선 디자인은 먼저 모바일 화면을 기준으로 스타일을 작성한 후, 화면 크기가 큰 디바이스(예: 태블릿, 데스크탑)에 맞게 추가적인 스타일을 작성하는 방법입니다. 모바일 기기를 우선으로 고려하여 코드를 최적화할 수 있습니다.
/* 기본: 모바일용 스타일 */
body {
font-size: 14px;
padding: 10px;
}
/* 태블릿 이상에서 적용 */
@media (min-width: 768px) {
body {
font-size: 16px;
padding: 20px;
}
}
/* 데스크탑 이상에서 적용 */
@media (min-width: 1024px) {
body {
font-size: 18px;
padding: 30px;
}
}
모바일 우선 디자인은 반응형 웹페이지의 로딩 속도를 개선하고, 사용자가 주로 모바일 기기에서 웹페이지를 접속하는 환경에 적합합니다.