AD JB Toolbox 01

CSS 강좌 / CSS를 HTML에 적용시키는 방법

CSS를 HTML에 적용하는 방법은 요소의 style 속성에 쓰는 인라인 스타일, style 요소에 쓰는 내부 스타일시트, 별도 CSS 파일을 link로 연결하는 외부 스타일시트로 나눌 수 있습니다. 한 문서의 짧은 실습에는 내부 스타일시트가 편하고, 여러 페이지가 같은 디자인을 쓴다면 외부 스타일시트로 관리하는 편이 좋습니다.

세 가지 방법의 작성 위치와 용도

방법 작성 위치 적합한 상황 관리할 때 주의할 점
인라인 HTML 요소의 style 속성 한 요소의 간단한 표현을 확인할 때 같은 디자인을 여러 요소에 반복하면 수정이 번거롭습니다.
내부 HTML head 안의 style 요소 한 페이지짜리 예제나 특정 페이지의 스타일 여러 HTML에 복사하면 파일마다 수정해야 합니다.
외부 별도 .css 파일과 HTML의 link 요소 여러 페이지의 공통 디자인 파일 경로와 연결 상태를 확인해야 합니다.

세 방법 모두 CSS를 적용하지만 “외부 파일이므로 가장 약하다”처럼 작성 위치만으로 모든 우선순위를 정하지는 않습니다. 내부와 외부의 일반 규칙은 선택자와 연결 순서 등의 영향을 받습니다. 인라인 스타일은 같은 작성자 출처의 일반 규칙보다 보통 우선하지만 !important 등 다른 조건을 포함하면 비교가 달라집니다. 충돌의 자세한 판단은 상속·우선순위·캐스케이드에서 다룹니다.

인라인 스타일과 내부 스타일시트

인라인 스타일에서는 꾸밀 요소의 style 속성 안에 선언을 적습니다. 선택자나 바깥 중괄호를 넣지 않습니다. 다음 코드에서는 안내 문장 한 개에만 색과 배경을 지정합니다.

<p style="color: #087f5b; background-color: #e9f7ef;">
  매일 오전 9시에 문을 엽니다.
</p>

내부 스타일시트에서는 head 안의 style 요소에 선택자와 중괄호를 포함한 규칙을 적습니다. 같은 클래스가 붙은 여러 문장을 한 규칙으로 꾸밀 수 있습니다. 아래 예제에서 HTML의 class 값은 notice, CSS 선택자는 .notice입니다.

<head>
  <style>
    .notice {
      color: #087f5b;
      background-color: #e9f7ef;
    }
  </style>
</head>
<body>
  <p class="notice">매일 오전 9시에 문을 엽니다.</p>
</body>

두 예제는 작성 위치를 비교하기 위한 HTML 조각입니다. 이 실습에서 방법을 바꿀 때는 이전 방법으로 넣은 같은 속성의 선언을 제거하세요. 여러 방식을 동시에 남겨 두면 연결 실패와 규칙 충돌을 구별하기 어려워집니다.

외부 CSS 파일 연결하기

빈 garden 폴더를 만들고 다음 세 파일을 저장합니다. CSS 파일에는 CSS만 적으며 <style> 태그를 넣지 않습니다. HTML 파일 두 개는 모두 같은 폴더의 style.css를 연결합니다.

garden/
├─ index.html
├─ visit.html
└─ style.css

index.html

<!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>작은 정원</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <h1>작은 정원</h1>
  <p class="notice">매일 오전 9시에 문을 엽니다.</p>
  <a href="visit.html">방문 안내 보기</a>
</body>
</html>

visit.html

<!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>방문 안내</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <h1>방문 안내</h1>
  <p class="notice">물병과 편한 신발을 준비하세요.</p>
  <a href="index.html">정원 소개로 돌아가기</a>
</body>
</html>

style.css

body {
  margin: 24px;
  font-family: sans-serif;
  line-height: 1.7;
}
h1 { color: #087f5b; }
.notice {
  padding: 16px;
  border: 1px solid #087f5b;
  background-color: #e9f7ef;
}

rel="stylesheet"는 연결한 파일이 스타일시트라는 뜻이고, href="style.css"는 읽어 올 파일의 위치입니다. HTML5 문서에서는 일반적인 CSS 연결에 type="text/css"를 따로 적을 필요가 없습니다. 로컬 파일을 직접 여는 이 실습에는 서버나 추가 라이브러리가 필요하지 않습니다.

index.html을 브라우저에서 열면 초록색 제목과 연한 안내 상자가 보입니다. “방문 안내 보기”를 누르면 visit.html로 이동하고, 내용은 달라도 제목 색과 안내 상자의 모양은 같습니다. style.css의 제목 색을 #1d4ed8로 바꾼 뒤 두 페이지를 각각 새로고침하면 두 제목이 모두 파란색으로 바뀝니다. 이것이 공통 파일을 사용하는 이점입니다.

폴더 위치에 맞게 href 작성하기

아래 경로는 HTML 문서의 위치를 기준으로 읽습니다. 예제처럼 base 요소로 기준 URL을 바꾸지 않은 일반 문서가 전제입니다. CSS 파일을 옮기면 파일 이름뿐 아니라 href도 함께 바꾸어야 합니다.

파일 배치 index.html의 연결 코드 읽어 오는 위치
index.html과 style.css가 같은 폴더 href="style.css" HTML 파일이 있는 폴더의 style.css
garden/index.html, garden/css/style.css href="css/style.css" HTML 폴더 아래 css 폴더
garden/pages/index.html, garden/css/style.css href="../css/style.css" 상위 garden 폴더로 한 단계 이동한 뒤 css 폴더
garden/
├─ pages/
│  └─ index.html
└─ css/
   └─ style.css

마지막 배치에서는 pages/index.html에 <link rel="stylesheet" href="../css/style.css">를 적습니다. ../는 상위 폴더로 한 단계 이동한다는 뜻입니다. 웹 경로에는 역슬래시 대신 슬래시를 사용하세요. /css/style.css처럼 앞에 슬래시를 붙이면 사이트 루트 기준 경로가 되어 이 로컬 폴더 실습의 상대 경로와 의미가 다릅니다. 상대 경로 예시는 MDN의 외부 CSS 연결 설명에서도 확인할 수 있습니다.

적용되지 않을 때는 연결·선택·충돌을 구분하기

  1. 파일 연결부터 확인합니다. 확장자가 .css.txt로 저장되지 않았는지, href와 실제 폴더 배치가 일치하는지 봅니다. 배포 서버에서는 파일 이름의 대소문자도 맞춥니다. 웹 서버에서 연 페이지라면 개발자 도구의 Network에서 CSS 요청과 응답을 확인할 수 있습니다. 로컬 파일은 같은 HTTP 상태 코드가 표시되지 않을 수 있습니다.
  2. 대상 요소가 맞는지 확인합니다. HTML에는 class="notice"인데 CSS에 .notcie를 썼다면 파일이 정상적으로 읽혀도 안내문이 바뀌지 않습니다. 개발자 도구의 Elements에서 실제 클래스 이름을 보고 Styles에서 규칙을 찾습니다.
  3. 규칙이 덮어써졌는지 확인합니다. 다른 색 선언이 나중에 이긴 경우 Styles에 원래 선언이 취소선으로 나타날 수 있습니다. CSS 파일이 없는 문제와 구분해서 최종 적용 규칙을 확인하세요.

마지막으로 CSS 파일의 맨 아래에 body { background-color: #fff4cc; }를 임시로 넣어 보세요. 새로고침 후 페이지 배경이 노란빛으로 바뀌면 파일 연결은 된 것입니다. 그 다음 안내문 선택자와 충돌을 살펴봅니다. 진단이 끝나면 임시 배경 규칙을 지우고 저장하세요. 연결을 고치기 위해 !important를 추가해도 존재하지 않는 CSS 파일이나 틀린 선택자는 해결되지 않습니다.

같은 카테고리의 다른 글
CSS 강좌 / CSS를 HTML에 적용시키는 방법

CSS 강좌 / CSS를 HTML에 적용시키는 방법

인라인·내부·외부 CSS의 작성 위치를 비교하고, 두 HTML 페이지가 하나의 스타일시트를 공유하도록 구성합니다. 폴더 위치에 따른 경로와 CSS가 적용되지 않을 때의 확인 순서도 설명합니다.

CSS / Tutorial / 상속(inheritance)

CSS / Tutorial / 상속(inheritance)

CSS 속성은 상속하는 속성과 상속하지 않는 속성이 있습니다. 상속하는 속성은 자식 요소에 영향을 미칩니다. 상속하지 않는 속성은 자식 요소에 영향을 미치지 않습니다.

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

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

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

CSS / Tutorial / 표 꾸미기 / 배경색

CSS / Tutorial / 표 꾸미기 / 배경색

배경색은 background-color 속성으로 만듭니다. table, tr, th, td, thead, tbody, tfoot에 적용할 수 있습니다. 다음 표를 기본으로 하고, 배경색을 여러 곳에 추가해보겠습니다.

CSS / Tutorial / 표 꾸미기 / 크기

CSS / Tutorial / 표 꾸미기 / 크기

CSS에서 표 전체 너비와 열 너비, 셀의 안쪽 여백을 조절하는 방법을 설명합니다. 내용이 길거나 화면이 좁을 때 표가 넘치는 이유와 가로 스크롤 처리 방법도 보여줍니다.

CSS / Tutorial / 마우스 호버 효과 / 텍스트 나오게 하는 방법

CSS / Tutorial / 마우스 호버 효과 / 텍스트 나오게 하는 방법

CSS로 특정 요소에 마우스를 올렸을 때 보이지 않던 특정 요소가 보이게 할 수 있습니다. 아래는 문단에 마우스를 올렸을 때 div 요소가 나오게 하는 예제입니다. div 요소 안에 텍스트가 있지만, 텍스트가 아닌 이미지 등 다른 것도 가능합니다.

CSS / Tutorial / 마우스 호버 효과 / 다른 이미지 보여주는 방법

CSS / Tutorial / 마우스 호버 효과 / 다른 이미지 보여주는 방법

이미지에 마우스를 올렸을 때 다른 이미지가 나타나는 효과를 CSS로 만들어보겠습니다. 다음과 같이 이미지 두 개를 넣고 div로 감쌉니다.

CSS / Tutorial / placeholder의 색, 글자 모양 등 꾸미는 방법

CSS / Tutorial / placeholder의 색, 글자 모양 등 꾸미는 방법

placeholder는 HTML5에서 새로 나온 속성으로 input 요소나 textarea 요소에 안내문을 넣을 수 있습니다. 기본 모양은 회색의 글자로, 배경색이 하얀색 또는 밝은 색이면 보기에 괜찮습니다. 하지만 배경색이 어두운 색이거나 화려한 색이면 회색 글자가 어울리지 않을 수 있습니다. placeholder는 ::placeholder 선택자로 선택하여 꾸밀 수 있습니다.

CSS / Tutorial / 원 또는 타원 만드는 방법

CSS / Tutorial / 원 또는 타원 만드는 방법

CSS의 border-radius 속성으로 원 또는 타원을 만들 수 있습니다. HTML 문서에 다음과 같이 내용이 없는 요소를 하나 만듭니다. 적절히 크기를 정하여 정사각형을 만들고, 배경색을 넣습니다. border-radius 속성을 추가하고, 값에 50%를 넣으면 원이 만들어집니다.

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

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

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