AD JB Toolbox 01

CSS 강좌 / 문법: 선택자·선언·주석과 오류 처리

CSS의 기본 규칙은 선택자 { 속성: 값; } 형태입니다. 선택자는 꾸밀 요소를 고르고, 중괄호 안의 선언은 그 요소에 적용할 모양을 정합니다. 콜론은 속성과 값을, 세미콜론은 선언과 선언을 구분하므로 줄바꿈만으로 두 선언을 나눌 수는 없습니다.

규칙 한 개를 구성하는 부분

.notice {
  color: #087f5b;
  padding: 16px;
}
부분 예시 뜻
선택자 .notice notice 클래스가 있는 요소를 고릅니다.
선언 블록 { ... } 이 선택자에 적용할 선언들을 묶습니다.
속성 color, padding 글자색, 안쪽 여백처럼 바꿀 특성입니다.
값 #087f5b, 16px 해당 특성에 지정할 내용입니다.
선언 padding: 16px; 속성 이름과 값을 콜론으로 연결한 한 항목입니다.

속성마다 허용하는 값이 다릅니다. color에는 색상값을, padding에는 길이값 등을 넣습니다. padding: blue;는 단어의 철자가 맞더라도 여백 값으로 사용할 수 없습니다. 16px는 숫자와 단위를 붙여 씁니다. 16 px처럼 띄어 쓰면 하나의 길이값으로 읽히지 않습니다.

중괄호·콜론·세미콜론과 줄바꿈

줄바꿈과 들여쓰기는 사람이 코드를 읽기 쉽게 만드는 역할을 합니다. 다음 두 규칙은 같은 선택자와 같은 선언을 갖고 있으므로 동일하게 적용됩니다. 처음 배울 때는 선언을 한 줄씩 나누면 빠진 기호를 찾기 쉽습니다. 꾸밀 대상에 따라 선택자를 고르는 방법은 요소·클래스·ID·속성 선택자에서 비교합니다.

.notice { color: #087f5b; padding: 16px; }

.notice {
  color: #087f5b;
  padding: 16px;
}

마지막 선언의 세미콜론은 문법상 생략할 수 있지만, 나중에 선언을 추가할 때 실수하기 쉬우므로 항상 적는 습관이 좋습니다. 선택자 안의 공백은 별도의 의미를 가질 수 있습니다. .notice.urgent는 두 클래스가 함께 있는 요소를, .notice .urgent는 notice 안의 urgent 요소를 고릅니다. 이 공백까지 제거해도 같은 코드라고 생각하면 안 됩니다. 기본 선언 구조는 MDN의 CSS 문법 설명에 정리되어 있습니다.

여러 선택자 묶기와 주석 쓰기

h1, h2 {
  color: #087f5b;
}

/* 안내문에만 배경과 테두리를 적용합니다. */
.notice {
  background-color: #e9f7ef;
  border: 1px solid #087f5b;
}

쉼표는 여러 선택자를 같은 선언 블록에 연결합니다. h1, h2는 h1과 h2를 각각 선택하며, h1 h2는 h1 안에 있는 h2를 찾는 다른 선택자입니다. 같은 색을 적용하려는 목적에는 쉼표가 맞습니다.

CSS 주석은 /*로 시작해 */로 끝납니다. 주석 안의 문장은 스타일로 실행되지 않습니다. 설명을 쓰거나 잠깐 규칙을 제외할 때 쓸 수 있지만, 닫는 기호를 빠뜨리면 뒤의 코드까지 주석으로 처리될 수 있습니다. 일반 CSS에서는 JavaScript의 //를 한 줄 주석 표기로 사용하지 않습니다.

잘못된 선언과 잘못된 선택자는 영향이 다릅니다

브라우저는 CSS의 오류를 만나면 유효하지 않은 부분을 무시하고 가능한 규칙을 계속 처리합니다. 그렇다고 항상 “틀린 한 줄만 무시한다”는 뜻은 아닙니다. 빠진 구분 기호나 선택자 오류가 있으면 영향 범위가 커질 수 있습니다.

.notice {
  color: blue;
  padding: blue;
  background-color: #e9f7ef;
}

여기서는 padding: blue만 유효하지 않습니다. 다른 규칙이 없다면 글자색과 배경색은 적용되고, 안쪽 여백은 이 선언으로 바뀌지 않습니다. 속성을 colro처럼 잘못 쓰는 경우에도 그 선언은 인식되지 않습니다.

.notice {
  color: blue
  background-color: #e9f7ef;
  padding: 16px;
}

반면 이 예제에서는 첫 선언 뒤의 세미콜론이 없습니다. 브라우저는 다음 세미콜론까지를 color의 값으로 읽으려 하므로 blue background-color: #e9f7ef가 유효하지 않은 색상값이 됩니다. 따라서 이 블록의 색과 배경 선언이 모두 적용되지 않고, 뒤의 padding: 16px는 적용됩니다. 해결 방법은 blue 뒤에 세미콜론을 넣는 것입니다.

h1, .notice:made-up-state {
  color: blue;
}

이처럼 일반적인 쉼표 선택자 목록에 알 수 없는 가상 클래스가 들어가면 목록 전체가 유효하지 않아 h1에도 해당 규칙이 적용되지 않습니다. 일부 특수 선택자 목록에는 다른 처리 규칙이 있으므로 이 예제를 모든 CSS 구문에 확대해서 적용하지는 마세요. 오류 처리 범위는 MDN의 CSS 오류 처리 설명을 참고할 수 있습니다.

전체 예제와 결과 확인

<!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>작은 정원</title>
  <style>
body { margin: 24px; font-family: sans-serif; line-height: 1.7; }
    h1, h2 { color: #087f5b; }
    .notice {
      color: #087f5b;
      background-color: #e9f7ef;
      padding: 16px;
      border: 1px solid #087f5b;
    }
    /* 운영 시간을 설명하는 문장 */
    .description { font-size: 18px; }
  </style>
</head>
<body>
<h1>작은 정원</h1>
  <p class="notice">매일 오전 9시에 문을 엽니다.</p>
  <h2>방문 안내</h2>
  <p class="description">물병과 편한 신발을 준비하세요.</p>
</body>
</html>

전체 코드를 index.html로 저장해 열면 h1과 h2가 같은 초록색이고, 안내문에는 연한 배경·16px 안쪽 여백·1px 테두리가 보입니다. 설명 문장은 18px로 표시됩니다. font-size는 글자 크기, line-height는 줄 높이, border는 테두리를 정하는 속성입니다. 여기서는 문법과 결과를 연결하기 위한 보조 속성으로 사용했습니다.

틀린 코드를 고치는 실습

전체 예제의 .notice 블록을 아래 코드로 바꾸어 보세요. 문법 오류 두 개를 고쳐서 “파란 글자, 연한 초록 배경, 16px 여백”이 되도록 만드는 것이 목표입니다. 바꾸기 전에는 원래 파일을 다른 이름으로 복사해 두면 쉽게 되돌릴 수 있습니다.

.notice {
  colro: blue;
  background-color #e9f7ef;
  padding: 16px;
}

수정 답안: colro를 color로 고치고, background-color 뒤에 콜론을 넣습니다. 저장 후 새로고침하면 안내문 글자와 배경이 목표대로 바뀝니다. 수정 전에도 padding 선언은 유효하므로 여백이 남아 있을 수 있습니다. 일부 모양이 보인다고 전체 코드가 올바른 것은 아닙니다.

.notice {
  color: blue;
  background-color: #e9f7ef;
  padding: 16px;
}

수정했는데도 바뀌지 않으면 열어 둔 파일이 맞는지 먼저 확인하고, 개발자 도구에서 선택된 요소의 Styles와 Computed 확인하기로 실제 적용값을 살펴보세요. 문법 오류, 대상 선택 오류, 다른 규칙과의 충돌을 구분하면 무작정 값을 바꾸는 일을 줄일 수 있습니다.

같은 카테고리의 다른 글
CSS 강좌 / 상속·우선순위·캐스케이드로 최종 스타일 결정하기

CSS 강좌 / 상속·우선순위·캐스케이드로 최종 스타일 결정하기

상속과 직접 지정의 차이부터 중요도·선택자 우선순위·작성 순서까지 단계별로 판단합니다. 같은 문단의 색상·여백·테두리를 예측하는 전체 예제와 !important·인라인 스타일의 비교 실습을 제공합니다.

CSS 강좌 / ::before와 ::after로 가상 요소 꾸미기

CSS 강좌 / ::before와 ::after로 가상 요소 꾸미기

::before와 ::after로 HTML을 늘리지 않고 장식용 점과 선을 추가합니다. content·display·currentColor의 역할, 실제 적용 전후 화면, 전체 코드와 가상 요소가 안 보일 때의 점검 방법을 설명합니다.

CSS 강좌 / 박스 모델과 margin, padding, border 이해하기

CSS 강좌 / 박스 모델과 margin, padding, border 이해하기

콘텐츠·padding·border·margin의 위치와 너비 계산을 도해와 실행 예제로 설명합니다. 여백 축약 규칙과 세로 margin 합치기를 비교하고 개발자 도구에서 실제 크기를 확인합니다.

CSS 강좌 / 관계 선택자와 가상 클래스로 요소 고르기

CSS 강좌 / 관계 선택자와 가상 클래스로 요소 고르기

자손·자식·인접 형제·일반 형제 선택자를 같은 문서 구조에서 비교합니다. hover·focus-visible·first-child·nth-child를 포함한 전체 예제와 구조를 바꿔 선택 결과를 확인하는 실습을 제공합니다.

CSS 강좌 / 큰 스타일시트 정리하기: 파일 구성·중첩·레이어

CSS 강좌 / 큰 스타일시트 정리하기: 파일 구성·중첩·레이어

역할별 CSS 파일 연결과 네이티브 중첩, 캐스케이드 레이어를 실행 가능한 작은 프로젝트로 익힙니다. 선택자 충돌을 비교하고 원래 설정으로 복원하는 실습을 제공합니다.

CSS 강좌 / 표 꾸미기 / 테두리

CSS 강좌 / 표 꾸미기 / 테두리

테두리는 border 속성으로 만듭니다. table, th, td 요소에 적용할 수 있습니다. tr 요소에는 적용되지 않습니다.

CSS 강좌 / 모바일·큰 화면·확대 보기에서 레이아웃 점검하기

CSS 강좌 / 모바일·큰 화면·확대 보기에서 레이아웃 점검하기

점검용 페이지에서 화면 폭, 확대, 긴 문자열과 키보드 조작을 확인합니다. 가로 넘침과 글자 잘림을 재현하고 원인 확인부터 수정·재점검까지 실습합니다.

CSS 강좌 / width, height, min, max, box-sizing으로 크기 조절하기

CSS 강좌 / width, height, min, max, box-sizing으로 크기 조절하기

content-box와 border-box의 너비 계산, 최소·최대 크기, 고정 높이와 내용에 맞는 높이를 비교합니다. 화면과 글자 크기를 바꾸며 넘침을 진단하고 백분율 높이의 조건을 확인합니다.

CSS / Tutorial / 구분선 만드는 방법

CSS / Tutorial / 구분선 만드는 방법

글의 완급 조절, 내용 전환 등을 위해 구분선을 사용하는 경우가 많습니다. 선은 여러 가지 방식으로 만들 수 있는데, 보기 좋게 꾸미는 것은 CSS로 합니다. 아래는 div 태그에 모양을 입혀서 구분선을 만드는 몇 가지 예제입니다.

CSS 강좌 / !important

CSS 강좌 / !important

CSS에서 !important는 특정 스타일 규칙이 다른 모든 스타일 규칙보다 우선 적용되도록 강제하는 데 사용됩니다. 이 키워드는 일반적인 스타일 우선 순위를 무시하고, 해당 스타일이 다른 어떤 스타일보다도 높은 우선순위를 가지도록 합니다.