CSS는 Cascading Style Sheets의 약자로 HTML과 같은 마크업 언어가 어떻게 표현되는지 결정한다. HTML이 웹 페이지의 구조를 담당한다면, CSS는 구조의 외부와 내부를 꾸미는 역할을 한다. 같은 HTML 구조를 가지고 있는 문서도, CSS 파일에 따라 전혀 다른 웹사이트로 보이게 할 수 있다.
selector 규칙을 이해한다.박스 모델을 이해한다.CSS 속성을 검색/이용한다.같은 구조와 로직을 가진 두 웹 어플리케이션이 있다면, CSS로 스타일링한 웹 어플리케이션이 더 좋다고 할 수 있다. 기왕이면 다홍치마다. CSS가 심미적인 이유만으로 사용되는 건 아니다. 레이아웃 디자인이나 최소한의 타이포그래피로 더 나은 UX를 제공할 수도 있다. 다른 CSS 파일을 적용해 활자 매체로 출판을 하거나, 색약이나 장애인이 웹 페이지를 이용할 때도 도움을 줄 수 있다고 하니 멋지다!
서버 개발자가 된다고 해도 CSS를 작성해서 간단한 UI를 만드는 일은 개발자의 기본 소양이다. 콘텐츠의 적절한 위치와 배치를 조절하는 레이아웃 디자인은 디자이너가 아니어도 할 수 있어야 한다.
UI
UX
사용자가 웹 서비스를 사용할 때, 브라우저에 보이는 앞단을 프론트엔드라고 한다. 프론트엔드 개발자는 레이아웃 디자인과 타이포그래피 정도는 다룰 수 있어야 한다. 거기에 더해 정렬이나 배색에 대한 감각, 좋은 UX를 가진 웹이나 앱을 분석해본 경험(UX에 대한 고민)이 있다면 좋다.
CSS는 웹 개발자가 배우기 가장 쉬운 동시에, 가장 어려운 언어 중 하나다. CSS를 적용할 HTML 요소를 선택하고 속성과 값을 정의하면 거의 완성이다. 하지만 프로젝트 규모가 조금이라도 커져도 일이 복잡해진다. 이런 복잡함을 다루기 위해 다양한 모범 사례가 만들어졌지만, 합의되진 않았다. 이들은 서로 상충하기도 한다.
시맨틱 태그는 태그가 감싸고 있는 영역이 어떤 역할을 담당하는지 쉽게 파악할 수 있도록 해준다.

웹페이지를 스타일링하는 CSS를 적용하기 위해서는 선택자(Selector)가 필요하다. HTML 문서에서 어떤 태그에 내가 원하는 스타일을 적용할지 선택해야 하기 때문이다.
CSS 선택자는 크게 3개로 나뉜다.
태그이름id#를 이용해 선택한다.class.를 이용해 선택한다.CSS 스타일을 적용할 수 있는 방법은 3가지가 있다. 하지만 관심사 분리 측면에서 웹페이지의 구조를 담당하는 HTML 파일과 스타일링을 담당하는 CSS파일을 나누는 외부 스타일 시트 방법을 이용하기를 권장한다.
<link rel="stylesheet" href="index.css" />.red {
color: #ff0000; /*HEX 혹은 주요 색상의 이름을 사용*/
}
.box {
background-color: #d4edda; /* 배경 색상 */
border-color: #c3e6cb; /* 테두리 색상 */
}
background: #color url("image url") no-repeat;
background-color: #color;
font-weight text-decoration letter-spacing line-height
.emphasize {
font-family: "SF Pro KR", "MalgunGothic", "Verdana";
}
글꼴의 크기를 지정할 때 단위가 중요하다. 글꼴의 단위는 절대단위, 상대단위 두 가지로 구분할 수 있다.
title {
font-size: 15px;
}
환경에 영향을 받지 않는 절대적인 크기로 정하는 경우 px을 사용한다.
일반적인 경우 상대 단위인 rem을 추천한다.
화면 너비나 높이에 따른 상대적인 크기가 중요하면 vw, vh를 사용한다.
반응형 웹에서 기준점을 만들 때, 디바이스 크기를 나누는 기준을 px로 정한다.
text-align : 가로정렬 - left, right, center, justify(양쪽정렬)
vertical-align : 세로정렬(복잡하다) 부모 요소의 display 속성이 table-cell이어야 한다.
모든 콘텐츠는 각자의 영역을 가지고, 하나의 콘텐츠로 묶이는 요소들이 하나의 박스가 된다.

block : 줄바꿈이 되고, 기본적으로 100% 너비를 갖고 크기지정을 할 수 있는 박스inline : 줄바꿈이 일어나지 않고, 글자가 차지하는 만큼 기본 너비를 갖고, 크기지정을 할 수 없는 박스 inline-block : 줄바꿈이 일어나지 않으면서 글자가 차지하는 만큼 기본 너비를 갖고, 크기 지정을 할 수 있는 박스
테두리 border를 기준으로 안쪽 여백인 padding과 바깥쪽 여백인 margin이 있다.
p {
border: 1px solid red;
}
p {
margin: 10px 20px 30px 40px; /*시계방향으로 적용된다.*/
}
/* 값이 두 개면 상하/좌우이고 값이 한 개면 사방으로 적용된다. 방향을 특정해 속성을 나누는 것도 가능하다. */
/* 음수값이 적용되는 부분도 재밌다. */
p {
height: 40px; /* 콘텐츠 크기보다 작게 박스 크기를 설정 */
overflow: auto;
/* overflow 속성을 적용해 콘텐츠가 박스 밖으로 나오지 않도록 함 hidden, overflow-x, overflow-y 방향도 지정할 수 있다. */
}
여백을 고려하지 않고 콘텐츠 영역을 고려해서 박스 크기를 지정하면 처음에 고려했던 레이아웃에서 벗어날 수 있다. 따라서 여백과 테두리 두께를 포함한 박스 계산법을 권장한다.

* {
box-sizing: border-box;
}
/*content-box는 콘텐츠 영역을 기준으로 박스 크기를 계산하는 기본값이다.*/
css 공부할 때 추천하고 싶은 사이트 :
블로깅이 무엇일까? 텍스트 중심으로 기록을 남기는 행위다. 개발자로의 성장과정을 보여줄 수 있다.
TIL e.g. 개발자는 좋은 질문을 해야 합니다. (배운 것 중에 어떤 주제를 골라서 정리하는 방법도 좋을 거 같다)기술 블로깅 (특정 주제를 가지고.. 어렵지 않아도 간단하더라도)Error Handling Log (내가 마주한 사소한 문제라도 에러를 어떻게 핸들링했는지 기록하는 것. 해결하지 못해도 과정의 기록도 괜찮다.)회고 (한 주 단위, 혹은 한 달 단위로 무엇이 좋았나? 무엇이 문제였나? 좋았던 것은 어떻게 더 발전시킬 것인가? 문제는 어떻게 해결해 나갈 것인가?)