Topic
CSS rules
Property
Box model
Display
Selector
What I Learned
1. CSS rule
CSS 선언(CSS declaration)
- CSS 문서에서 사용되는 구문으로 각 선언은 선택자(selector)와 선언부(declaration block)로 구성됩니다.
Selector {property: value;}
id
- HTML 요소에 대한 고유한 식별자입니다.
- 문서 내에서 단 하나의 요소에만 지정할 수 있습니다.
- 한 요소에 두 개 이상의 id를 지정할 수 없습니다.
- id name 앞에
#
기호를 붙여 선택자로 사용됩니다.
class
- HTML 여러 요소에 대한 스타일을 그룹으로 지정할 수 있게 해주는 식별자입니다.
- id와 달리 여러 요소에 적용될 수 있습니다.
- id와 달리 각 요소에 대해 다른 클래스를 지정할 수 있습니다.
- class name 앞에
.
기호를 붙여 선택자로 사용됩니다.
색상 단위(color unit)
- 키워드 (Keyword): red, blue, green, black, white 등과 같은 색상 이름을 사용할 수 있습니다.
- 16진수 (Hexadecimal): #을 사용하여 색상을 표현합니다. 예를 들어, #000000은 검정색이며, #FFFFFF은 흰색입니다.
- RGB: red, green, blue의 값으로 색상을 지정합니다. 예를 들어, rgb(255, 0, 0)은 빨간색입니다.
- RGBA: RGB와 같지만, alpha 값을 추가하여 투명도를 지정할 수 있습니다. 예를 들어, rgba(255, 0, 0, 0.5)는 반투명한 빨간색입니다.
- HSL: hue(색상), saturation(채도), lightness(명도)의 값으로 색상을 지정합니다. 예를 들어, hsl(0, 100%, 50%)은 빨간색입니다.
- HSLA: HSL과 같지만, alpha 값을 추가하여 투명도를 지정할 수 있습니다. 예를 들어, hsla(0, 100%, 50%, 0.5)는 반투명한 빨간색입니다.
- var(--color)같이 var()을 통해 사용자가 정의한 변수 이름을 사용할 수 있습니다.
크기 단위(size unit)
- 픽셀(px) : 절대 크기 단위로, 고정된 크기 값을 지정할 때 사용됩니다.
- 백분율(%) : 상대 크기 단위로, 부모 요소의 크기에 대한 백분율 값을 사용하여 크기를 지정할 때 사용됩니다.
- em : 상대 크기 단위로, 현재 요소에 지정된 font-size 값에 대한 배수 값을 사용하여 크기를 지정할 때 사용됩니다.
- rem : 상대 크기 단위로, 루트 요소(html)에 지정된 font-size 값에 대한 배수 값을 사용하여 크기를 지정할 때 사용됩니다.
- vw, vh : 뷰포트의 너비와 높이를 기준으로 크기를 지정할 때 사용됩니다.
- vmin, vmax : 뷰포트의 너비와 높이 중 작은 값 또는 큰 값에 대한 비율 값을 사용하여 크기를 지정할 때 사용됩니다.
2. CSS 속성
line-height
- 텍스트 요소의 줄 간격을 조정하는 데 사용됩니다.
- 기본값은 normal로, 이 경우 브라우저는 글꼴 크기에 따라 줄 간격을 자동으로 조정합니다.
- line-height의 다른 값으로는 길이 값(px, em 등), 상대 값(%, unitless number), 그리고 숫자 값이 있습니다. 숫자 값은 글꼴 크기에 대한 배수를 나타냅니다.
background-image
background-image: url('path/img');
- 요소의 배경 이미지를 설정합니다.
- 이미지는 URL 또는 linear-gradient()와 같은 CSS gradient 함수로 지정할 수 있습니다.
- 여러 개의 이미지를 사용할 경우 쉼표(,)로 구분하여 지정할 수 있습니다.
background-repeat
- 배경 이미지가 반복되는 방식을 지정합니다.
- repeat(기본값), repeat-x, repeat-y, no-repeat 등의 값으로 설정할 수 있습니다.
background-position
- 배경 이미지가 위치하는 위치를 지정합니다.
- top, bottom, left, right, center 등의 값으로 설정하거나, x y 형식으로 좌표값을 직접 지정할 수 있습니다.
background-size
- 배경 이미지의 크기를 지정합니다.
- auto(기본값), contain, cover, width height 형식으로 크기를 직접 지정할 수도 있습니다.
linear-gradient()
- CSS의 linear-gradient() 함수는 웹 페이지의 요소에 선형 그라데이션 배경을 생성하는 데 사용됩니다.
- 선형 그라데이션은 두 개 이상의 색상이 일정한 간격으로 변화하는 배경 효과를 만듭니다.
linear-gradient()
함수의 문법은 다음과 같습니다.
linear-gradient([<angle> | to <side-or-corner>], <color-stop-list>)
<angle>
은 그라데이션 라인의 각도를 지정합니다. 값은 각도 또는 rad, grad, turn 단위로 지정할 수 있습니다.
to <side-or-corner>
는 그라데이션 라인의 방향을 지정합니다. 값은 top, right, bottom, left, top left 등으로 지정할 수 있습니다.
<color-stop-list>
는 쉼표로 구분된 색상 중단점의 목록입니다. 각 색상 중단점은 색상 값과 선택적으로 위치를 지정할 수 있습니다. 위치는 퍼센트 또는 길이 단위로 지정할 수 있습니다.
- 예시
background: linear-gradient(to bottom, red, yellow, green);
- 이 코드는 45도 각도로 빨간색에서 노란색, 그리고 초록색으로 변화하는 선형 그라데이션 배경을 생성합니다.
background: linear-gradient(to right, red 20%, yellow 50%, green 80%);
- 이 코드는 오른쪽으로 진행하면서 빨간색(20% 지점), 노란색(50% 지점), 그리고 초록색(80% 지점)으로 변화하는 선형 그라데이션 배경을 생성합니다.
box-shadow
- CSS의
box-shadow
속성은 HTML 요소에 하나 이상의 그림자를 추가하는 데 사용됩니다.
box-shadow
속성의 값은 다음과 같습니다.
box-shadow: offset-x offset-y blur-radius spread-radius color inset;
offset-x offset-y
그림자가 그려지는 위치를 지정합니다.
blur-radius
그림자의 흐림 정도를 지정합니다. 값이 클수록 그림자는 더욱 흐릿하게 보입니다.
spread-radius
그림자가 퍼지는 정도를 지정합니다. 양수를 지정하면 그림자가 요소 바깥으로 확장되고, 음수를 지정하면 그림자가 요소 내부로 축소됩니다.
color
그림자의 색상을 지정합니다.
inset
그림자를 요소의 내부에 그리도록 합니다. 이 키워드를 지정하지 않으면 그림자는 요소의 바깥에 그려집니다.
- 예시
box-shadow: 10px 5px 5px black;
- 이 코드는 요소에 가로로 10px, 세로로 5px 이동한 위치에 흐림 정도가 5px이고 색상이 검은색인 그림자를 추가합니다.
box-shadow: inset 0 0 10px #000000;
- 이 코드는 요소 내부에 흐림 정도가 10px이고 색상이 검은색인 그림자를 추가합니다.
opacity
- CSS 속성 중 하나로, 해당 요소의 투명도를 지정하는 데 사용됩니다.
- opacity 속성은 0부터 1 사이의 값을 가지며, 값이 작을수록 요소가 불투명해지고, 값이 클수록 요소가 투명해집니다.
3. 박스 모델
CSS 박스 모델
-
CSS 박스 모델(Box Model)은 HTML 문서의 각 요소를 감싸는 박스로, 이를 이해하는 것은 웹 페이지 레이아웃을 제어하는 데 중요한 기초입니다.
-
박스 모델은 Content, Padding, Border, Margin으로 구성되어 있습니다.
- Content: 요소의 실제 내용이 위치하는 영역입니다. 내용의 너비와 높이는 width, height 속성으로 조절할 수 있습니다.
- Padding: Content 영역과 Border 영역 사이의 여백 영역입니다. 이 영역은 padding 속성으로 조절할 수 있습니다.
- Border: Padding과 Margin 사이의 영역으로, 요소의 테두리를 나타냅니다. border 속성을 사용하여 조절할 수 있습니다.
- Margin: Border와 다른 요소 사이의 공간으로, margin 속성을 사용하여 조절할 수 있습니다.
-
padding, margin 표기법
margin: [size]
상하좌우
margin: [size] [size]
상하/좌우
margin: [size] [size] [size]
상/좌우/하
margin: [size] [size] [size] [size]
상/우/하/좌
width: [size]; margin: [size] auto
자동으로 채우기
- 너비가 정해져 있어야 좌우 margin을 auto로 설정할 수 있습니다.
-
border와 border-radius 표기법
border: border-width border-style border-color;
border: none;
border-radius: 10px;
border-radius: 10px 20px;
border-radius: 10px 20px 30px 40px;
border-radius: 10px 20px 30px 40px / 50px 60px 70px 80px;
border-radius: 50%;
box-sizing
- CSS 속성 중 하나로, 요소의 크기를 계산하는 방법을 지정합니다.
box-sizing
속성은 다음과 같은 값들을 사용할 수 있습니다.
content-box
기본값으로, 요소의 크기는 콘텐츠 영역의 크기만을 포함합니다. 패딩과 테두리(border)는 요소의 크기에 포함되지 않습니다.
border-box
: 요소의 크기는 콘텐츠 영역, 패딩, 테두리의 크기를 모두 포함합니다. 이 때, 콘텐츠 영역의 크기가 여백과 테두리의 크기를 감소시키는 효과가 있습니다.
- 전체 요소에 대해
* {box-sizing: border-box;}
를 설정하는 것은 일반적으로 CSS 작성 시 유용하며, 웹 사이트 전체적인 디자인에 일관성을 부여할 수 있습니다.
overflow
- 요소의 내용이 지정된 크기를 초과할 때 처리 방법을 지정하는 속성입니다.
- 다음과 같은 값 중 하나를 가질 수 있습니다.
visible
기본값으로, 컨텐츠가 넘쳐도 그대로 보여집니다.
hidden
넘치는 컨텐츠를 잘라내어 보이지 않게 합니다.
scroll
항상 스크롤바를 표시합니다.
auto
필요한 경우에만 스크롤바를 표시합니다.
가로 스크롤
-
overflow-x
속성을 auto로 하여 가로 스크롤바를 표시합니다. 이때, overflow-y
속성은 hidden
값을 지정하여 세로 스크롤바를 표시하지 않도록 설정해야 합니다.
-
white-space
속성을 nowrap
값으로 설정하여 요소 내의 텍스트가 줄바꿈 없이 한 줄에 표시되도록 합니다. 이때, 요소의 너비를 초과하는 경우 자동으로 가로 스크롤이 생성됩니다.
-
예시
.container {
overflow-x: auto;
overflow-y: hidden;
white-space: nowrap;
}
마진 상쇄
- CSS 박스 모델에서 마진 상쇄(margin collapse)는 인접한 두 개의 수직 마진 중에서 큰 쪽 값으로 결정되는 현상을 말합니다.
- 이 현상은 다음과 같은 상황에서 발생합니다.
- 인접한 블록 요소의 상/하단 마진 값이 모두 존재할 경우
- 부모 요소와 첫 번째 자식 요소 또는 마지막 자식 요소 사이의 마진 값이 존재할 경우
- 마진 상쇄는 두 마진 중 큰 값으로 결정되며, 음수 마진도 계산에 포함됩니다. 음수 마진이 포함되는 경우 상쇄된 마진은 두 마진의 합으로 계산됩니다.
- 마진 병합은 다음과 같이 해결합니다.
- 인접한 블록 요소의 상/하단 마진 값을 각각 0으로 설정합니다.
- 부모 요소와 첫 번째 자식 요소, 마지막 자식 요소 사이에 빈 요소를 추가합니다.
4. Display
none
- 해당 요소는 HTML 문서의 구조에서는 존재하지만, 실제 화면에는 표시되지 않습니다.
- 요소가 차지하는 공간도 없어지므로, 주로 불필요한 요소를 감추거나, JavaScript를 사용하여 동적으로 요소를 추가/제거할 때 유용합니다.
block
- 해당 요소를 새로운 줄에서 표시하고, 요소의 너비를 부모 요소의 전체 너비로 설정하는 속성입니다.
- 위에서 아래로 배치됩니다.
- 너비와 높이를 지정할 수 있습니다.
- 예시
- 블록 레벨 컨테이너 요소:
<div>
- 문단 요소:
<p>
- 제목 요소:
<h1>
, <h2>
, <h3>
, <h4>
, <h5>
, <h6>
- 목록 요소:
<ul>
, <ol>
- 목록 항목 요소:
<li>
- 테이블 요소:
<table>
, <thead>
, <tbody>
, <tfoot>
, <tr>
, <th>
, <td>
,
- 폼 요소:
<form>
, <fieldset>
, <legend>
, <input>
, <select>
, <option>
, <textarea>
, <button>
, <optgroup>
, <datalist>
, <output>
, <header>
- HTML5에서 추가된 요소:
<footer>
, <nav>
, <aside>
, <article>
inline
- 해당 요소를 새로운 줄이 아닌, 텍스트 흐름 내에서 표시하는 속성입니다.
- 제약 사항
- 너비와 높이: 요소는 내용물에 맞게 자동으로 너비와 높이가 결정됩니다. 따라서, 너비와 높이를 직접 설정할 수 없습니다.
- 패딩과 마진: 요소는 수평 방향의 패딩과 마진은 설정할 수 있지만, 수직 방향의 패딩과 마진은 설정할 수 없습니다.
- 줄바꿈: 요소는 자동으로 줄바꿈이 되지 않습니다. 따라서, 요소가 너무 길어지면 부모 요소를 벗어나게 됩니다.
- 예시
span
인라인 레벨 컨테이너 태그
a
하이퍼링크를 생성하는 태그
b
굵은 글씨체로 표시하는 태그
img
이미지를 표시하는 태그(예외적으로 직접 너비와 높이를 설정할 수 있다.)
input
사용자 입력을 받는 폼 요소 태그 (type 속성에 따라 다양한 종류가 있음)
label
폼 요소의 설명을 제공하는 태그
select
드롭다운 형태의 선택 폼 요소 태그
textarea
여러 줄의 텍스트 입력 폼 요소 태그
em
, i
, strong
, cite
, q
, dfn
, code
, var
, samp
, kbd
, sub
, sup
, small
등
inline-block
- 요소를 문장 내에서 표시하고, 요소의 너비와 높이를 직접 설정 가능하게 해주는 속성입니다.
- 인라인처럼 줄바꿈이 일어나지 않습니다.
- 인라인처럼 컨텐츠의 너비만큼 너비를 차지합니다.
- 블록처럼 세로 여백을 쓸 수 있습니다.
- 블록처럼 너비나 높이를 지정할 수 있습니다.
table
- 테이블 요소를 표시하며, 요소의 너비를 테이블의 전체 너비에 맞게 설정되는 속성입니다.
table-row
- 테이블 행 요소를 표시하며, 요소의 너비를 테이블의 전체 너비에 맞게 설정
table-cell
- 테이블 셀 요소를 표시하며, 요소의 너비와 높이를 직접 설정 가능
flexbox
- Flexbox는 CSS3에서 새롭게 도입된 레이아웃 방식 중 하나로, 요소들을 유연하게 배치할 수 있는 기능을 제공합니다.
- Flexbox는 부모 요소(flex container)와 자식 요소(flex item)로 구성되며, display: flex 속성을 부모 요소에 적용하여 활성화합니다.
flex-direction
, justify-content
, align-items
, align-content
등의 속성을 사용하여 자식 요소들의 배치를 지정합니다.
flex-direction
요소의 배치 방향을 지정합니다.
justify-content
요소를 수평 방향으로 정렬합니다.
align-items
요소를 수직 방향으로 정렬합니다.
align-content
여러 줄로 된 요소들의 수직 정렬 방법을 지정합니다.
gap: {row-gap} {column-gap}
- gap 속성값은 flex-direction의 영향을 받지 않습니다.
grid
- 자식 요소를 행(row)과 열(column)로 구성된 그리드 안에 배치할 수 있습니다.
grid-template-columns
과 grid-template-rows
속성을 사용하여 행과 열의 크기를 정의하고, grid-template-areas
속성을 사용하여 각 영역을 이름으로 정의합니다.
inline-flex
- 요소를 inline 형식으로 배치하면서도 그 안에서 flexbox 레이아웃을 사용할 수 있게 합니다.
inline-grid
- 요소를 inline 형식으로 배치하면서도 그 안에서 grid 레이아웃을 사용할 수 있게 합니다.
5. 선택자
선택자 목록(Selector List)
- CSS에서 하나 이상의 선택자를 콤마로 구분하여 연결한 것
선택자 붙여 쓰기
- tag_name#id_name.class_name 처럼 모든 선택자를 가진 요소를 스타일링 할 때 사용
자식, 자손 선택하기
- 자식 요소:
parent-selector > child-selector
- 자손 요소:
parent-selector descendant-selector
가상 클래스(Pseudo Class)
- 예시
:link
링크에 연결된 페이지를 방문하지 않은 상태
:visited
링크에 연결된 페이지를 방문한 상태
:hover
마우스 커서가 링크 위에 올라가 있는 상태
:active
마우스로 링크를 클릭하고 있는 상태
:focus
input 요소에 초점이 맞춰진 상태
:checked
input 요소가 체크된 상태
:enabled
input 요소가 사용할 수 있는 상태
:disabled
input 요소가 사용할 수 없는 상태
:required
required 속성을 가진 상태
:optional
required 속성을 가지지 않는 상태
:first-child
자식 요소 중 첫 번째 요소
:last-child
자식 요소 중 마지막 요소
:nth-child(n)
자식 요소 중 앞에서부터 n번째에 위치하는 요소
:nth-last-child(n)
자식 요소 중 뒤에서부터 n번째에 위치하는 요소
:empty
아무런 자식 요소도 가지지 않는 상태
:root
문서의 root 요소
:not(선택자)
해당 선택자를 제외한 요소
:lang(언어)
유저의 언어 설정 상태
Feedback
- 정리를 더 꼼꼼히 해서 포스트를 작은 사전처럼 쓸 수 있게 글을 쓰면 더 좋겠다
- 내일은 'HTML 핵심 개념' 코드잇 콘텐츠를 수강할 예정이다
Reference