css는 웹 페이지 스타일 및 레이아웃을 정의하는 스타일시트 언어다. HTML로 웹 페이지의 구조를 세운 후 더 나은 UX를 제공하기 CSS로 UI 및 레이아웃을 구성할 수 있다.
사용자 인터페이스는 컴퓨터에 무지한 일반 사용자도 쉽게 사용할 수 있는 인터페이스를 의미한다.
사용자 경험은 복잡한 내용을 단순하게 구분 짓고 , 페이지를 나누어 사용자가 한 페이지에서 볼 수 있는 내용을 제한하여 사용자가 하나의 내용에 집중할 수 있게 하는 것을 의미한다.
셀렉터는 요소 이름이나 id, 또는 class를 선택한다. 셀렉터로 특정 요소를 선택했다면, 중괄호 안에서 이 요소에 적용할 내용을 작성한다.
이 요소에 적용할 수 있는 내요을 속성이라고 하고 색상, 글자 크기 등 다양한 속성이 있다. 속성에 적용할 적절한 값을 입력하여 스타일로 표현한다. 속성과 값의 끝에는 세미콜론(;)을 붙여 속성끼리 구분한다.
작성된 css 파일을 HTML에 적용하는 방법은 <link>
태그 안에서 href
속성을 통해 파일을 연결할 수 있다.
<link rel="stylesheet" href="index.css" / >
rel은 연결하고자 하는 파일의 역할이나 특징을 나타내고 css는 stylesheet이므로 속성에 stylesheet를 추가한다.
href 속성에는 파일의 위치을 연결하고 작성한 파일이 다른 폴더에 존재하는 경우 절대 경로 또는 상대 경로를 입력해 원하는 파일을 찾아 연결할 수 있다.
<nav style="color : bule; background: #eee"> .. </nav>
<style>
nav {
background : bule;
color : #eee;
}
</style>
<link rel="stylesheet" href="index.css" / >
But 관심사 분리 측면에서 인라인 스타일과 내부 스타일 시트는 권장하지 않는다.
id는 문서 내에 단 하나의 요소에만 적용할 수 있는 유일한 이름이어야 하고 #
을 이용해 선택할 수 있다.
<h1 id="title"> Title </h1>
css
#title {
color : red;
}
class는 문서 내에 여러 요소에 동일하게 적용할 수 있고 .
을 이용해 선택할 수 있다.
html
<h1 class="title"> Title </h1>
css
.title {
color : red;
}
여러 개의 class를 하나의 엘리먼트에 적용하고자 한다면 띄어쓰기로 구분한다.
<h1 class="title action" > Title </h1>
id
class
Google Fonts 서비스로 쉽게 글꼴을 바꿀 수 있음
1rem 이 16px 이므로
하나의 웹 페이지 내에 모든 콘텐츠는 고유의 영역을 가지고 있다. 그 영역은 항상 직사각형으로 이루어져 있기 때문에 박스라고 부르며 박스는 높이와 넓이, 테두리와 여백 등 다양한 속성을 가지고 있다.
줄 바꿈이 되는 박스
줄 바꿈이 일어나지 않고 크기 지정을 할 수 없는 박스
이 두 가지 박스 종류의 특징이 섞인 박스, 다른 요소의 옆으로 붙으면서 자체적으로 고유의 크기를 가짐
<h1> , <p> ...
<span> ...
inline 박스의 경우에는 width, height 속성이 적용되지 않음
css 박스 모델은 border(테두리)를 기준으로 padding(안쪽 여백)과 margin(바깥 여백)이 있다.
각 영역이 차지하는 크기를 파악하기 위해, 레이아웃을 만들면서 그 크기를 시각적으로 확인할 수 있도록 만듭든다.
p {
border : 1px solid red;
}
각 영역의 바깥에 여백을 줄 수 있다. 각각의 값은 top, right, bottom, left로 시계방향으로 돌아간다.
p {
margin : 10px 20px 30px 40px;
}
값을 두 개만 넣으면 10px - top과 bottom 적용 , 20px - left와 right 적용
p {
margin : 10px 20px;
}
값을 두 개만 넣으면 10px - top과 bottom 적용 , 20px - left와 right 적용
p {
margin : 10px 20px;
}
값을 하나만 넣으면 모든 방향의 바깥 여백에 적용
p {
margin : 10px;
}
margin-top , margin-left , margin-bottom , margin-right 로도 적용 가능
padding은 border를 기준으로 박스 내부의 여백을 지정하고 값의 순서에 따른 방향은 margin과 동일하게 top, right, bottom, left 시계방향으로 돌아간다.
p {
padding: 10px 20px 30px 40px;
}
p {
height : 40px;
overflow : auto;
}
* {}
h1 {}
span, h1 {}
#title {}
.title {}
a[href] {}
p[id="title"] {}
p[class~="out"] {}
p[class*="out"] {}
header > p {}
<header>
<p>1
<span>
<p>span 안에 있는 p</p>
</span>
</p>
<p>2</p>
</header>
header > p {}
<header>
<p>1//선택
<span>
<p>span 안에 있는 p</p>
</span>
</p>
<p>2</p>//선택
</header>
section ~ p {}
<header>
<section></section>
<p></p>//선택
<p></p>//선택
<p></p>//선택
</header>
section + p {}
<header>
<section></section>
<p></p> //선택
<p></p>
<p></p>
</header>
a: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) {}
...
input:not([type="password"]) {} // input type이 password인 요소를 제외하고 선택
div:not(:nth-of-type(2)) {} //자식 중 두 번째 div를 제외하고 선택
input [type="text"]:valid {} // 정합성 검증이 성공한 input 요소 또는 form 요소를 선택
input [type="text"]:invalid {} 정합성 검증이 실패한 input 요소 또는 form 요소를 선택