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 강좌 / 넘치는 콘텐츠와 긴 문자열 처리하기

같은 내용에 visible·hidden·auto·scroll을 적용해 넘침 처리를 비교합니다. 긴 URL 줄바꿈과 실제 말줄임표 예제를 실행하고, 원문 보존과 키보드 스크롤을 함께 확인합니다.

CSS / Tutorial / 마우스 호버 효과 /  이미지 확대하는 방법

CSS / Tutorial / 마우스 호버 효과 / 이미지 확대하는 방법

이미지에 마우스를 올렸을 때 이미지가 확대되는 효과를 만들어보겠습니다. 다음과 같이 이미지가 들어간 간단한 HTML 문서를 만듭니다.

CSS 강좌 / 변수 사용하는 방법: var()·상속·대체값

CSS 강좌 / 변수 사용하는 방법: var()·상속·대체값

CSS 변수의 범위와 상속, var()의 대체값과 잘못된 값 처리 방법을 예제로 설명합니다. calc()와 단위 조합, 미디어 쿼리 조건에 변수를 사용할 수 없는 적용 한계도 확인할 수 있습니다.

CSS 강좌 / 배경색과 배경 이미지 설정하기

CSS 강좌 / 배경색과 배경 이미지 설정하기

실습용 이미지를 내려받아 배경색과 배경 이미지 경로를 설정합니다. cover·contain의 잘림과 빈 공간, 반복과 위치를 비교하고 배경이 안 보일 때의 확인 순서를 설명합니다.

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

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

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

CSS 강좌 / Grid 반복 열·자동 배치·영역 이름 사용하기

CSS 강좌 / Grid 반복 열·자동 배치·영역 이름 사용하기

repeat·auto-fit·auto-fill의 차이와 자동 배치 순서를 실행 예제로 비교합니다. grid-template-areas로 페이지를 구성하고 모바일 전환, 영역 이름 오류와 읽기 순서도 확인합니다.

CSS 강좌 / 유튜브 동영상을 반응형으로 삽입하는 방법

CSS 강좌 / 유튜브 동영상을 반응형으로 삽입하는 방법

유튜브 영상을 블로그나 홈페이지에 넣을 때 보통 iframe을 사용합니다. 코드는 유튜브 영상 공유에서 를 클릭하여 구할 수 있습니다. 아래와 같은 코드인데, 고정폭입니다. 즉 웹브라우저의 가로폭이 커지든 작아지든 가로폭이 일정합니다. 이를 반응형으로 만들고 싶다면 아래처럼 합니다.

CSS 강좌 / 컨테이너 쿼리로 구성 요소 너비에 맞춰 꾸미기

CSS 강좌 / 컨테이너 쿼리로 구성 요소 너비에 맞춰 꾸미기

같은 카드가 본문과 사이드바의 폭에 맞춰 배치를 바꾸도록 컨테이너 쿼리를 적용합니다. 중첩 컨테이너와 이름 선택, 조건이 적용되지 않는 원인도 살펴봅니다.

CSS 강좌 / 테두리, 둥근 모서리, 그림자 만들기

CSS 강좌 / 테두리, 둥근 모서리, 그림자 만들기

테두리와 윤곽선의 차이, 둥근 모서리, 그림자의 이동·흐림·퍼짐을 설명합니다. 원·타원과 부모 영역에서 그림자가 잘리는 상황을 실제 예제로 비교합니다.

CSS 강좌 / 양쪽 배분(균등 분할) 정렬 방법

CSS 강좌 / 양쪽 배분(균등 분할) 정렬 방법

문단 정렬을 양끝으로 꽉차게 하는 경우가 있습니다. 한글에서는 배분 정렬, 워드에서는 균등 분할이라고 합니다. 일반적인 문단에서는 거의 사용하지 않고, 표에서 제목을 넣을 때 많이 사용합니다.