Css
CSS 기초
1. CSS
1.1. CSS?
- 웹 문서를 꾸미기 위한 Style Sheet 언어
1.2. 기본 문법
1.3. 내부 CSS, 외부 CSS, inlince CSS
- 내부 CSS : 웹 문서 안에 스타일을 작성
- 외부 CSS : 별도의 파일을 만들어서 스타일 코드 관리
- inline CSS : 태그에 직접 스타일 정의
1.4. CSS 주석
/* 주석 */
2. 선택자, 상속과 초기화
2.1. 전체 선택자
*
: 문서 내의 모든 요소를 지정2.2. 태그 선택자
- 해당 HTML 태그에 해당하는 요소만 지정
2.3. id, class 선택자
- 해당 id 또는 class와 완전히 동일한 값을 갖는 요소만 지정
- id는
#
으로 시작, class는.
으로 시작2.4. 속성 선택자
- 요소가 가진 속성을 선택자로 한다.
- 대괄호 안에 속성 이름을 넣어 선택자로 사용할 수 있다.
2.5. 의사(가상) 클래스
- 기존 “선택자”에 추가하는 특별한 상태를 선택하는 선택자
- 대표적인 의사(가상) 클래스
:hover
: 마우스를 올리면 적용:focus
: 키보드의 탭 키로 이동시 적용:first-child
: 자식 노드들 중 첫 번째 노드를 선택:nth-child(n)
: 자식 노드들 중 n번째 노드를 선택2.6. 의사(가상) 요소
- 기존 “선택자”에 추가하는 선택한 요소의 일부를 스타일링하는 선택자
- 대표적인 의사(가상) 요소
::before
: 특정 요소의 전을 가리킴::after
: 특정 요소의 앞을 가리킴::placeholder
: input태그의 placeholder값을 선택2.7. 상속과 초기화
inherit
: 부모 요소의 “스타일 값”을 이어받아 자식 요소에 적용하는 것initial
: 브라우저가 지정한 속성의 초기값을 요소에 적용한다.(초기값은 예상치 못한 값일 수 있으니 주의해야 한다.)3. 결합자, 우선순위
3.1. 자손 결합자
- 앞 셀렉터의 자식 요소들 중에서 해당 선택자와 일치하는 요소를 선택한다.
- ` `(공백)을 주어 앞 셀렉터의 자식 요소를 선택한다.
3.2. 자식 결합자
- 앞 셀렉터의 직계 자식 요소들 중에서 해당 선택자와 일치하는 요소를 선택한다.
>
을 주어 앞 셀렉터의 바로 아래 자식 요소를 선택한다.3.3. 일반 형제 결합자
- 앞 셀렉터의 다음에 위치한 모든 형제 요소들 중 해당 선택자와 일치하는 요소를 선택한다.
~
를 주어 앞 셀렉터의 형제 요소를 선택한다.3.4. 인접 형제 결합자
- 앞 셀렉터의 형제 관계의 요소들 중에서 해당 선택자와 일치하는 요소를 선택한다.
+
를 주어 앞 셀럭터의 바로 다음 형제 요소를 선택한다.3.5. 우선순위(명시도)
- 작성 순서, 결합, 선택자에 따라 우선순위는 변경된다.
- 기본 우선 순위
- 태그 선택자
- class,속성,의사(가상) 클래스 선택자
- id 선택자
- inline CSS
4. 단위
4.1. 고정 단위
px
: Pixel은 정확한 크기를 나타내야 할 때 사용된다. 웹 브라우저 기본 폰트 크기는 16px이다. 소수점은 사용하면 안된다.pt
: Point는 일반적으로 문서 등에서 사용되는 단위이다. 웹 브라우저의 기본 폰트 크기는 12pt이다. 소수점은 사용하면 안된다.4.2. 상대 길이 단위
em
: 요소의 글꼴 크기에 상대적인 단위이다. 글꼴이20px
로 정해지면1em
은20px
크기이다. 모든 상대 길이 단위에는 소수점 단위가 사용될 수 있다. 또한em
은 합성값이기도 하다.font-size
가em
을 사용하여 중첩되어 정의되면 계속해서 커질 수 있다.rem
: html 셀렉터에 정의된font-size
를 기준으로 동작하는 단위이다. 합성을 회피하기 위해 만들어진 단위이다.%
: 부모 요소의 해당 속성의 크기에 * n%만큼으로 크기가 정해진다.vw
: Viewport Width(뷰포트 너비)는 화면의 너비에 따라 결정된다.vh
: Viewport Height(뷰포트 높이)는 화면의 높이에 따라 결정된다.vmin
: 너비와 높이 중에서 화면에서 가장 작은 값에 따라 결정된다.1vmin = (너비 or 너비) * 1%
5. 꾸미기
5.1. 글꼴 꾸미기
font-size
: 글자 크기를 변경할 수 있다.font-family
: 글씨체를 변경할 수 있다.font-weight
: 글짜 두께를 변경할 수 있다.color
: 글자 색상을 변경할 수 있다.text-align
: 글자를 가로로 정렬할 수 있다.line-height
: 글자의 줄간격을 변경할 수 있다.letter-spacing
: 자간을 변경할 수 있다.5.2. 배경 꾸미기
background-color
: 배경색을 지정할 수 있다.background-image
: 배경 이미지를 지정할 수 있다.background-repeat
: 배경 이미지의 반복을 지정할 수 있다.background-size
: 배경 이미지의 크기를 지정할 수 있다.background-position
: 배경 이미지의 위치를 제어할 수 있다.background
: 위 background 요소들을 한번에 작성할 수 있는 속성이다. 공백을 기준으로 구분하여 작성한다. 작성 순서는 상관없으나 위치/크기는 규칙에 맞게 함께 작성되어야 한다.6. 박스 모델
6.1. 크기 지정
width
,height
: 너비, 높이를 지정할 수 있다.- 블록 레벨 요소에서 사용할 수 있다.
- auto 값을 사용해 브라우저가 값을 계산해 지정하게 할 수 있다.
6.2. 최대/최소 크기 지정
max-width
,max-height
: 박스의 최대 너비, 최대 높이를 지정할 수 있다.min-width
,min-height
: 박스의 최소 너비, 최소 높이를 지정할 수 있다.6.3. 외부/내부 여백
margin
,padding
: 박스의 외부, 내부의 상하좌우 여백을 지정할 수 있다.- 블록 레벨 요소에 사용할 수 있다.
- 인라인 레벨 요소에는 좌/우만 적용할 수 있다.
- 작성 값의 개수에 따라 지정되는 방향이 다르다.
- margin은 음수값이 가능하다.
6.4. 여백 상쇄
- 경우에 따라 요소간의 외부 여백이 상쇄(결합)가 발생한다.
- 인접 형제간의 외부 여백은 상쇄된다.
- 제일 큰 여백을 따라간다.
- 부모와 자식 요소의 여백을 분리할 권한이 없을 경우 상쇄가 발생한다.
- 빈 블록도 상쇄가 발생한다.
6.5. 테두리
- 박스의 네 면에 테두리를 그릴 수 있다.
border
:border-width
border-style
border-color
순으로 값을 전달하여 박스의 테두리를 그린다.box-sizing
: 박스 크기를 계산할 때 내부 여백, 테두리의 크기를 포함할 지 결정한다.content-box
:padding
,width/height
,border-width
의 크기가 모두 더해진다.border-box
:width/height
의 크기만 더해진다.6.6. 초과
overflow
: 콘텐츠 내용이 지정한 박스의 크기를 초과했을 때 대처한다.- 기본값은
visible
로 초과해도 내용이 그대로 노출된다. overflow-x
,overflow-y
로 분리해서 지정할 수 있다.- 적용 가능한 값
visible
: 그대로 노출hidden
: 숨김scroll
: 스크롤바 무조건 노출auto
: 브라우저가 자동으로 결정하여 스크롤바 노출6.7. 투명도
- 기본값은
opacity
: 박스의 투명도를 조절한다.- 기본값은 1이며 0~1 사이의 소수점을 사용해 적용 가능하다.
- 투명도가 적용되면 자식 요소도 함께 투명해진다.
opacity
값은 상속되지 않는다.7. 표시 유형과 레이아웃
7.1. 표시 유형
display
: 요소를 블록, 인라인에 대한 처리의 선택과 자식 요소를 배치하는 레이아웃을 설정할 수 있다.block
↔inline
간의 변환을 해주는 유형inline-block
:inline
이지만 block의 가진 css도 사용할 수 있게 되는 유형none
: 존재하지 않는 것처럼 처리
visibility
: 레이아웃을 변경하지 않고 시각적으로 보이거나 숨길 수 있다.display
의none
과는 다르게 시각적으로 숨겨지기 때문에 레이아웃 상에서 공간은 그대로 차지하게 된다.7.2. float
float
: 문맥의 흐름으로부터 빠져 좌우측에 배치되는 속성이다.7.3. position
position
: 문서 상에 요소를 배치하는 방법을 지정한다.top
,right
,bottom
,left
값으로 offset(위치)를 제어할 수 있다.z-index
값으로 z축을 제어해 쌓이는 순서를 정의할 수 있다.- 적용 가능한 값
static
(기본값) : 문서의 흐름에 따라 배치되고 offset 및 z-index를 제어할 수 없다.relative
: 문서 흐름에 따라 배치하고 현재 위치 기준으로 offset과 z-index를 제어한다.absolute
: 문서 흐름에서 제거되고 가장 가까운 위치의 relative 요소에 상대적으로 배치된다.fixed
: 문서 흐름에서 제거하고 브라우저의 화면 기준으로 배치된다.sticky
: 문서 흐름에 따라 배치되나, 요소가 스크롤에 닿으면 따라다닌다.7.4. 유연한 상자 만들기(flexbox)
flex
: 유연함을 가진 일차원 레이아웃을 만들 수 있다.justify-context
: 가로축 정렬flex-start
(기본값) : 왼쪽 정렬flex-end
: 오른쪽 정렬center
: 수평 가운데 정렬space-between
: 양쪽 정렬space-around
: n등분 후 요소별 가운데 정렬, 전체 양쪽 정렬space-evenly
: 양 옆 공간을 동일하게 맞춤.
align-items
: 세로축 정렬strech
(기본값) : 요소를 세로축에 꽉 차게 늘림flex-start
,flex-end
: 위쪽, 아래쪽 정렬center
: 수직 가운데 정렬baseline
:font
에 정의된baseline
을 따라서 정렬
flex-grow
,flex-shrink
: 유연성 조절flex-basis
: 크기 조절flex-direction
: 축 바꾸기gap
,order
: 여백과 순서
- flex 연습해볼 수 있는 사이트 : Flexbox Froggy
- layout 만드는데 많이 쓰이니 꼭 기억할 것!
7.5. 바둑판 상자 만들기(Grid)
grid
: 수평선과 수직선을 가진 2차원 레이아웃을 만들 수 있다.grid-template-columns : size size size ...
: grid의 열의 개수를 조절한다.grid-template-rows : size size size ...
: grid의 행의 개수를 조절한다.grid-template : row / column
: 바둑판 조절하기repeat(count, size)
: 반복하기grid-row
,grid-column
: 셀 확장order
: 시각적인 순서가 바뀜, HTML 순서는 그대로grid-template-areas
,grid-area
: 영역 지정하고 배치하기gap
,order
: 여백과 순서
-
전판적인 홈페이지의 구조(semantic tags)를 정할 때 grid를 쓰면 편리하다.
8. CSS 주의사항
- id,class명 사용 시 대소문자에 유의하라!
- 한글은 가급적 사용하지 마라!
- 계층을 매번 생각하며 코딩하라!
- HTML 순서랑 css 순서랑 되도록 같게 유지하라!
- id, class명 작성시 숫자부터 오면 안된다!