CSS(Cascading Style Sheets)는 웹 페이지 스타일 및 레이아웃을 정의하는 스타일시트 언어입니다.
웹 프론트엔드 개발자는 웹 개발 기술을 기반으로 사용자와 소통할 수 있는 웹 페이지 제작을 담당합니다.
CSS와 프론트엔드 개발과의 관계에 대해서 작성하고자 합니다.
CSS는 좋은 사용자 경험을 제공하기 위한 도구입니다.
CSS는 웹 사이트 사용자가 HTML 문서에 작성된 콘텐츠를 잘 이해할 수 있도록 돕는 역할을 합니다. CSS 작업의 첫 번째 단계는 웹 애플리케이션에 접근할 수 있는 사용자 인터페이스(user interface)
만들기 입니다.
CLI(Command Line Interface)
를 사용하여 컴퓨터와 소통해왔습니다. 하지만 CLI에 익숙하지 않은 일반 사용자들은 애플리케이션을 이용하기 쉽지 않았습니다.직관적이고 쉬운 UI제작은 프론트엔드 개발자의 기본 소양입니다.
좋은 사용자 경험(UX; user experience)
은 직관적이고 쉬운 UI에서 나옵니다. 좋은 사용자 경험에 대한 다양한 정의가 있겠지만 저는 복잡한 내용을 단순하게 구분 짓고, 페이지를 나누어서 사용자가 하나의 내용에 집중할 수 있도록 하는 것이라고 생각합니다.
위와 같은 이유로 프론트엔드 개발자가 되려면 아래의 역량을 필요로 하고 있습니다.
선택자(seletor)는 요소 이름이나 id, 또는 class를 선택합니다. 선택자(seletor)로 특정 요소를 선택했다면, 중괄호 안에서 이 요소에 적용할 내용을 작성합니다.
요소에 적용할 수 있는 내용을 속성이라고 합니다.
body {
margin: 0;
padding: 0;
background: #fff;
color: #4a4a4a;
}
header, footer {
font-size: large;
text-align: center; // 텍스트의 가운데 정렬을 하기 위한 속성
padding: 0.3em 0;
// em은 상위 요소 크기의 몇 배인지로 크기를 정합니다.
rem은 웹 브라우저 설정에서 정한 html 요소 크기의 몇 배인지로 크기를 정합니다.
background-color: #4a4a4a; // 배경 색을 바꾸기 위한 속성
color: #f9f9f9; // 글자 색을 바꾸기 위한 속성
}
nav {
background: #eee;
}
main {
background: #f9f9f9;
}
aside {
background: #eee;
}
// background와 background-color의 차이점
// background는 하나의 선언에서 요소에 대한 모든 배경 속성을 설정할 수 있는
반면에 background-color는 배경 색상만 설정할 수 있습니다.
// background-colror: #444;
// background-repeat: no-repeat;
// background: #f9f9f9 url("image.jpg") repeat left top;
// ...
// 주의할 점! background 속성은 이전 배경 속성 선언들을 리셋 시키고
현재의 background #f9f9f9 repeat ... 속성만 남깁니다.
<link rel="stylesheet" href="index.css" />
<link>
요소는 HTML 파일과 다른 파일을 연결하는 목적으로 사용합니다. <link>
요소의 <rel>
은 연결하고자 하는 파일의 역할이나 특징을 나타냅니다. CSS(Cascading Style Sheet)는 stylesheet이므로 rel
속성에 stylesheet
를 추가합니다. href
속성에는 파일의 위치를 추가해야합니다. 링크 방식은 병렬의 형태로 파일을 연결합니다.
위 방법말고도 요소의 style 속성에 직접 스타일을 적용하는 인라인 방식, <style>
요소의 내용으로 스타일을 작성하는 내장 방식 방법이 있지만 관심사 분리 측면에서 권장하지 않는 방법입니다.
// 내장 방식
<style>
div {
color: red;
margin: 20px;
}
</style>
// 인라인 방식
<div style="color: red; margin: 20px;"></div>
마지막으로는 @import방식이 있습니다.
@import방식
은 CSS의 @import규칙으로 CSS문서 안에서 또 다른 CSS문서를 가져와 연결하는 방식을 뜻합니다. @import방식
은 직렬의 형태로 파일을 연결합니다. 아래의 예시처럼 main.css를 해석한 후 box.css를 해석하기 때문에 CSS 연결을 지연시키기 위해 사용하기도 합니다.
// html
<link rel="stylesheet" href="./css/main.css">
// main.css
@import url("./box.css");
div {
color: red;
margin: 20px;
}
// box.css
.box {
background-color: red;
padding: 20px;
}
#
기호를 이용해야합니다.#
이 아닌 .
를 이용해야합니다.//HTML
<h4 id="navigation-title"> this is the navigation section </h4>
<ul>
<li class="menu-item">Home</li>
<li class="menu-item selected">Home</li>
</ul>
//CSS
#navigation-title {
color: red;
}
.menu-item {
text-decoration: underline;
}
.selected {
font-weight: bold;
color: #009999;
}
id | class |
---|---|
# 으로 선택 | . 으로 선택 |
한 문서에 단 하나의 요소에만 적용 | 동일한 값을 갖는 요소 많음 |
특정 요소에 이름을 붙이는 데 사용 | 스타일의 분류(classification)에 사용 |
color
.box {
color: #155724; /* 글자 색상 */
background-color: #d4edda; /* 배경 색상 */
border-color: #c3e6cb; /* 테두리 색상 */
}
font-family
.emphasize {
font-family: "SF Pro KR", "MalgunGothic", "Verdana";
}
font-size
기본값: 16px
.title {
font-size: 24px;
}
font-style
기본값: 'normal' 기울기 없음
font-style: italic // 이텔릭체
font-weight
기본값: nomal, 400
font-weight: normal; // 보통 폰트 가중치. 400과 같음
font-weight: bold; // 굵은 폰트 가중치. 700과 같음
/* Relative to the parent */
font-weight: lighter; // 부모 요소보다 얇은 폰트 가중치
font-weight: bolder; // 부모 요소보다 굵은 폰트 가중치
font-weight: 100, 200, ... , 900 // 숫자형 폰트 가중치
text-decoration
// 텍스트 장식은 모든 자손 텍스트 요소에 걸쳐서 적용됩니다.
text-decoration: underline;
text-decoration: overline red;
text-decoration: none;
// text-decoration: color line style thickness
color, line, stlye, thickness의 단축 속성을 가지고 있습니다.
letter-spacing
/* 키워드 값 */
letter-spacing: normal; // 현재 글꼴의 기본 간격
/* <length> 값 */ // 기본 간격에 추가할 글자간 간격
letter-spacing: 0.3em;
letter-spacing: 3px;
letter-spacing: .3px;
line-height
/* Keyword value */ // 줄 상자의 높이를 설정합니다.
line-height: normal;
/* Unitless values: use this number multiplied
by the element's font size */
// '배수' 가장 권장하는 방법입니다. font-size에 따라 적용됩니다.
line-height: 3.5;
/* <length> values */
line-height: 3em;
/* <percentage> values */
line-height: 34%;
text-shadow
/* offset-x | offset-y | blur-radius | color */
text-shadow: 1px 1px 2px black;
/* color | offset-x | offset-y | blur-radius */
text-shadow: #fc0 1px 0 10px;
/* offset-x | offset-y | color */
text-shadow: 5px 5px #558abb;
/* color | offset-x | offset-y */
text-shadow: white 2px 5px;
/* offset-x | offset-y
/* Use defaults for color and blur-radius */
text-shadow: 5px 10px;
정렬
가로 정렬 text-align
을 사용합니다. 유효한 값으로는 left
, right
, center
, justify(양쪽 정렬)
이 있습니다.
세로 정렬 vertical-align
을 사용합니다. inline 또는 table-cell box에서의 수직 정렬을 지정합니다.
/* keyword values */
vertical-align: baseline;
vertical-align: sub;
vertical-align: super;
vertical-align: text-top;
vertical-align: text-bottom;
vertical-align: middle;
vertical-align: top;
vertical-align: bottom;
/* <length> values */
vertical-align: 10em;
vertical-align: 4px;
/* <percentage> values */
vertical-align: 20%;
px
, pt
등%
: 상대적 백분율em
: 요소의 글꼴 크기rem
: 루트 요소(html)의 글꼴 크기vw
: 뷰포트 가로 너비의 백분율vh
: 뷰포트 세로 너비의 백분율...
px
(픽셀)을 사용합니다. 픽셀은 크기가 고정된 절대 단위이기 때문에 사용자 접근성이 불리합니다. rem
을 권장합니다. root의 글자 크기, 즉 브라우저의 기본 글자 크기가 1rem이며, 두 배로 크게 하고 싶다면 2rem으로 지정합니다. 이는 사용자가 설정한 기본 글꼴 크기를 따르므로, 접근성에 유리합니다.px
로 정합니다. 보통 450px 미만의 너비를 갖는 디바이스는 스마트폰의 세로 모드로 생각할 수 있습니다.vw
, vh
를 사용합니다. 웹사이트의 보이는 영역을 Viewport
라고 합니다. vw
,vh
는 각각 viewport width와 viewport height를 뜻하며, 1vw
는 보이는 영역 너비의 1/100을, 1vh
는 보이는 영역 높이의 1/100을 뜻합니다.