CSS는 스타일 및 레이아웃을 정의하는 스타일시트 언어입니다. HTML로 구조를 세우고, 더 나은 사용자 경험(UX)을 제공하기 위한 도구입니다.
셀렉터란 말 그대로 선택해주는 요소입니다. 요소 이름이나 id, class를 사용하여 스타일을 적용할 수 있도록 해줍니다.
h4{
color :"red";
}
=>모든 <h4>의 색이 red로 변경된다.
<h4 id="navigation-title">
#navigation-title {
color : "red";
}
id를 사용한 셀렉터는 고유하게 사용되는 경우에 사용되며 #을 사용한다.
class를 사용한 셀렉터는 여러번 반복 사용되고 #
이 아니라 .
을 사용합니다.
<ul>
<li class="menu-item">Home</li>
<li class="menu-item">Mac</li>
<li class="menu-item">iPhone</li>
<li class="menu-item">iPad</li>
</ul>
.menu-item {
text-decoration: underline;
}
a[href] { }
p[id="only"] { }
header > p { }
첫 번째 요소인 header
를 부모요소로 가지는 첫 번째 p
요소를 선택하는 것이다.
header p {}
첫 번째 header
요소의 후손인 모든 p
요소들을 선택하는 것이다.
자식 셀렉터는 구조에서 한 단계 아래까지의 요소만 선택이 가능하고 후손 셀렉터는 단계와 상관없이 선택이 가능합니다.
section ~ p { }
section
과 같은 부모를 가진 p
요소들을 선택한다.
section + p { }
section
과 같은 부모를 가진 p
요소 중 첫 번째 p
요소를 선택한다.
인접 형제 셀렉터는 같은 요소가 많더라도 무조건 첫 번째 요소를 선택한다.
a:link { }
: 사용자가 방문하지 않은 <a>
요소를 선택합니다.
a:visited { }
: 사용자가 방문한 <a>
요소를 선택합니다.
a:hover { }
: 마우스를 요소 위에 올렸을 때 선택합니다.
a:active { }
: 활성화 된(클릭된) 상태일 때 선택합니다.
a:focus { }
: 포커스가 들어와 있을 때 선택합니다.
input:checked + span { }
: 체크 상태일 때 선택합니다.
input:enabled + span { }
: 사용 가능한 상태일 때 선택합니다.
input:disabled + span { }
: 사용 불가능한 상태일 때 선택합니다.
p:first-child { }
: 첫 번째 요소가 p
인 것을 선택.
ul > li:last-child { }
: ul
의 자식들 중, li
가 마지막에 있는 것을 선택.
ul > li:nth-child(2n) { }
: ul
의 자식들 중 짝수번째에 있는게 li
인 것을 선택.
section > p:nth-child(2n+1) { }
: section
의 자식들 중 홀수번째에 있는게 p
인 것을 선택.
ul > li:first-child { }
: ul
의 자식들 중 첫번째가li
인 것을 선택
li:last-child { }
: 마지막에 있는 요소가 li
인 것을 선택.
div > div:nth-child(4) { }
: div
의 자식 중에서, 네 번째에 있는 것이 div
인 것을 선택합니다.
div:nth-last-child(2) { }
: 마지막에서 두 번째에 있는 것이 div
인 것을 선택
section > p:nth-last-child(2n + 1) { }
: section
의 자식 요소들 중 마지막에서 홀수번째에 있는 것이 p
인 것을 선택
p:first-of-type { }
:p
요소의 형제 요소 중 첫 번째 p
요소를 선택 (❗️first-child와의 차이점은 첫 번째 자식 엘리먼트가 아니라 처음 등장하는 p를 선택하는 것이다.)
div:last-of-type { }
: div
의 형제 요소들 중 마지막에 등장하는 div
를 선택
ul:nth-of-type(2) { }
: ul
의 형제 요소들 중 두 번째로 등장하는 ul
를 선택
p:nth-last-of-type(1) { }
:p
의 형제 요소들 중 마지막에서 첫 번쨰 p
를선택
input:not([type="password"]) { }
: input
요소들 중 type
이 password
가 아닌 것을 선택
div:not(:nth-of-type(2)) { }
: div
요소들 중 두 번째로 등장하는게 아닌 div
요소를 선택
input[type="text"]:valid { }
: input
요소들 중 type
이 text
인 input
요소들을 선택
input[type="text"]:invalid { }
: input
요소들 중 type
이 text
가 아닌 input
요소들을 선택
<HTML 문서의 레이아웃>
HTML의 구조에 사용되는 여러가지 요소들 중에는 한 줄을 모두 차지하는 block 엘리먼트와 본인의 크기만큼을 사용하고 여러개의 요소들과 같은 줄을 공유하는 inline 엘리먼트가 존재한다.
inline 엘리먼트 같은 경우에는 width와 height가 적용되지 않기 때문에 display : inline-block
을 CSS로 추가해야한다.
span {
background: yellow;
❕display: inline-block;❕
width: 100px;
height: 100px;
}
margin과 padding은 박스를 구성하는 요소이고 margin은 박스의 바깥 여백을, padding은 contents와 border사이의 거리를 나타낸다.
margin과 padding을 표시하는 방법은 동일합니다.
1.margin : 10px, 20px, 30px, 40px;
: 순서대로 top
, rigth
, bottom
, left
를 나타낸다.
2.margin : 10px, 20px;
: 순서대로 top
과 bottom
을 그리고 , rigth
와 left
를 나타낸다.
3 그 이외에도 각각을 나눠서 표현할 수도 있다.
margin-top : 10px;
margin-bottom : 20px;
margin-right : 30px;
margin-left : 40px;
❕값으로 음수 값을 지정할 수 있는데 이러면 다른 요소와의 간격이 줄어들다가 영역을 벗어나기도 합니다.
width
를 주면 그걸 기준으로 margin
, padding
, border
을 더해주기 때문에 실제 width
와는 차이가 생긴다.
width = left-rigth-margin + left-rigth-padding + left-right-border + content width
즉, CSS로 width
를 주면 margin
, padding
, border
를 계산해서 내용의 width
를 정해준다.
✅CSS에서 기본적으로 박스의 크기를 측정하는 기본값은 content-box입니다. 그러나 대부분의 레이아웃 디자인에서 여백과 테두리를 포함하는 박스 크기 계산법인 border-box를 권장하기 때문에 CSS를 시작하기 이전에 다음의 셀렉터를 사용하여 박스 초기화를 해주는게 좋습니다.
* {
box-sizing : border-box;
margin : 0;
padding : 0;
}