맨위로가기

CSS

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

CSS는 웹 페이지의 스타일을 정의하는 데 사용되는 언어이다. 1994년 하콘 비움 리에 의해 처음 제안되었으며, HTML의 스타일 기능을 보완하기 위해 개발되었다. CSS는 웹 페이지의 레이아웃, 글꼴, 색상 등을 제어하며, HTML과 분리되어 관리된다. CSS1, CSS2, CSS3, CSS4와 같은 여러 버전이 있으며, 각 버전은 새로운 기능과 개선 사항을 제공한다. CSS는 문법이 단순하며, 선택자, 선언 블록, 속성, 값으로 구성된다. CSS는 상속, 우선순위, 위치 지정, 그리고 다양한 스타일 시트 기술을 활용하여 웹 페이지의 시각적 표현을 풍부하게 만들고, 사이트 전체의 일관성을 유지하며, 대역폭을 절약하고, 접근성을 향상시킨다. CSS 프레임워크와 디자인 방법론을 통해 효율적인 웹 개발을 지원한다.

2. 역사

1994년 10월 10일 하콤 비움 리(Håkon Wium Lie)가 CSS를 처음 제안했다.[81] 당시 하콤 비움 리(Håkon Wium Lie)는 팀 버너스리(Tim Berners-Lee)와 함께 CERN에서 일하고 있었다.[25]

하콤 비움 리(Håkon Wium Lie)


비슷한 시기에 웹을 위한 여러 다른 스타일 시트 언어가 제안되었으며, 공개 메일링 리스트 및 월드 와이드 웹 컨소시엄 내부에서의 논의를 거쳐 1996년에 최초의 W3C CSS 권고안(CSS1)이 발표되었다.[26] 베르트 보스(Bert Bos)의 제안은 CSS1 개발에 큰 영향을 미쳤으며, 그는 CSS1의 공동 저자이자 CSS의 공동 제작자로 여겨진다.[27]

1980년대 SGML의 시작부터 다양한 형태로 존재해 온 스타일 시트는 CSS를 통해 웹을 위한 스타일 시트를 제공하도록 개발되었다.[28] 웹 스타일 시트 언어의 주요 요구 사항은 스타일 시트가 웹의 다양한 소스에서 제공되어야 한다는 점이었다. 문서 스타일 시맨틱스 및 명세 언어(DSSSL) 및 서식 출력 명세 인스턴스(FOSI)와 같은 기존 스타일 시트 언어는 이러한 요구사항에 적합하지 않았다. 반면 CSS는 "캐스케이딩" 스타일을 통해 문서의 스타일에 여러 스타일 시트가 영향을 줄 수 있도록 하였다.[28]

HTML이 발전하면서 웹 개발자들의 요구를 충족시키기 위해 더 다양한 스타일 기능이 포함되었다. 이러한 발전은 디자이너에게 사이트의 모양을 더 많이 제어할 수 있게 했지만, 더 복잡한 HTML을 필요로 했다. ViolaWWW나 WorldWideWeb과 같은 웹 브라우저 구현의 차이[29]는 사이트 모양의 일관성을 유지하기 어렵게 만들었고, 사용자가 웹 콘텐츠 표시 방식을 제어하는 데 어려움을 겪게 했다. 팀 버너스리가 개발한 브라우저/편집기에는 프로그램에 하드 코딩된 스타일 시트가 있었기 때문에 스타일 시트를 웹 문서에 연결할 수 없었다.[25] CERN의 로버트 카일리아우(Robert Cailliau)]는 구조와 표현을 분리하여 인쇄, 화면 기반 표현 및 편집을 위한 다양한 스타일 시트를 원했다.[29]

웹 표현 기능을 개선하는 것은 웹 커뮤니티의 많은 사람들에게 중요한 관심사였으며, www-style 메일링 리스트에는 9개의 서로 다른 스타일 시트 언어가 제안되었다.[28] 이 중 Cascading HTML Style Sheets[24]와 Stream-based Style Sheet Proposal (SSP)[27][30] 두 가지가 CSS에 특히 큰 영향을 미쳤다. 하콤 비움 리(Håkon Wium Lie)는 이브 라퐁(Yves Lafon)과 함께 데이브 라게트(Dave Raggett)의 아레나(Arena) 브라우저에 CSS를 구현했고,[31][32][33] 베르트 보스는 자신의 SSP 제안을 아르고(Argo) 브라우저에 구현했다.[27] 이후 하콤 비움 리(Håkon Wium Lie)와 베르트 보스는 CSS 표준 개발을 위해 함께 작업했다. (스타일 시트는 HTML 외 다른 마크업 언어에도 적용될 수 있도록 이름에서 'H'가 제거되었다.)[25]

하콤 비움 리(Håkon Wium Lie)는 1994년 일리노이주 시카고에서 열린 "모자이크와 웹" 컨퍼런스(후에 WWW2로 불림)에서 자신의 제안을 발표했으며, 1995년에는 베르트 보스와 함께 다시 발표했다.[25] 이 무렵 월드 와이드 웹 컨소시엄(W3C)이 이미 설립되어 CSS 개발에 관심을 갖게 되었고, W3C는 스티븐 펨버튼(Steven Pemberton)]이 의장을 맡은 워크숍을 조직했다. 그 결과 W3C는 HTML 편집 검토 위원회(ERB)의 결과물에 CSS 작업을 추가했다. 하콤 비움 리(Håkon Wium Lie)와 베르트 보스는 이 프로젝트의 주요 기술 인력이었으며, 마이크로소프트의 토마스 리어든(Thomas Reardon)을 포함한 추가 위원들도 참여했다. 1996년 8월, 넷스케이프는 자바스크립트 스타일 시트(JSSS)라는 대체 스타일 시트 언어를 발표했지만,[25] 이 규격은 완성되지 않았고 더 이상 사용되지 않는다.[34] 1996년 말, CSS는 공식화될 준비가 되었고, CSS 레벨 1 권고안이 12월에 발표되었다.

HTML, CSS, 문서 객체 모델(DOM) 개발은 모두 HTML 편집 검토 위원회(ERB)라는 하나의 그룹에서 이루어졌다. 1997년 초, ERB는 세 개의 작업 그룹으로 분리되었다. W3C의 댄 코놀리(Dan Connolly)가 의장을 맡은 HTML 작업 그룹, 소프트쿼드의 로렌 우드가 의장을 맡은 DOM 작업 그룹, W3C의 크리스 릴리(Chris Lilley)가 의장을 맡은 CSS 작업 그룹이었다.

CSS 작업 그룹은 CSS 레벨 1에서 해결되지 않은 문제들을 해결하기 시작하여 1997년 11월 4일 CSS 레벨 2를 만들었고, 1998년 5월 12일 W3C 권고안으로 발표되었다. 1998년에 시작된 CSS 레벨 3은 현재도 개발 중이다.

2005년, CSS 작업 그룹은 표준에 대한 요구 사항을 더욱 엄격하게 시행하기로 결정했다. 이에 따라 이미 발표된 CSS 2.1, CSS 3 선택자, CSS 3 텍스트와 같은 표준들이 후보 권고안에서 작업 초안 수준으로 되돌려졌다.

1996년 CSS 1 규격이 완성되었다. 마이크로소프트인터넷 익스플로러 3[25]이 그 해에 출시되어 CSS에 대한 제한적인 지원을 제공했다. IE 4넷스케이프 4.x는 더 많은 지원을 추가했지만, 일반적으로 불완전했고 CSS를 유용하게 사용할 수 없게 만드는 많은 소프트웨어 버그가 있었다. 2000년 3월에 출시된 애플 매킨토시용 인터넷 익스플로러 5.0은 CSS 1을 99% 이상 지원하는 최초의 브라우저였으며,[35] 15개월 전에 CSS 지원을 시작한 오페라를 능가했다.

"버전 5" 웹 브라우저들이 CSS를 상당히 완벽하게 구현하기 시작했을 때에도 특정 영역에서는 여전히 오류가 있었다. Microsoft 인터넷 익스플로러 5. x for Windows는 CSS 표준과 비교했을 때 CSS 박스 모델을 제대로 구현하지 못했다. 이러한 불일치와 기능 지원의 차이로 인해 디자이너들은 CSS 해킹 및 필터라고 불리는 우회 방법을 사용해야 했다. 인터넷 익스플로러 6가 출시되었을 때 마이크로소프트는 CSS 해석의 하위 호환 모드("quirks mode")를 수정된 "표준 모드"와 함께 도입했다. 다른 비 마이크로소프트 브라우저들도 모드 전환 기능을 제공했다. HTML 파일 작성자는 작성자가 CSS가 표준에 따라 올바르게 해석되도록 의도했음을 나타내기 위해 특별한 "표준 준수 CSS 의도" 마커를 포함해야 했다. 이 마커가 없으면 "quirks mode" 전환 기능을 가진 웹 브라우저는 CSS 표준을 따르기보다는 윈도우에서 IE 5와 같이 웹 페이지의 객체 크기를 조정한다.

CSS의 불완전한 채택과 원래 규격의 오류로 인해 W3C는 CSS 2 표준을 CSS 2.1로 수정하여 HTML 브라우저에서 현재 CSS 지원의 작동 스냅샷에 더 가깝게 만들었다. 어떤 브라우저도 성공적으로 구현하지 못한 CSS 2 속성은 삭제되었으며, 몇몇 경우에는 표준을 기존의 지배적인 구현과 일치시키기 위해 정의된 동작이 변경되었다. CSS 2.1은 2004년 2월 25일에 후보 권고안이 되었지만, 2005년 6월 13일에 작업 초안 상태로 다시 되돌아갔고,[36] 2007년 7월 19일에야 후보 권고안 상태로 돌아갔다.[37]

이러한 문제 외에도, .css 확장자는 파워포인트 파일을 컴팩트 슬라이드 쇼 파일로 변환하는 데 사용되는 소프트웨어 제품에서 사용되었으므로,[38] 일부 웹 서버는 모든 .css[39]text/css가 아닌 인터넷 미디어 유형 application/x-pointplus[40]로 제공했다.

CSS 레벨 2 명세는 W3C에 의해 개발되었으며 1998년 5월에 권고안으로 발표되었다. CSS 1의 상위 집합인 CSS 2는 요소의 절대, 상대, 고정 위치 지정 및 z-index, 미디어 유형의 개념, 음성 스타일 시트 지원 (나중에 CSS 3 음성 모듈로 대체됨)[47] 및 양방향 텍스트, 그림자와 같은 새로운 글꼴 속성과 같은 여러 가지 새로운 기능을 포함한다. W3C는 더 이상 CSS 2 권고안을 유지 관리하지 않는다.[48]

CSS 레벨 2 개정 1판은 "CSS 2.1"이라고도 불리며, CSS 2의 오류를 수정하고, 제대로 지원되지 않거나 상호 운용성이 떨어지는 기능을 제거하며, 이미 구현된 브라우저 확장을 명세에 추가한다. CSS 2.1은 2004년 2월 25일에 처음 https://www.w3.org/TR/2004/CR-CSS21-20040225/ 후보 권고안이 되었지만, 추가 검토를 위해 2005년 6월 13일에 작업 초안으로 되돌아갔다. 2007년 7월 19일에 다시 후보 권고안이 되었고, 2009년에 두 번 업데이트되었다. 그러나 변경 사항과 설명이 추가되어 2010년 12월 7일에 다시 최종 검토 작업 초안이 되었다. CSS 2.1은 2011년 4월 12일에 제안된 권고안이 되었다.[49] W3C 자문 위원회의 검토를 거쳐, 2011년 6월 7일에 최종적으로 W3C 권고안으로 발행되었다.[50] CSS 2.1은 레벨 2의 첫 번째이자 최종 개정판으로 계획되었지만, CSS 2.2에 대한 우선 순위가 낮은 작업이 2015년에 시작되었다.

2. 1. 초기 제안

1994년 10월 10일, 하콤 비움 리(Håkon Wium Lie)가 CSS를 처음 제안하였다.[81]

하콤 비움 리(Håkon Wium Lie)는 1994년 10월 10일 CSS를 처음 제안했다.[24] 당시 리는 팀 버너스리(Tim Berners-Lee)와 함께 CERN에서 일하고 있었다.[25] 비슷한 시기에 웹을 위한 여러 다른 스타일 시트 언어가 제안되었으며, 공개 메일링 리스트 및 월드 와이드 웹 컨소시엄 내부에서의 논의 결과 1996년 첫 번째 W3C CSS 권고안(CSS1)이 발표되었다.[26] 베르트 보스(Bert Bos)의 제안이 큰 영향을 미쳤으며, 그는 CSS1의 공동 저자가 되었고 CSS의 공동 제작자로 여겨진다.[27]

스타일 시트는 1980년대 SGML(표준 일반화 마크업 언어)의 시작부터 다양한 형태로 존재해 왔으며, CSS는 웹을 위한 스타일 시트를 제공하기 위해 개발되었다.[28] 웹 스타일 시트 언어의 한 가지 요구 사항은 스타일 시트가 웹의 다양한 소스에서 제공되어야 한다는 것이었다. 따라서 문서 스타일 시맨틱스 및 명세 언어(DSSSL) 및 서식 출력 명세 인스턴스(FOSI)와 같은 기존 스타일 시트 언어는 적합하지 않았다. 반면에 CSS는 "캐스케이딩" 스타일을 통해 문서의 스타일에 여러 스타일 시트의 영향을 받도록 했다.[28]

HTML이 발전하면서 웹 개발자의 요구를 충족하기 위해 더 광범위한 스타일 기능을 포함하게 되었다. 이러한 진화는 디자이너에게 사이트 모양을 더 많이 제어할 수 있도록 했지만, 더 복잡한 HTML이 필요하게 되었다. ViolaWWW 및 WorldWideWeb과 같은 웹 브라우저 구현의 차이[29]로 인해 일관된 사이트 모양을 유지하기 어려웠고, 사용자는 웹 콘텐츠가 표시되는 방식을 제어하는 데 어려움을 겪었다. 팀 버너스리가 개발한 브라우저/편집기에는 프로그램에 하드 코딩된 스타일 시트가 있었다. 따라서 스타일 시트를 웹의 문서에 연결할 수 없었다.[25] 또한 CERN의 로버트 카일리아우(Robert Cailliau)]는 구조와 프레젠테이션을 분리하여 인쇄, 화면 기반 프레젠테이션 및 편집기를 위한 다른 프레젠테이션을 설명하는 다양한 스타일 시트를 원했다.[29]

웹 프레젠테이션 기능을 개선하는 것은 웹 커뮤니티의 많은 사람들에게 관심사였으며, www-style 메일링 리스트에는 9개의 서로 다른 스타일 시트 언어가 제안되었다.[28] 이 9개의 제안 중 CSS가 되는데 특히 영향을 미친 것은 Cascading HTML Style Sheets[24]와 Stream-based Style Sheet Proposal (SSP)의 두 가지였다.[27][30] 리는 이브 라퐁(Yves Lafon)]과 함께 데이브 라게트(Dave Raggett)의 아레나(Arena) 브라우저에 CSS를 구현했고,[31][32][33] 베르트 보스는 자신의 SSP 제안을 아르고(Argo) 브라우저에 구현했다.[27] 그 후 리와 보스는 CSS 표준을 개발하기 위해 함께 작업했다(이 스타일 시트는 HTML 외에도 다른 마크업 언어에도 적용될 수 있으므로 이름에서 'H'가 제거되었다).[25]

리는 1994년 일리노이주 시카고에서 열린 "모자이크와 웹" 컨퍼런스(후에 WWW2로 불림)에서 제안을 발표했으며, 1995년에는 베르트 보스와 함께 다시 발표했다.[25] 이 즈음 W3C가 이미 설립되었고 CSS 개발에 관심을 갖게 되었다. W3C는 이를 위해 스티븐 펨버튼(Steven Pemberton)]이 의장을 맡은 워크숍을 조직했다.

2. 2. 표준화 과정

1994년 10월 10일, 하콤 비움 리](Håkon Wium Lie)가 CSS를 처음 제안했다.[81] 당시 리는

2. 3. CSS1 발표

하콘 비움 리](Håkon Wium Lie)]가 1994년에 처음 제안한 CSS는, 1996년 12월

3. CSS 버전별 변화

CSS는 지속적으로 새로운 버전이 나오고 있다. 1996년에 도입된 CSS1은 CSS의 바탕이 되었다. CSS 표준으로는 CSS 2.1이 있으며 이전 버전에 비하여 새로운 기능과 도구가 추가되었다. 대다수의 웹 브라우저는 CSS3를 잘 지원하며, 현재 W3C에서는 CSS3를 표준으로 만들고 있다.

CSS는 여러 수준과 프로파일을 가지고 있다. 각 수준의 CSS는 일반적으로 새로운 기능을 담고 있으며, CSS1, CSS2, CSS3, CSS4로 나뉜다. 프로파일은 특정한 장치나 사용자 인터페이스를 위해 만들어진 하나 이상 수준의 CSS 하부 집합이다. 현재 휴대용 장치, 프린터, 텔레비전 수상기를 위한 프로파일들이 있다.

3. 1. CSS1

1996년 12월에 발표된 CSS1은 CSS의 바탕이 되었다.[44][45] CSS 레벨 1은 최초의 공식 W3C 권고안으로, 하콘 비움 리와 베르트 보스가 개발했다. CSS1의 주요 기능은 다음과 같다.

  • 글꼴 속성 (글꼴 및 강조 등) 지원
  • 텍스트, 배경 및 기타 요소의 색상 지정
  • 단어, 문자 및 텍스트 줄 사이의 간격과 같은 텍스트 속성
  • 텍스트, 이미지, 표 및 기타 요소의 정렬
  • 대부분의 요소에 대한 여백, 테두리, 안쪽 여백 및 위치 지정
  • 속성 그룹의 고유 식별 및 일반 분류


W3C는 더 이상 CSS 1 권고안을 유지 관리하지 않는다.[46]

CSS1은 다음과 같은 주요 속성을 지원한다.

CSS1에서 `width` 속성은 내용의 가로 폭으로 해석되며, 안쪽 여백과 테두리 폭은 요소의 가로 폭에 추가된다. 반면 마이크로소프트의 박스 모델에서는 `width` 속성이 내용, 안쪽 여백, 테두리를 모두 합한 요소 전체의 가로 폭으로 해석되었다.[75]

3. 2. CSS2

CSS 레벨 2는 W3C가 개발하였으며 1998년 5월에 권고안으로 발표되었다. CSS 레벨 1에서 확장된 기능들을 제공하며, 주요 특징은 다음과 같다.

  • 미디어 타입 지원: 화면(screen), 인쇄(print), 음성(speech) 등 다양한 미디어 타입에 따라 다른 스타일을 적용할 수 있다.
  • 음성 스타일 시트: 음성 합성기(speech synthesizer)를 통해 웹 페이지를 읽을 때 사용되는 스타일을 정의할 수 있다.
  • 새로운 글꼴 속성: 글꼴속성의 굵기, 기울임, 크기 등을 더 세밀하게 조절할 수 있는 속성들이 추가되었다.
  • 색상배경 속성: 색상배경 속성들을 이용하여 다양한 스타일을 적용할 수 있다.
  • 텍스트 속성: 단어 간 간격 및 줄 맞춤등을 조정할 수 있다.
  • 박스 속성: 여백, 테두리, 안쪽 여백등을 설정할 수 있다.
  • 분류 속성: 표시, 목록등을 설정할 수 있다.


CSS의 문법은 서로 다른 레벨 간에도 하위 호환성을 갖도록 설계되어, CSS 레벨 1으로 작성된 스타일 시트를 CSS 레벨 2로 취급하는 것도 가능하다(단, 일부 해석 차이 등으로 인한 비호환 부분도 존재한다).

CSS에서 요소에 스타일을 부여하기 위한 사양은 다음과 같다.



p#id { color: #ff3300 }


  • {부터 }까지의 부분을 '''선언 블록'''이라고 한다.
  • p#id를 '''선택자'''라고 하며, 스타일이 적용될 대상을 나타낸다.
  • 선언 블록과 선택자를 합쳐서 '''규칙 집합'''이라고 한다.
  • color: #ff3300 부분을 '''선언'''이라고 한다.
  • 선언 중, : 앞(위 예에서는 color)을 '''속성'''이라고 한다.
  • 선언 중, : 뒤(위 예에서는 #ff3300)를 '''값'''이라고 한다.


위 CSS 단편을 HTML 문서에 적용하면, "id라는 ID를 가진 p 요소의 문자 색상을 빨강 FF(=255), 녹색 33(=51), 파랑 0으로 하라"는 지시를 의미한다.



color: #ff3300;

width: 35%





color: "#0033ff";

width: '53%'



위에서 후자 두 개는 "'을 붙였기 때문에 부적절하다. "'로 둘러싸인 것은 문자열로 취급되기 때문이다.



p#id { color: #ff3300 }

p#id { font-size: 24px }



는,



p#id { color: #ff3300; font-size: 24px }



와 동일하다.

'''박스 모델 참고 그림'''



여백



테두리



안쪽 여백



내용



안쪽 여백



테두리



여백



박스에 '''width''' 속성을 설정했을 때, W3C의 박스 모델에서는 내용의 가로 폭으로 해석된다. 그리고 안쪽 여백과 테두리 부분의 가로 폭은 요소의 가로 폭에 추가된다. 반면 마이크로소프트(Microsoft)의 박스 모델에서는 width 속성은 내용의 가로 폭과 안쪽 여백 및 테두리 부분을 합한 것으로, 즉 요소 전체의 가로 폭이 된다.[75]

2002년 이후 발표된 CSS 지원 UA(User Agent) 중 CSS2를 사양으로 간주하는 것은 존재하지 않으며, 실질적으로 CSS2.1에 사양으로서의 역할을 위임한 형태가 되었다. CSS2 권고 사양서에 접속하면 CSS2는 관리되지 않으며, 사양 참조 및 구현은 CSS 2.1을 기반으로 하라는 주의 문구가 있다.

3. 2. 1. CSS 2.1

CSS 레벨 2의 개정판이다. CSS2 명세서의 불명확한 정의로 인해 각 웹 브라우저의 CSS2 구현에 비호환성이 발생했기 때문에, 모호한 설명을 명확하게 수정했다.[75] 또한, `text-shadow` 속성처럼 CSS2에서 제정되었지만 오랫동안 구현되지 않았던 것, `display` 속성의 `run-in` 값처럼 여러 사용자 에이전트에서 상호 운용성을 확보하지 못한 기능은 삭제되었다. 이러한 기능들은 CSS3 이후 레벨에서 다시 정의될 것이다.

CSS 구현과 관련하여 벤더들은 2002년경부터 CSS2.1을 기본 사양으로 간주하고 있다.

3. 3. CSS3

CSS3는 2005년 12월 5일 이후 개발 중에 있다.[82] W3C CSS3 로드맵은 요약과 도입부를 제공하고 있다.[83] CSS3는 모듈화되어 사용자 에이전트가 모든 모듈을 지원하지 않거나 자유롭게 선택할 수 있도록 하고 있으며, 세로 글쓰기와 HTML 이외의 규격에까지 관여하는 내용으로 되어 있다. 현재 어떤 모듈도 권고안까지 이른 것은 없다.

CSS3는 CSS 2와 달리 "모듈"이라고 하는 여러 개의 개별 문서로 나뉜다. 각 모듈은 새로운 기능을 추가하거나 CSS 2에 정의된 기능을 확장하여 이전 버전과의 호환성을 유지한다. CSS 레벨 3 작업은 CSS 2 권고안이 발표될 즈음에 시작되었으며, 최초의 CSS 3 초안은 1999년 6월에 발표되었다.[51]

모듈화로 인해 각 모듈은 서로 다른 안정성과 상태를 갖는다.[52] 일부 모듈은 ''후보 권고안''(CR) 상태이며, 어느 정도 안정적인 것으로 간주된다. ''CR'' 단계에서는 구현 시 공급업체 접두사를 삭제하는 것이 좋다.[53]

3. 3. 1. 주요 모듈



CSS3는 CSS 2.1을 중심으로 새로운 기능을 추가하고 개선하는 모듈 방식으로 구성된다.[76] 사용자 에이전트는 각 모듈을 자유롭게 선택하여 지원할 수 있으며, 세로 방향 글쓰기나 HTML 이외의 규격에도 적용할 수 있게 되었다. 2023년 11월 현재 권고되고 있는 모듈은 다음과 같다.

CSS3의 주요 모듈 사양[77]
모듈사양 제목상태날짜
css3-backgroundhttps://www.w3.org/TR/css3-background/ CSS Backgrounds and Borders Module Level 3권고 후보 초안
css-box-3https://www.w3.org/TR/css-box-3/ CSS Box Model Module Level 3권고
css-cascade-3https://www.w3.org/TR/css-cascade-3/ CSS Cascading and Inheritance Level 3권고
css-color-3https://www.w3.org/TR/css3-color CSS Color Module Level 3권고
css3-contenthttps://www.w3.org/TR/css-content-3/ CSS Generated Content Module Level 3초안
css-fonts-3https://www.w3.org/TR/css-fonts-3/ CSS Fonts Module Level 3권고
css3-gcpmhttps://www.w3.org/TR/css-gcpm-3/ CSS Generated Content for Paged Media Module초안
css3-layouthttps://www.w3.org/TR/css-template-3/ CSS Template Layout Module노트
css3-mediaquerieshttps://www.w3.org/TR/css3-mediaqueries/ Media Queries권고
mediaqueries-4https://www.w3.org/TR/mediaqueries-4/ Media Queries Level 4권고 후보
css3-multicolhttps://www.w3.org/TR/css-multicol-1/ Multi-column Layout Module Level 1권고 후보
css3-pagehttps://www.w3.org/TR/css3-page/ CSS Paged Media Module Level 3초안 (일부는 css3-break로)
css3-breakhttps://www.w3.org/TR/css-break/ CSS Fragmentation Module Level 3권고 후보
selectors-3https://www.w3.org/TR/selectors-3/ Selectors Level 3권고
selectors-4https://www.w3.org/TR/selectors-4/ Selectors Level 4초안
css3-uihttps://www.w3.org/TR/css-ui-3/ CSS Basic User Interface Module Level 3 (CSS3 UI)권고


3. 4. CSS4

CSS4는 단일 통합 사양이 존재하지 않으며, 여러 개의 개별 모듈로 구성되어 있다.[84] 각 모듈은 독립적으로 레벨이 지정되는데, CSS 레벨 2의 내용을 기반으로 하는 모듈은 레벨 3부터 시작한다. 일부 모듈은 이미 레벨 4에 도달했거나 레벨 5에 접근하고 있다.[85]

새로운 기능을 정의하는 모듈은 레벨 1로 지정되며, 일부는 레벨 2에 접근하고 있다. 예를 들어 플렉스박스[56]와 같은 새로운 기능이 레벨 1 모듈로 추가되었다.

CSS 작업 그룹은 브라우저 개발자가 구현할 수 있을 만큼 안정적이라고 판단되는 모듈과 초안을 모아 "스냅샷"을 발행한다. 2007년부터[57] 2018년까지[61] 다섯 개의 스냅샷이 발행되었다.

젠 시몬스가 2019년에 CSS의 상태에 대해 논의


Level 4 모듈에는 새로운 기능뿐만 아니라, 이전 레벨에서 상호 운용성 문제로 제외되었던 기능들도 포함된다. https://www.w3.org/TR/mediaqueries-4/ 미디어 쿼리 레벨 4, https://www.w3.org/TR/css-conditional-4/ CSS 조건부 규칙 모듈 레벨 4 등이 권고 후보가 되었다. 또한, https://www.w3.org/TR/css-color-5/ CSS 색상 모듈 레벨 5https://www.w3.org/TR/css-cascade-6/ CSS 캐스케이딩 및 상속 레벨 6와 같이 레벨 5, 6의 모듈 초안도 공개되어 있다.

3. 4. 1. CSS 스냅샷

CSS 스냅샷은 특정 시점의 CSS의 다양한 사양서 상태를 모아놓은 문서(W3C 그룹 노트)이다.[78]

CSS 2.1 이후 CSS는 하나의 사양서가 아닌 여러 모듈 사양서 전체로 정의된다. 이 때문에 CSS 전체 상황을 파악하기 어려워졌다. CSS 스냅샷은 이러한 문제를 해결하기 위해 W3C CSSWG가 발행하는 그룹 노트이다. 그룹 노트는 정식 W3C 권고는 아니지만, "CSS 스냅샷 2023"과 같이 대략 1년마다 발행되어 CSS의 현황을 빠르게 파악할 수 있게 돕는다.

4. 문법

CSS는 단순한 문법을 가지며, 다양한 스타일 속성의 이름을 지정하기 위해 여러 영어 키워드를 사용한다.

스타일 시트는 규칙 목록으로 구성되며, 각 규칙은 하나 이상의 선택자와 하나의 선언 블록으로 이루어진다.

CSS Level 2를 기준으로 설명하며, CSS 문법은 서로 다른 레벨 간에도 하위 호환성을 갖도록 설계되어 있다. 예를 들어, CSS Level 1으로 작성된 스타일 시트를 CSS Level 2로 취급하는 것도 가능하다 (단, 일부 비호환 부분도 존재한다).

다음은 CSS 코드의 예시이다.

```css

p#id { color: #ff3300 }

```

위 코드에서,


  • `{`부터 `}`까지는 선언 블록이라고 한다.
  • `p#id`는 선택자이며, 스타일이 적용될 대상을 나타낸다.
  • 선언 블록과 선택자를 합쳐 규칙 집합이라고 한다.
  • `color: #ff3300`는 선언이다.
  • 선언에서 `:` 앞(예: `color`)은 속성이다.
  • 선언에서 `:` 뒤(예: `#ff3300`)는 이다.


위 코드는 HTML 문서에 적용할 경우, "`id`라는 ID를 가진 `p` 요소의 문자 색상을 빨강 `FF(=255)`, 녹색 `33(=51)`, 파랑 `0`으로 하라"는 지시를 의미한다.

선언은 "속성: 값" 또는 "비어 있음(아무것도 기술하지 않음)" 중 하나로 구성되며, 속성, `:`, 값의 앞뒤에는 공백 문자(스페이스, 탭, 줄 바꿈 등)를 자유롭게 넣을 수 있다. `;`를 사용하여 여러 개의 선언을 나열할 수 있다.

```css

color: #ff3300;

width: 35%

```

와 같이 숫자 값에 `"` 나 `'` 을 붙이면 문자열로 취급되어 오류가 발생할 수 있으므로 주의해야 한다.

```css

p#id { color: #ff3300 }

p#id { font-size: 24px }

```

는,

```css

p#id { color: #ff3300; font-size: 24px }

```

와 동일하다. `;`는 전자의 예와 같이 선언을 선택자에 하나씩 적어 놓은 것을, 하나의 선택자 블록으로 기술할 때 선언을 나누는 데 사용한다.

선택자는 구현 수준이 높은 브라우저라면 어떤 속성이든 CSS를 적용할 수 있으며, ID 속성 선택자인 `#id`는 `[id="id"]`와 동일하게 간단한 매칭이 가능하다. HTML 태그, 문서 구조의 자식·형제 구조, 링크 및 동적인 표현·언어에 관한 의사 클래스(`:link`, `:hover`, `:lang` 등)에도 선택자를 적용할 수 있다.

4. 1. 스타일 시트

스타일 시트는 규칙 목록으로 구성된다. 각 규칙이나 규칙 집합은 하나 이상의 셀렉터와 선언 블록으로 구성된다.[1]

스타일 정보는 읽어들일 내용(작성자 스타일 시트)이나 사용자 에이전트 설정(사용자 스타일 시트) 두 곳에 기재할 수 있다. 사용자 에이전트는 고유 스타일(기본 스타일 시트)을 가진다.[1]

작성자 스타일 시트는 마크업 문서 안에 직접 기재하거나, 별도 문서로 불러오는 형태로 사용된다. CSS의 편리성을 최대한 발휘하기 위해 별도 문서로 불러오는 것이 권장된다.[1]

4. 2. 선택자

CSS에서 선택자(Selector|셀렉터영어)는 스타일을 적용할 HTML 요소를 선택하는 방법이다. 선택자를 통해 특정 태그, 클래스, ID를 가진 요소를 선택하거나, 속성, 부모-자식 관계 등을 기반으로 요소를 선택할 수 있다.

스타일 시트는 규칙 목록으로 구성되며, 각 규칙은 하나 이상의 선택자와 선언 블록으로 이루어진다.

  • `{`부터 `}`까지는 선언 블록이라 한다.
  • `p#id`는 선택자이며, 스타일 적용 대상을 나타낸다.
  • 선언 블록과 선택자를 합쳐 규칙 집합이라 한다.
  • `color: #ff3300`는 선언이다.
  • 선언에서 `:` 앞(예: `color`)은 속성이다.
  • 선언에서 `:` 뒤(예: `#ff3300`)는 이다.


예를 들어, `p#id { color: #ff3300 }`는 HTML 문서에서 `id`가 "id"인 `p` 태그의 글자 색상을 빨강, 녹색, 파랑을 조합한 색상으로 지정하라는 의미이다.

클래스와 ID는 대소문자를 구분하며, 문자로 시작해야 하고 영숫자와 언더바(_)를 포함할 수 있다. ID는 문서 내에서 유일해야 하며, `#` 기호를 붙여 표시한다. 클래스는 여러 요소에 적용할 수 있으며, `.` 기호를 붙여 표시한다.

CSS Level 1 스타일 시트는 CSS Level 2에서도 사용할 수 있지만, 일부 해석 차이로 호환되지 않는 부분이 있을 수 있다.

4. 2. 1. 선택자 유형

CSS에서 선택자(Selector영어)는 어느 부분의 마크업에 스타일을 적용할지 선언한다. 태그명(태그의 이름)과 클래스, ID로 선택할 수 있다.

선택자는 다음에 적용될 수 있다.

  • 특정 유형의 모든 HTML 요소들, 예를 들어 두 번째 수준의 헤더 h2
  • 특히, HTML 속성에 의해 지정된 요소:
  • ''id'': 문서 내에서 고유한 식별자로, 선택자 언어에서 해시 기호( # ) 접두사로 표시된다.
  • ''class'': 문서에서 여러 요소를 주석 처리할 수 있는 식별자로, 점( . ) 접두사로 표시된다.
  • 문서 객체 모델에서 다른 요소와 상대적으로 배치되는 방식에 따라 달라지는 요소.


클래스와 ID는 대소문자를 구분하며, 문자로 시작하고 영숫자 문자, 하이픈 및 언더바(_)를 포함할 수 있다. 클래스는 모든 요소의 여러 인스턴스에 적용될 수 있다. ID는 단일 요소에만 적용될 수 있다.
가상 클래스(Pseudo-classes)는 CSS 선택자에서 문서 트리에 포함되지 않은 정보를 기반으로 서식을 지정하는 데 사용된다. 널리 사용되는 가상 클래스의 한 예는 `:hover`로, 사용자가 시각적 요소에 "가리킬" 때, 일반적으로 마우스 커서를 그 위에 올려놓을 때만 콘텐츠를 식별한다. 이는 `a:hover` 또는 `#elementid:hover`와 같이 선택자에 추가된다.

가상 클래스는 `:link` 또는 `:visited`와 같이 문서 요소를 분류하는 반면, 가상 요소(pseudo-element)는 `::first-line` 또는 `::first-letter`와 같이 부분 요소를 포함할 수 있는 선택을 만든다.[7] 가상 요소에 사용되는 이중 콜론 표기법과 가상 클래스에 사용되는 단일 콜론 표기법의 차이점에 유의해야 한다.

여러 개의 단순 선택자를 결합자는 위치, 요소 유형, ID, 클래스 또는 이들의 조합으로 요소를 지정하기 위해 사용할 수 있다.[8] 선택자의 순서는 중요하다. 예를 들어,

```css

div .myClass {color: red;}

```

는 div 요소 내부에 있는 모든 myClass 클래스 요소에 적용되는 반면,

```css

.myClass div {color: red;}

```

는 myClass 클래스 요소 내부에 있는 모든 div 요소에 적용된다. 이는

```css

div.myClass {color: red;}

```

와 같은 연결된 식별자와 혼동해서는 안 되는데, 이는 myClass 클래스의 div 요소에 적용된다.

CSS Level 1으로 작성된 스타일 시트를 CSS Level 2로 취급하는 것도 가능하다(단, 일부 해석의 차이 등으로 인한 비호환 부분도 존재한다). CSS에서는 요소에 스타일을 부여하기 위해 다음과 같은 사양이 정해져 있다.

다음은 CSS 단편 예시다.

```css

p#id { color: #ff3300 }

```

  • `{`부터 `}`까지의 부분을 '''선언 블록'''이라고 한다.
  • `p#id`를 '''선택자'''라고 하며, 스타일이 적용될 대상을 나타낸다.
  • 선언 블록과 선택자를 합쳐서 '''규칙 집합'''이라고 한다.
  • `color: #ff3300` 부분을 '''선언'''이라고 한다.
  • 선언 중, `:` 앞(위 예에서는 `color`)을 '''속성'''이라고 한다.
  • 선언 중, `:` 뒤(위 예에서는 `#ff3300`)를 '''값'''이라고 한다.


위 예제의 CSS 단편을 적용하면 선언하고 있는 문서 중, 선택자가 지정하고 있는 부분(HTML 문서에서는 요소, 요소의 부모-자식 관계, 특정 클래스, ID 등)에 선언 블록 내의 선언이 적용된다. 선언은 "속성: 값" 또는 "비어 있음(아무것도 기술하지 않음)" 중 하나로 구성되며, 속성, `:`, 값의 앞뒤에는 공백 문자(스페이스, 탭, 줄 바꿈 등)를 자유롭게 넣을 수 있으며, `;`로 구분하여 선언을 나열할 수 있다.

위 예제는 HTML 문서에 적용하는 경우, "id라는 ID를 가진 p 요소의 문자 색상을 빨강 FF(=255), 녹색 33(=51), 파랑 0으로 하라"는 지시를 의미한다.

```css

color: #ff3300;

width: 35%

```

```css

color: "#0033ff";

width: '53%'

```

이러한 선언이 있을 때, 후자 두 개는 `"`나 `'`을 붙였기 때문에 부적절하다.

```css

p#id { color: #ff3300 }

p#id { font-size: 24px }

```

는,

```css

p#id { color: #ff3300; font-size: 24px }

```

와 동일하다.

선택자는 구현 수준이 높은 브라우저라면 어떤 속성이든 CSS를 적용할 수 있으며, 이 경우 ID에 관한 속성 선택자이므로, `#id`는 `[id="id"]`와 동일하다. 선택자의 간단한 매칭이 가능하다. 그 외 HTML 태그에 대한 적용, 문서 구조에서 본 자식·형제 구조에 적용하는 선택자, 나아가 링크 및 동적인 표현·언어에 관한 의사 클래스(`:link`, `:hover`, `:lang`) 등이 있다.

4. 2. 2. 선택자 문법 요약

CSS에서 선택자(Selector|셀렉터영어)는 어느 부분의 마크업에 스타일을 적용할지 선언한다. 태그명(태그의 이름)과 클래스, ID로 선택할 수 있다. 클래스와 ID들은 대소문자를 구분하며 문자로 시작해야 하고 영숫자와 언더바(_)를 포함할 수 있다. 클래스는 어떠한 요소의 어떠한 수의 인스턴스에도 적용할 수 있으며, ID는 하나의 요소에만 적용할 수 있다. ID 값은 앞에 #이 붙고, 클래스 값은 앞에 .이 붙는다.

다음 표는 선택자 구문의 사용법과 이를 도입한 CSS 버전을 요약하여 제공한다.[9]

패턴일치하는 요소CSS 레벨에 처음 정의됨
EE 타입의 요소1
E:link대상이 아직 방문하지 않았거나(:link) 이미 방문한(:visited) 하이퍼링크의 소스 앵커인 E 요소1
E:active특정 사용자 동작 중인 E 요소1
E::first-lineE 요소의 첫 번째 서식 지정된 줄1
E::first-letterE 요소의 첫 번째 서식 지정된 글자1
.cclass="c"를 가진 모든 요소1
#myidid="myid"를 가진 요소1
E.warningclass가 "warning"인 E 요소 (class가 어떻게 결정되는지는 문서 언어에 명시됨)1
E#myidID가 "myid"와 같은 E 요소1
.c#myidclass="c"이고 ID가 "myid"와 같은 요소1
E FE 요소의 자손인 F 요소1
*모든 요소2
E[foo]"foo" 속성이 있는 E 요소2
E[foo="bar"]"foo" 속성 값이 정확히 "bar"인 E 요소2
E[foo~="bar"]"foo" 속성 값이 공백으로 구분된 값의 목록이며 그중 하나가 정확히 "bar"인 E 요소2
E[foo>="en"]"foo" 속성이 "en"으로 시작하는 하이픈으로 구분된 값 목록을 가진 E 요소2
E:first-child부모의 첫 번째 자식인 E 요소2
E:lang(fr)언어가 "fr"인 E 타입의 요소 (언어가 어떻게 결정되는지는 문서 언어에 명시됨)2
E::beforeE 요소의 내용 앞에 생성된 내용2
E::afterE 요소의 내용 뒤에 생성된 내용2
E > FE 요소의 자식인 F 요소2
E + FE 요소 바로 다음에 오는 F 요소2
E[foo^="bar"]"foo" 속성 값이 정확히 문자열 "bar"로 시작하는 E 요소3
E[foo$="bar"]"foo" 속성 값이 정확히 문자열 "bar"로 끝나는 E 요소3
E[foo*="bar"]"foo" 속성 값에 부분 문자열 "bar"가 포함된 E 요소3
E:root문서의 루트인 E 요소3
E:nth-child(n)부모의 n번째 자식인 E 요소3
E:nth-last-child(n)부모의 n번째 자식인 E 요소 (뒤에서부터 셈)3
E:nth-of-type(n)해당 유형의 n번째 형제인 E 요소3
E:nth-last-of-type(n)해당 유형의 n번째 형제인 E 요소 (뒤에서부터 셈)3
E:last-child부모의 마지막 자식인 E 요소3
E:first-of-type해당 유형의 첫 번째 형제인 E 요소3
E:last-of-type해당 유형의 마지막 형제인 E 요소3
E:only-child부모의 유일한 자식인 E 요소3
E:only-of-type해당 유형의 유일한 형제인 E 요소3
E:empty자식이 없는 E 요소 (텍스트 노드 포함)3
E:target참조 URI의 대상인 E 요소3
E:enabled활성화된 사용자 인터페이스 요소 E3
E:disabled비활성화된 사용자 인터페이스 요소 E3
E:checked선택된 사용자 인터페이스 요소 E (예: 라디오 버튼 또는 체크박스)3
E:not(s)간단한 선택자 s와 일치하지 않는 E 요소3
E ~ FE 요소 앞에 있는 F 요소3


4. 3. 선언 블록

CSS 선언 블록은 스타일을 지정하는 데 사용되는 핵심 구성 요소이다. 선언 블록은 중괄호(`{}`)로 둘러싸여 있으며, 그 안에는 세미콜론(`;`)으로 구분된 여러 개의 선언이 들어간다.[10]

각 선언은 속성(property), 콜론(`:`), 값(value)으로 구성된다.[86] 예를 들어, `color: #ff3300;` 에서 `color`는 속성, `#ff3300`은 값이다. 여러 개의 선언을 사용할 때는 각 선언을 세미콜론으로 구분해야 한다.[86]

```css

p#id { color: #ff3300; font-size: 24px }

```

위의 예시에서 `p#id`는 선택자이고, `{ color: #ff3300; font-size: 24px }` 부분이 선언 블록이다. 이 선언 블록은 `color`와 `font-size` 두 개의 속성을 포함하고 있다.

선언 블록 내에서 각 선언은 "속성: 값" 형태로 작성되며, 속성과 콜론, 값의 앞뒤에는 공백 문자(스페이스, 탭, 줄 바꿈 등)를 자유롭게 추가할 수 있다.

```css

color: #ff3300;

width: 35%

```

위와 같이 `width: 35%`처럼 숫자 값에 따옴표(`"`)나 아포스트로피(`'`)를 붙이면 문자열로 처리되므로 주의해야 한다.

4. 3. 1. 선언

CSS 선언은 ''속성'', 콜론(`:`), ''값''으로 구성된다. 각 선언은 프로퍼티, 쌍점(:), 값으로 구성된다. 한 블록 안에 여러 선언이 있으면, 쌍반점(;) (세미콜론)으로 각 선언을 구분해야 하며,[86] 하나의 선언이라도 세미콜론을 넣지 않으면 동작하지 않는 경우도 있다. 가독성을 위해 선언 블록, 선언, 콜론 및 세미콜론 주변에 선택적으로 공백을 넣을 수 있다.[11]

4. 3. 2. 속성

CSS 표준에는 속성이 지정되어 있다. 각 속성은 가능한 값 집합을 갖는다. 일부 속성은 모든 유형의 요소에 영향을 미칠 수 있으며, 다른 속성은 특정 요소 그룹에만 적용된다.[12][13]

CSS의 편리성을 최대한 발휘하기 위해, 스타일 정보를 별도의 문서로 불러오는 것이 권장된다.

CSS에서는 요소에 스타일을 부여하기 위해 다음과 같은 사양이 정해져 있다.

  • CSS 단편 예시(`p#id { color: #ff3300 }`):
  • `{`부터 `}`까지의 부분을 '''선언 블록'''이라고 한다.
  • `p#id`를 '''선택자'''라고 하며, 스타일이 적용될 대상을 나타낸다.
  • 선언 블록과 선택자를 합쳐서 '''규칙 집합'''이라고 한다.
  • `color: #ff3300` 부분을 '''선언'''이라고 한다.
  • 선언 중, `:` 앞(예시: `color`)을 '''속성'''이라고 한다.
  • 선언 중, `:` 뒤(예시: `#ff3300`)를 '''값'''이라고 한다.


위 예시는 "`id`라는 ID를 가진 `p` 요소의 문자 색상을 빨강 `FF(=255)`, 녹색 `33(=51)`, 파랑 `0`으로 하라"는 지시를 의미한다.

선언은 "속성: 값" 또는 "비어 있음(아무것도 기술하지 않음)" 중 하나로 구성되며, 속성, `:`, 값의 앞뒤에는 공백 문자(스페이스, 탭, 줄 바꿈 등)를 자유롭게 넣을 수 있으며, `;`로 구분하여 선언을 나열할 수 있다.

`color: #ff3300; width: 35%` 와 같은 선언에서 `width: 35%`와 같이 숫자 값에 `"`나 `’`을 붙이면 문자열로 취급되어 부적절하다.

`p#id { color: #ff3300 }`와 `p#id { font-size: 24px }`는 `p#id { color: #ff3300; font-size: 24px }`와 동일하다. `;`는 선언을 나누는 데 사용된다.

선택자는 구현 수준이 높은 브라우저라면 어떤 속성이든 CSS를 적용할 수 있다.

HTML 태그, 문서 구조, 링크 및 동적인 표현·언어에 관한 의사 클래스(`:link`, `:hover`, `:lang` 등) 등에 CSS를 적용할 수 있다.

'''박스 모델 참고 그림'''

박스에 `width` 속성을 설정했을 때, W3C의 박스 모델에서는 내용의 가로 폭으로 해석된다. 그리고 안쪽 여백과 테두리 부분의 가로 폭은 요소의 가로 폭에 추가된다.

반면 마이크로소프트의 박스 모델에서는 `width` 속성은 내용의 가로 폭과 안쪽 여백 및 테두리 부분을 합한 것으로, 즉 요소 전체의 가로 폭이 된다.[75]

CSS2는 CSS1의 상위 호환이며, 표시 매체(모니터, TV, 종이 매체 등)에 따라 자동으로 스타일 시트를 변경할 수 있도록 하고, 음성 브라우저 지원, 인쇄 매체 지원, 글꼴 등의 표시 기능 확장 및 박스 개념 수정 등이 이루어졌다.

4. 3. 3. 값

값은 "center"(가운데) 또는 "inherit"(상속)과 같은 키워드이거나 200px (200 픽셀), 50vw (뷰포트 너비의 50%) 또는 80% (부모 요소 너비의 80%)와 같은 숫자 값일 수 있다.

색상 값은 키워드 (예: "red"), 16진수 값 (예: #FF0000, #F00로 줄여서 표시), 0에서 255까지의 RGB 값 (예: rgb(255, 0, 0)), 색상과 알파 투명도를 모두 지정하는 RGBA 값 (예: rgba(255, 0, 0, 0.8)), 또는 HSL 또는 HSLA 값 (예: hsl(0 100% 50%), hsl(0 100% 50% / 0.8))로 지정할 수 있다.[14]

선형 측정을 나타내는 0이 아닌 숫자 값은 200px 또는 50vw와 같이 문자 코드 또는 약어이거나 80%와 같은 백분율 기호인 길이 단위를 포함해야 한다. 1cm (센티미터), 약 2.54cm (인치), 1mm (밀리미터), 1pc (파이카), 및 1pt (포인트)와 같은 일부 단위는 ''절대적''이며, 이는 렌더링된 치수가 페이지의 구조에 의존하지 않는다는 것을 의미한다. 다른 것들 – 1em (em), 1ex (ex) 및 1px (픽셀) –은 ''상대적''이며, 이는 부모 요소의 글꼴 크기와 같은 요소가 렌더링된 측정에 영향을 미칠 수 있음을 의미한다. 이 8개의 단위는 CSS 1[15]의 기능이었으며 이후 모든 개정판에 유지되었다. 제안된 CSS 값 및 단위 모듈 레벨 3은 W3C 권고안으로 채택될 경우 ch, Q, rem, vh, vmax, vmin, 및 vw와 같은 7개의 추가 길이 단위를 제공할 것이다.[16]

4. 4. 우선순위

CSS는 웹 브라우저, 사용자, 제작자 등 다양한 출처로부터 정보를 제공받는다. 제작자 정보는 인라인, 미디어 타입, 중요도, 셀렉터 특정성, 규칙 순서, 상속, 프로퍼티 정의 등으로 세분화된다. CSS 스타일은 별도 문서나 HTML 문서에 직접 추가할 수 있으며, 화면 크기, 다크 모드, 화면 방향 등에 따라 다른 스타일을 적용할 수 있다.

CSS 우선 순위 (높은 순위부터)
우선도CSS 원천설명
1중요도프로퍼티 뒤에 `!important` 추가[87]
2인라인HTML style 속성을 통해 적용
3미디어 타입미디어 특정 CSS가 없다면 모든 미디어 타입에 적용
4사용자 정의대부분 브라우저가 접근성 기능으로 제공
5선택자 특정성특정 컨텍스트 선택자(예: `#heading p`)는 일반 정의를 덮어씀
6규칙 순서마지막 선언 규칙이 가장 높은 우선 순위
7부모 상속프로퍼티 미지정 시 부모 요소 상속 (일부 예외)
8HTML 문서 내 CSS 프로퍼티 정의CSS 규칙, 인라인 스타일은 기본 브라우저 값을 덮어씀
9브라우저 기본값W3C 초기값 사양에 정의, 우선 순위 낮음



가장 우선 순위가 높은 스타일 시트가 콘텐츠 표시를 제어하며, 낮은 순위 소스(예: 사용자 에이전트 스타일)로 전달되는 과정을 "캐스케이딩"이라 한다.

CSS는 사용자에게 프레젠테이션 제어를 허용한다. 예로, 빨간색 이탤릭체 제목이 불편한 사용자는 다른 스타일 시트를 적용 가능하다. 브라우저, 웹사이트에 따라 스타일 시트 선택, 제거, 재정의가 가능하며, Stylish, Stylus 같은 확장 프로그램으로 사용자 스타일 시트 관리가 용이하다.

캐스케이딩은 대규모 프로젝트에서 개발자가 우선 순위 충돌 타사 스타일을 통합하고, 디자이너가 디자인을 미세 조정하는 데 도움을 준다.

CSS 규칙의 상대적 가중치는 ''구체성(Specificity)''에 따라 결정된다.

4. 4. 1. 구체성 (Specificity)

''구체성(Specificity)''은 다양한 CSS 규칙들의 상대적인 가중치를 의미한다.[18] 이는 여러 규칙이 적용될 수 있을 때, 어떤 스타일이 요소에 적용될지를 결정한다. 명세에 따르면, 간단한 선택자(예: H1)는 1의 specificity를 가지며, 클래스 선택자는 0, 10의 specificity를 가지고, ID 선택자는 100의 specificity를 가진다. specificity 값은 십진법처럼 carry over되지 않으므로, "자리수"를 구분하기 위해 쉼표를 사용한다.[19] (11개의 요소와 11개의 클래스를 가진 CSS 규칙은 121이 아닌 11,11의 specificity를 가진다).

따라서 다음 규칙의 선택자는 지정된 specificity를 갖는다:

선택자Specificity
h1 {color: white;}0, 0, 0, 1
p em {color: green;}0, 0, 0, 2
.grape {color: red;}0, 0, 1, 0
p.bright {color: blue;}0, 0, 1, 1
p.bright em.dark {color: yellow;}0, 0, 2, 2
#id218 {color: brown;}0, 1, 0, 0
style=" "1, 0, 0, 0



다음 HTML 조각을 고려해 보자.

```html















특정성을 보여주기 위해







```

위의 예제에서 `style` 속성의 선언이 `<style>` 요소의 선언을 재정의한다. 이는 `style` 속성이 더 높은 특정성을 가지기 때문이며, 따라서 단락은 녹색으로 표시된다.

```html

특정성을 보여주기 위해


4. 5. 상속

상속은 CSS의 핵심 기능으로, 조상-자손 관계에 따라 작동한다. 상속은 특정 요소에 지정된 속성이 해당 요소의 자손에게도 적용되는 방식이다.[18] 상속은 중첩을 기반으로 하는 페이지 내 XHTML 요소의 계층 구조인 문서 트리에 의존한다. 자손 요소는 자신을 감싸는 모든 조상 요소로부터 CSS 속성 값을 상속받을 수 있다.

일반적으로 자손 요소는 텍스트 관련 속성을 상속받지만, 박스 관련 속성은 상속되지 않는다. 상속되는 속성과 상속되지 않는 속성은 다음과 같다.

상속 가능상속 불가능



상속은 스타일 시트에서 특정 속성을 반복해서 선언하는 것을 피할 수 있게 해주어, 더 간결한 CSS 작성을 돕는다.

CSS의 상속은 클래스 기반 프로그래밍 언어의 상속과는 다르다. 클래스 기반 프로그래밍 언어에서는 클래스 B를 "클래스 A와 유사하지만 수정 사항이 있음"으로 정의할 수 있다.[20] CSS에서는 "클래스 A와 유사하지만 수정 사항이 있음"과 같이 ''요소''의 스타일을 지정할 수는 있지만, 여러 요소에 수정 사항을 반복 적용할 수 있는 CSS ''클래스''를 정의하는 것은 불가능하다.

스타일 정보는 작성자 스타일 시트나 사용자 에이전트 설정(사용자 스타일 시트)에 기재할 수 있다. 사용자 에이전트는 고유한 기본 스타일 시트를 가진다.

작성자 스타일 시트는 마크업 문서 안에 직접 작성하거나, 별도 문서로 불러올 수 있다. CSS의 편리성을 최대한 활용하려면 별도 문서로 불러오는 것이 좋다.

4. 5. 1. 예시

css

p {

color: pink;

}

```

`em` 요소()가 안에 있는 `p` 요소가 있다고 가정한다.

```html



This is to illustrate inheritance



```

`em` 요소에 색상이 할당되지 않으면 강조된 단어 "illustrate"는 상위 요소인 `p`의 색상을 상속한다. 스타일 시트 `p`는 핑크색을 가지고 있으므로, `em` 요소도 마찬가지로 핑크색이다.[18]

'''상속'''(계승, Inheritance|인헤리턴스영어)은 부모 요소에서 자식 요소로 프로퍼티 값을 전달하는 것이다.[74]

CSS의 상속 기능을 통해 효율적이고 의미에 맞는 스타일을 지정할 수 있다. 예를 들어 홈페이지 내에 `
`의 3계층 구조로 이루어진 미니 기사를 작성하는 경우를 생각해보자. 미니 기사를 주변과 구분하기 위해 배경색을 `
`로 지정하는 경우, 의도하는 바는 미니 기사 전체, 즉 `
` 이하 모든 요소의 배경이 바뀌는 것이다. CSS는 상속을 통해 이를 실현한다. 즉, 자식 요소에 배경색을 지정하지 않는 경우(`

`
`)에도 자동으로 부모 요소의 속성이 자식 요소로 상속되어, 미니 기사 전체의 배경이 변경된다. 상속이 없는 경우, 미니 기사의 `

` 헤더 부분이 흰색 배경으로 남게 된다.

4. 6. 공백 (Whitespace)

CSS 코드에서 속성과 선택자 사이의 공백은 무시된다. 따라서 다음 두 코드는 기능적으로 동일하다.[21]

```css

body{overflow:hidden;background:#000000;background-image:url(images/bg.gif);background-repeat:no-repeat;background-position:left top;}

```

```css

body {

overflow: hidden;

background-color: #000000;

background-image: url(images/bg.gif);

background-repeat: no-repeat;

background-position: left top;

}

4. 6. 1. 들여쓰기

CSS의 가독성을 위해 서식을 지정하는 일반적인 방법 중 하나는 각 속성을 들여쓰고 자체 줄에 배치하는 것이다. CSS의 가독성을 위해 서식을 지정하는 것 외에도, 단축 속성을 사용하여 코드를 더 빠르게 작성할 수 있으며, 이는 렌더링 시에도 더 빠르게 처리된다.[21]

때로는 여러 속성 값이 자체 줄로 들여쓰기된다.

4. 7. 위치 지정 (Positioning)

CSS 2.1은 세 가지 위치 지정 방식을 정의한다.

  • 일반 흐름: HTML 요소가 텍스트처럼 가로로 배치되거나, 단락처럼 세로로 쌓이는 방식이다. 블록 또는 인라인 요소의 상대 위치 지정 및 런인 박스도 포함된다.
  • 플로트: 요소가 일반 흐름에서 벗어나 왼쪽이나 오른쪽으로 최대한 이동하고, 다른 콘텐츠는 플로트된 요소 옆으로 흐르는 방식이다.
  • 절대 위치 지정: 요소가 다른 요소와 관계없이 독립적인 위치를 가지는 방식이다.

4. 7. 1. Position 속성

CSS 2.1은 세 가지 위치 지정 방식을 정의한다.

  • 일반 흐름:
  • * ''인라인'' 요소는 텍스트의 단어에서 글자가 배치되는 방식과 동일하게, 사용 가능한 공간을 가로질러 차례대로 배치되며 공간이 더 이상 없으면 아래에 새 줄을 시작한다.
  • * ''블록'' 요소는 단락이나 글머리 기호 목록의 항목처럼 수직으로 쌓인다.
  • * 일반 흐름에는 블록 또는 인라인 요소의 상대 위치 지정 및 런인 박스도 포함된다.
  • 플로트:
  • * 플로트된 요소는 일반 흐름에서 제거되어 사용 가능한 공간에서 최대한 왼쪽 또는 오른쪽으로 이동한다.
  • * 그런 다음 다른 콘텐츠는 플로트된 요소 옆으로 흐른다.
  • 절대 위치 지정:
  • * 절대 위치 지정된 요소는 다른 요소의 일반 흐름에 포함되지 않으며 영향을 미치지 않는다.
  • * 다른 요소와 독립적으로 컨테이너에 할당된 위치를 차지한다.


`position` 속성에는 다섯 가지 가능한 값이 있다. 요소가 `static` 이외의 방식으로 위치가 지정되면 추가 속성인 `top`, `bottom`, `left`, `right`를 사용하여 오프셋과 위치를 지정한다. position이 static인 요소는 `top`, `bottom`, `left` 또는 `right` 속성의 영향을 받지 않는다.

4. 7. 2. Float 및 Clear

`float` 속성은 세 가지 값 중 하나를 가질 수 있다. `absolute` 위치나 `fixed` 항목은 플로팅될 수 없다. 다른 요소들은 일반적으로 해당 요소의 `clear` 속성에 의해 방지되지 않는 한 플로팅된 항목 주위로 흐른다.

  • `left`: 항목은 표시될 줄의 왼쪽에 '플로팅'된다. 다른 항목들은 오른쪽 주위로 흐를 수 있다.
  • `right`: 항목은 표시될 줄의 오른쪽에 '플로팅'된다. 다른 항목들은 왼쪽 주위로 흐를 수 있다.
  • `clear`: 요소가 왼쪽(`clear:left`), 오른쪽(`clear:right`), 또는 양쪽(`clear:both`)의 플로팅된 요소 아래에 나타나도록 강제한다.[22][23]

5. 활용

CSS는 웹 페이지의 스타일과 레이아웃을 정의하는 데 사용되는 스타일 시트 언어이다. CSS를 활용하면 HTML로 작성된 내용과 CSS로 작성된 표현을 분리하여 웹 페이지를 더욱 효율적으로 구성하고 관리할 수 있다.

CSS는 다음과 같은 다양한 방식으로 활용된다.


  • 내용과 표현의 분리: CSS를 사용하면 HTML 문서에서 내용과 표현을 분리할 수 있다. HTML은 문서의 구조와 내용을 담당하고, CSS는 디자인과 레이아웃을 담당한다. 이렇게 분리하면 HTML 코드가 간결해지고, 유지 보수가 쉬워진다.[17]
  • 사이트 전체의 일관성 유지: CSS를 사용하면 웹 사이트 전체의 스타일을 일관성 있게 유지할 수 있다. 전역 스타일 시트를 통해 사이트 전체 요소의 스타일을 지정하고, 필요에 따라 스타일 시트를 수정하면 되므로 유지 관리가 쉽고, 시간과 비용을 절약할 수 있다.[17]
  • 대역폭 절약: CSS 스타일 시트는 일반적으로 브라우저에 캐시되어 여러 페이지에서 다시 로드할 필요가 없으므로, 네트워크를 통해 전송되는 데이터 양을 줄여 대역폭을 절약할 수 있다.[17]
  • 페이지 재포맷: CSS를 사용하면 단 한 줄의 코드로 동일한 페이지에 대해 다른 스타일 시트를 적용할 수 있다. 이를 통해 다양한 대상 장치에 맞게 페이지를 조정하거나, 접근성을 향상시킬 수 있다.[17]
  • 접근성 향상: CSS를 사용하면 콘텐츠가 다양한 화면 크기와 방향에 동적으로 적응하는 반응형 디자인을 구현할 수 있다. 이를 통해 다양한 환경에서 웹 페이지의 접근성과 사용자 경험을 향상시킬 수 있다.[17]


CSS는 사용자 기본 설정, 웹 브라우저, 장치 유형, 화면 해상도, 사용자의 지리적 위치 등 다양한 매개변수에 따라 스타일을 조정하여 여러 표현 형식으로 콘텐츠를 게시하는 것을 용이하게 한다.

5. 1. 내용과 표현의 분리

CSS가 등장하기 전에는 HTML 문서의 거의 모든 표현 속성이 HTML 마크업 내에 포함되어 있었다. 모든 글꼴 색상, 배경 스타일, 요소 정렬, 테두리 및 크기는 HTML 내에서 명시적으로, 종종 반복적으로 설명해야 했다. CSS를 사용하면 작성자가 해당 정보의 대부분을 스타일 시트인 다른 파일로 이동할 수 있어 HTML이 훨씬 더 간단해진다.[17]

예를 들어, 머리글(h1 요소), 부제(h2), 하위 부제(h3) 등은 HTML을 사용하여 구조적으로 정의된다. 인쇄물 및 화면에서 이러한 요소의 글꼴, 크기, 색상 및 강조 선택은 ''표현적''이다.

CSS가 나오기 전에는, 모든 h2 머리글에 그러한 타이포그래피 특성을 할당하려는 문서 작성자는 해당 머리글 유형이 발생할 때마다 HTML 표현 마크업을 반복해야 했다. 이로 인해 문서가 더 복잡해지고 커지며 오류가 발생하기 쉽고 유지 관리하기 어려웠다. CSS를 사용하면 표현과 구조를 분리할 수 있다. CSS는 색상, 글꼴, 텍스트 정렬, 크기, 테두리, 간격, 레이아웃 및 기타 많은 타이포그래피 특성을 정의할 수 있으며 화면 및 인쇄 보기에 대해 독립적으로 수행할 수 있다. 또한 CSS는 음성 텍스트 리더를 위한 읽기 속도 및 강조와 같은 비 시각적 스타일도 정의한다. W3C는 이제 모든 표현 HTML 마크업의 사용을 더 이상 사용하지 않음으로 지정했다.[17]

CSS 이전의 HTML에서 빨간색 텍스트로 정의된 제목 요소는 다음과 같이 작성되었다.

```html

Chapter 1.



```

CSS를 사용하면 HTML 표현 속성 대신 스타일 속성을 사용하여 동일한 요소를 코딩할 수 있다.

```html

Chapter 1.



```

내부 스타일 또는 외부 CSS 파일을 사용하면 CSS의 장점을 활용할 수 있다. 예를 들어, 문서에 다음 스타일 요소가 포함되어 있다고 가정해 보자.

```html



```

문서의 모든 h1 요소는 명시적인 코드가 필요 없이 자동으로 빨간색이 된다. 작성자가 나중에 h1 요소를 파란색으로 변경하려는 경우 스타일 요소를 다음과 같이 변경하여 수행할 수 있다.

```html



```

문서를 일일이 살펴보면서 각 개별 h1 요소의 색상을 변경하는 것보다 훨씬 간편하다.

스타일은 외부에 CSS 파일로 배치하고 아래와 같은 구문을 사용하여 불러올 수 있다.

```html



```

이렇게 하면 HTML 문서에서 스타일을 더욱 분리하여, 외부 CSS 파일을 편집하여 여러 문서의 스타일을 쉽게 변경할 수 있다.

CSS는 다양한 매개변수에 따라 스타일을 조정하여 여러 형식으로 콘텐츠를 게시하는 것을 용이하게 한다. 이러한 매개변수에는 사용자 기본 설정 (테마 또는 글꼴 크기), 다양한 웹 브라우저와의 호환성, 콘텐츠를 보는 데 사용되는 장치 유형 (예: 데스크톱, 태블릿 또는 모바일 장치), 화면 해상도, 사용자의 위치 및 기타 여러 변수가 포함된다. 또한 CSS는 반응형 디자인을 가능하게 하여 콘텐츠가 다양한 화면 크기와 방향에 동적으로 적응하여 접근성과 사용자 경험을 향상시킨다.

5. 2. 사이트 전체의 일관성 유지

CSS 등장 이전에는 HTML 문서 내에 모든 표현 속성(글꼴 색상, 배경 스타일, 요소 정렬, 테두리, 크기 등)을 명시적이고 반복적으로 작성해야 했다. CSS를 사용하면 이러한 정보 대부분을 스타일 시트라는 별도의 파일로 이동하여 HTML을 간결하게 만들 수 있다.

예를 들어, 머리글(h1), 부제(h2), 하위 부제(h3) 등은 HTML로 구조적으로 정의되지만, 글꼴, 크기, 색상, 강조 등의 표현적인 요소는 CSS를 통해 분리하여 정의할 수 있다.

CSS 이전에는 모든 `h2` 머리글에 특정 타이포그래피 속성을 지정하려면 해당 머리글이 나올 때마다 HTML 표현 마크업을 반복해야 했다. 이로 인해 문서는 복잡해지고, 커지며, 오류가 발생하기 쉽고, 유지 관리하기 어려웠다. CSS를 통해 표현과 구조를 분리하면 이러한 문제를 해결할 수 있다.

```html



```

위와 같이 스타일을 지정하면, 모든 `h1` 요소는 명시적인 코드 없이 자동으로 파란색이 된다. 나중에 `h1` 요소의 색상을 변경하려면 스타일 시트만 수정하면 되므로, 각 요소를 개별적으로 수정하는 것보다 훨씬 간편하다.

스타일은 외부 CSS 파일에 배치하고 아래와 같이 불러올 수 있다.

```html



```

이렇게 하면 HTML 문서에서 스타일을 더욱 분리하여, 외부 CSS 파일만 수정하여 여러 문서의 스타일을 쉽게 변경할 수 있다.

여러 스타일 시트를 가져와서 출력 장치(화면, 인쇄 등)에 따라 다른 스타일을 적용할 수도 있다. 가장 높은 우선순위를 가진 스타일 시트가 콘텐츠 표시를 제어하며, 설정되지 않은 선언은 낮은 우선순위 소스(예: 사용자 에이전트 스타일)로 전달된다. 이 과정을 "캐스케이딩"이라고 한다.

CSS를 효과적으로 사용하면 전역 스타일 시트를 통해 사이트 전체 요소의 스타일을 지정할 수 있다. 요소 스타일을 변경해야 할 때 전역 스타일 시트의 규칙을 편집하면 되므로, CSS 이전보다 유지 관리가 쉽고, 비용과 시간을 절약할 수 있다.

스타일 정보는 작성자 스타일 시트나 사용자 에이전트 설정(사용자 스타일 시트)에 기재할 수 있다. 사용자 에이전트는 고유 스타일(기본 스타일 시트)을 가질 수도 있다. 작성자 스타일 시트는 마크업 문서 안에 직접 작성하거나 별도 문서로 불러올 수 있는데, CSS의 편리성을 위해 별도 문서로 불러오는 것이 권장된다.[17]

5. 3. 대역폭 절약

CSS가 등장하기 전에는 HTML 문서의 표현 속성이 HTML 마크업 내에 포함되어 있어서 모든 글꼴 색상, 배경 스타일 등을 HTML 내에서 반복적으로 설명해야 했다. CSS를 사용하면 이러한 정보 대부분을 스타일 시트라는 다른 파일로 이동할 수 있어 HTML을 간결하게 만들 수 있다.

예를 들어, 머리글(h1), 부제(h2) 등은 HTML을 사용하여 구조적으로 정의되지만, 글꼴, 크기, 색상 등은 표현적인 요소이다. CSS 이전에는 이러한 타이포그래피 특성을 각 머리글에 반복해서 지정해야 했기 때문에 문서가 복잡해지고 유지 관리하기 어려웠다. CSS를 사용하면 표현과 구조를 분리하여 이러한 문제를 해결할 수 있다.

CSS를 사용하면 다음과 같이 HTML 표현 속성 대신 스타일 속성을 사용할 수 있다.

```html

1장



```

스타일 속성을 내부 스타일 요소나 외부 CSS 파일에 배치하면 CSS의 장점이 더 명확해진다. 예를 들어, 문서에 다음과 같은 내부 스타일 요소를 포함하면 모든 `h1` 요소가 자동으로 빨간색이 된다.

```html



```

나중에 `h1` 요소의 색상을 변경하려면 스타일 요소만 수정하면 되므로, 각 요소를 개별적으로 수정하는 것보다 훨씬 간편하다.

스타일을 외부 CSS 파일에 배치하고 다음과 같이 로드할 수도 있다.

```html



```

이렇게 하면 HTML 문서에서 스타일을 더욱 분리하여 여러 문서의 스타일을 쉽게 변경할 수 있다.

스타일 시트는 `class`, 유형 등에 따라 선택된 HTML 요소에 대해 스타일을 한 번 지정하므로, 각 요소마다 스타일 정보를 반복하는 것보다 훨씬 효율적이다. 외부 스타일 시트는 일반적으로 브라우저 캐시에 저장되어 여러 페이지에서 다시 로드하지 않고 사용할 수 있어 네트워크를 통한 데이터 전송량을 줄여준다. 즉, 대역폭 절약에도 도움이 된다.[17]

5. 4. 페이지 재포맷

CSS가 등장하기 전에는 HTML 문서의 표현 속성이 HTML 마크업 내에 포함되어 있었습니다. 글꼴 색상, 배경 스타일, 요소 정렬, 테두리 및 크기는 HTML 내에서 명시적으로 설명해야 했습니다. CSS를 사용하면 이러한 정보의 대부분을 스타일 시트라는 다른 파일로 이동할 수 있어 HTML이 훨씬 간단해집니다.

예를 들어, 머리글(h1), 부제(h2), 하위 부제(h3) 등은 HTML을 사용하여 구조적으로 정의됩니다. 인쇄물 및 화면에서 이러한 요소의 글꼴, 크기, 색상 및 강조 선택은 ''표현적''입니다.

CSS 이전에는 모든 `h2` 머리글에 타이포그래피 특성을 할당하려는 문서 작성자는 해당 머리글 유형이 발생할 때마다 HTML 표현 마크업을 반복해야 했습니다. CSS를 사용하면 표현과 구조를 분리할 수 있습니다. CSS는 색상, 글꼴, 텍스트 정렬, 크기, 테두리, 간격, 레이아웃 등 다양한 타이포그래피 특성을 정의할 수 있으며, 화면 및 인쇄 보기에 대해 독립적으로 수행할 수 있습니다. 또한 CSS는 음성 텍스트 리더를 위한 읽기 속도 및 강조와 같은 비 시각적 스타일도 정의합니다. W3C는 이제 모든 표현 HTML 마크업의 사용을 더 이상 사용하지 않음으로 지정했습니다.[17]

CSS 이전의 HTML에서 빨간색 텍스트로 정의된 제목 요소는 다음과 같이 작성되었습니다.

```html

Chapter 1.



```

CSS를 사용하면 HTML 표현 속성 대신 스타일 속성을 사용하여 동일한 요소를 코딩할 수 있습니다.

```html

Chapter 1.



```

내부 스타일 요소 또는 외부 CSS 파일에 스타일 속성을 배치하면, CSS를 더욱 유용하게 사용할 수 있습니다. 예를 들어, 문서에 다음 스타일 요소가 포함되어 있다고 가정해 보겠습니다.

```html



```

문서의 모든 `h1` 요소는 명시적인 코드가 필요 없이 자동으로 빨간색이 됩니다. 작성자가 나중에 `h1` 요소를 파란색으로 변경하려는 경우, 스타일 요소를 다음과 같이 변경하여 수행할 수 있습니다.

```html



```

이는 문서를 일일이 살펴보면서 각 `h1` 요소의 색상을 변경하는 것보다 훨씬 간편합니다.

스타일은 외부 CSS 파일에 배치하고 다음과 유사한 구문을 사용하여 로드할 수도 있습니다.

```html



```

이렇게 하면 HTML 문서에서 스타일을 더욱 분리하여, 외부 CSS 파일을 편집하여 여러 문서의 스타일을 변경할 수 있습니다.

CSS는 다양한 매개변수에 따라 스타일을 조정하여 여러 표현 형식으로 콘텐츠를 게시하는 것을 용이하게 합니다. 이러한 매개변수에는 사용자 기본 설정 (테마 또는 글꼴 크기), 다양한 웹 브라우저와의 호환성, 콘텐츠를 보는 데 사용되는 장치 유형 (예: 데스크톱, 태블릿 또는 모바일 장치), 화면 해상도, 사용자의 지리적 위치 및 기타 여러 변수가 포함됩니다. 또한 CSS는 반응형 디자인을 가능하게 하여 콘텐츠가 다양한 화면 크기와 방향에 동적으로 적응하여 광범위한 환경에서 접근성과 사용자 경험을 향상시킵니다.

단 한 줄의 간단한 변경만으로, 동일한 페이지에 대해 다른 스타일 시트를 사용할 수 있습니다. 이는 접근성 측면에서 유리하며, 페이지나 사이트를 다양한 대상 장치에 맞게 조정할 수 있는 기능을 제공합니다.

5. 5. 접근성 향상

CSS를 사용하면 HTML 문서의 표현 속성을 스타일 시트로 분리하여 HTML 구조를 더 간단하게 만들고, 유지 보수를 쉽게 할 수 있다. 또한, 다양한 장치와 화면 크기에 맞게 반응형 웹 페이지를 디자인할 수 있어 접근성이 향상된다.[17]

CSS 이전에는 HTML의 표현 마크업을 반복해서 사용해야 했기 때문에 문서가 복잡해지고 유지 관리가 어려웠다. CSS를 사용하면 표현과 구조를 분리하여 이러한 문제를 해결할 수 있다. 예를 들어, CSS를 사용하면 글꼴, 크기, 색상, 강조와 같은 타이포그래피 특성을 정의할 수 있으며, 음성 텍스트 리더를 위한 읽기 속도 및 강조와 같은 비 시각적 스타일도 정의할 수 있다. W3C는 모든 표현 HTML 마크업의 사용을 더 이상 사용하지 않음으로 지정했다.[17]

다음은 CSS를 사용하여 제목 요소의 색상을 빨간색으로 지정하는 예시이다.

```html

Chapter 1.



```

스타일 속성을 내부 스타일 요소나 외부 CSS 파일에 배치하면 CSS의 강력함을 더욱 잘 활용할 수 있다. 예를 들어, 문서에 다음과 같은 스타일 요소를 포함하면 문서의 모든 `

` 요소가 자동으로 빨간색이 된다.

```html



```

나중에 `

` 요소의 색상을 변경하려면 스타일 요소만 수정하면 되므로, 문서를 일일이 수정하는 것보다 훨씬 간편하다.

CSS는 다양한 매개변수에 따라 스타일을 조정하여 여러 표현 형식으로 콘텐츠를 게시하는 것을 용이하게 한다. 이러한 매개변수에는 사용자 기본 설정, 웹 브라우저, 장치 유형, 화면 해상도, 사용자의 지리적 위치 등이 포함된다. 또한 CSS는 반응형 디자인을 가능하게 하여 콘텐츠가 다양한 화면 크기와 방향에 동적으로 적응하도록 돕는다.

CSS가 없으면 웹 디자이너는 시각 장애가 있는 사용자의 접근성을 방해하는 HTML 테이블과 같은 기술로 페이지를 레이아웃해야 했다. 하지만 CSS를 사용하면 이러한 문제 없이 웹 페이지 레이아웃을 구성할 수 있다.

6. 브라우저 지원

Microsoft인터넷 익스플로러 3[25]이 1996년에 출시되었으며, CSS에 대한 제한적인 지원을 제공했다. IE 4넷스케이프 4.x는 더 많은 지원을 추가했지만, 일반적으로 불완전했고 CSS를 유용하게 사용할 수 없게 만드는 많은 소프트웨어 버그가 있었다. 2000년 3월, Apple 매킨토시용 인터넷 익스플로러 5.0은 CSS 1을 99% 이상 지원하는 최초의 브라우저였으며,[35] 다른 브라우저들도 곧 뒤따랐고, 그들 중 많은 브라우저들이 CSS 2의 일부를 추가로 구현했다.

그러나 "버전 5" 웹 브라우저들이 CSS를 상당히 완벽하게 구현하기 시작했을 때에도 특정 영역에서는 여전히 오류가 있었다. Microsoft 인터넷 익스플로러 5. x for Windows는 CSS 표준과 비교했을 때 CSS 박스 모델을 제대로 구현하지 못했다. 이러한 불일치와 기능 지원의 차이로 인해 디자이너들은 CSS 해킹 및 필터라고 불리는 우회 방법을 사용하지 않고는 브라우저와 컴퓨팅 플랫폼에서 일관된 모양을 얻는 것이 어려웠다.

개별 브라우저 벤더들은 표준화 및 보편화에 앞서 때때로 새로운 매개변수를 도입했다. 미래의 구현에 간섭하는 것을 방지하기 위해 벤더들은 매개변수 앞에 고유한 이름을 붙였다. 예를 들어, 모질라 파이어폭스에는 `-moz-`, 애플 사파리의 브라우징 엔진에서 이름을 딴 `-webkit-`, 오페라 브라우저에는 `-o-`, 마이크로소프트 인터넷 익스플로러와 EdgeHTML을 사용하는 초기 버전의 마이크로소프트 엣지에는 `-ms-`를 사용했다.

웹 브라우저는 웹 페이지를 렌더링하기 위해 각기 다른 레이아웃 엔진을 사용하며, CSS 기능에 대한 지원은 브라우저마다 일관되지 않는다. CSS의 새로운 기능 도입은 주요 브라우저의 지원 부족으로 인해 방해받을 수 있다. 예를 들어, 인터넷 익스플로러는 많은 CSS 3 기능을 추가하는 데 시간이 걸렸고, 이는 해당 기능의 채택을 늦추고 개발자들 사이에서 브라우저의 평판을 손상시켰다. 사용자에게 일관된 경험을 제공하기 위해, 웹 개발자는 여러 운영 체제, 브라우저 및 브라우저 버전을 대상으로 사이트를 테스트하는 경우가 많으며, 이는 개발 시간과 복잡성을 증가시킨다.

BrowserStack과 같은 도구는 이러한 환경을 유지 관리하는 복잡성을 줄이기 위해 구축되었다. 이러한 테스트 도구 외에도, 많은 사이트에서는 [https://caniuse.com/ CanIUse] 및 MDN Web Docs를 포함하여 특정 CSS 속성에 대한 브라우저 지원 목록을 유지 관리한다. CSS 3은 `@supports` 지시문을 제공하는 기능 쿼리를 정의하며, 이를 통해 개발자는 특정 기능에 대한 지원을 직접 CSS 내에서 브라우저를 대상으로 지정할 수 있다.[66]

7. 제한 사항

CSS의 현재 기능에는 몇 가지 주목할 만한 제한 사항이 있다.


  • 명시적인 스코프(범위) 선언 불가: `z-index`와 같은 속성의 스코핑 규칙은 `position: absolute` 또는 `position: relative` 속성을 가진 가장 가까운 상위 요소를 찾는다. 이러한 방식은 원치 않는 결과를 초래할 수 있다. 예를 들어, 요소의 위치를 조정해야 할 때 새로운 범위를 명시적으로 선언하는 것은 불가능하며, 이는 상위 요소의 원하는 범위를 사용하는 것을 방해한다.
  • 의사 클래스의 동적 동작 제어 불가: CSS는 `:hover`와 같이 사용자의 피드백에 따라 조건부로 스타일을 적용하는 의사 클래스를 구현한다. `:hover`는 동적이며(자바스크립트의 "onmouseover"와 동일) 오용될 가능성이 있다(예: 커서 근접 팝업 구현).[68] 그러나 CSS는 클라이언트가 이를 비활성화하거나("disable"과 같은 속성) 그 영향을 제한할 수 있는 기능(각 속성에 대한 "nochange"와 같은 값)이 없다.
  • 규칙 이름 지정 불가: CSS 규칙에는 이름을 지정할 수 없다. 이는 클라이언트 측 스크립트에서 선택자가 변경되더라도 해당 규칙을 참조할 수 있게 해준다.
  • 규칙 간 스타일 포함 불가: CSS 스타일은 원하는 효과를 얻기 위해 여러 규칙에 걸쳐 중복되어야 하는 경우가 많아 유지 관리가 더 많이 필요하고 더욱 철저한 테스트를 요구한다. 이를 해결하기 위해 몇 가지 새로운 CSS 기능이 제안되었지만 이후 폐기되었다.[69][70] 대신, 작성자는 Sass, Less, 또는 Stylus와 같이 CSS로 컴파일되는 더 정교한 스타일시트 언어를 사용하여 이 기능을 얻을 수 있다.
  • 마크업 변경 없이 특정 텍스트 타겟팅 불가: ::first-letter 가상 요소 외에는, 마크업을 변경하지 않고 특정 텍스트 범위를 지정할 수 없다.

7. 1. 명시적인 스코프 선언 불가

`z-index`와 같은 속성의 스코핑 규칙은 `position: absolute` 또는 `position: relative` 속성을 가진 가장 가까운 상위 요소를 찾는다. 이러한 방식은 원치 않는 결과를 초래할 수 있다. 예를 들어, 요소의 위치를 조정해야 할 경우 새로운 범위를 명시적으로 선언하는 것은 불가능하며, 이는 상위 요소의 원하는 범위를 사용하는 것을 방해한다.

7. 2. 의사 클래스의 동적 동작 제어 불가

CSS는 대체 스타일의 조건부 적용을 통해 어느 정도의 사용자 피드백을 허용하는 의사 클래스를 구현한다. 하나의 CSS 의사 클래스인 `:hover`는 동적이며(자바스크립트의 "onmouseover"와 동일) 오용의 가능성이 있다(예: 커서 근접 팝업 구현).[68] 그러나 CSS는 클라이언트가 이를 비활성화할 수 있는 기능("disable"과 같은 속성)이나 그 영향을 제한할 수 있는 기능(각 속성에 대한 "nochange"와 같은 값)이 없다.

7. 3. 규칙 이름 지정 불가

CSS 규칙에는 이름을 지정할 수 없다. 이는 클라이언트 측 스크립트에서 선택자가 변경되더라도 해당 규칙을 참조할 수 있게 해준다.

7. 4. 규칙 간 스타일 포함 불가

CSS 스타일은 원하는 효과를 얻기 위해 여러 규칙에 걸쳐 중복되어야 하는 경우가 많아 유지 관리가 더 많이 필요하고 더욱 철저한 테스트를 요구한다. 이를 해결하기 위해 몇 가지 새로운 CSS 기능이 제안되었지만 이후 폐기되었다.[69][70] 대신, 작성자는 Sass, Less, 또는 Stylus와 같이 CSS로 컴파일되는 더 정교한 스타일시트 언어를 사용하여 이 기능을 얻을 수 있다.

7. 5. 마크업 변경 없이 특정 텍스트 타겟팅 불가

::first-letter 가상 요소 외에는, 마크업을 변경하지 않고 특정 텍스트 범위를 지정할 수 없다.

8. 표준화

W3C은 CSS 표준을 제정하고 관리하며, 웹 개발자들이 표준에 맞는 CSS를 사용할 수 있도록 권장한다.

8. 1. CSS 프레임워크

CSS 프레임워크는 CSS를 사용하여 웹 페이지의 스타일을 더 쉽고 표준에 맞게 지정할 수 있도록 만들어진 라이브러리이다. 블루프린트, 부트스트랩, 파운데이션 등이 대표적인 CSS 프레임워크이다. 프로그래밍 및 스크립팅 언어 라이브러리와 마찬가지로, CSS 프레임워크는 일반적으로 HTML head|헤드영어에서 참조되는 외부 .css 시트로 통합되어 웹 페이지 디자인과 레이아웃을 위한 여러 옵션을 제공한다. 많은 CSS 프레임워크가 있지만, 일부 개발자들은 빠른 프로토타입 제작이나 학습 목적으로만 사용하고, 실제 사이트에는 디자인, 유지 관리 및 다운로드 오버헤드를 고려하여 각 사이트에 맞는 CSS를 직접 제작하는 것을 선호한다.[71]

8. 1. 1. Blueprint

블루프린트는 CSS 프레임워크의 일종으로, 웹 개발을 더욱 쉽고 빠르게 만드는 것을 목표로 한다. 이 프레임워크는 CSS와 자바스크립트 파일 모음으로 구성되어 있으며, 웹사이트의 레이아웃, 타이포그래피, 그리고 기타 시각적 요소를 제어하는 데 사용된다. 블루프린트는 그리드 시스템, 기본 스타일, 유틸리티 클래스를 제공하여 개발자가 일관성 있고 접근성이 뛰어난 웹사이트를 쉽게 만들 수 있도록 돕는다.[71]

8. 1. 2. Bootstrap

부트스트랩은 CSS 프레임워크 중 하나로, 웹 페이지 디자인과 레이아웃을 위한 다양한 기능을 제공한다.[71]

8. 1. 3. Foundation

파운데이션은 CSS 프레임워크 중 하나이다.[71]

8. 2. 디자인 방법론

프로젝트에서 사용되는 CSS 리소스의 크기가 증가함에 따라 개발팀은 종종 CSS를 체계적으로 관리하기 위한 공통된 디자인 방법론을 결정해야 한다. 목표는 개발 용이성, 개발 중 협업 용이성 및 브라우저에서 배포된 스타일시트의 성능이다. 인기 있는 방법론으로는 OOCSS(객체 지향 CSS), ACSS(원자적 CSS), CSS(유기적 캐스케이드 스타일 시트), SMACSS(확장 가능하고 모듈형 CSS 아키텍처) 및 BEM(블록, 요소, 수정자) 등이 있다.[71]

참조

[1] 웹사이트 W3C HTML5 Logo https://www.w3.org/h[...] 2024-11-20
[2] 웹사이트 CSS developer guide https://developer.mo[...] 2015-09-24
[3] 서적 JavaScript: the definitive guide https://www.worldcat[...] O'Reilly 2011-04-18
[4] 웹사이트 What is CSS? https://www.w3.org/s[...] World Wide Web Consortium 2010-12-01
[5] 뉴스 Web-based Mobile Apps of the Future Using HTML 5, CSS and JavaScript https://www.htmlgood[...] HTMLGoodies 2010-07-23
[6] 웹사이트 W3C CSS validation service https://jigsaw.w3.or[...] 2012-06-30
[7] 웹사이트 W3C CSS2.1 specification for pseudo-elements and pseudo-classes https://www.w3.org/T[...] World Wide Web Consortium 2012-04-30
[8] 웹사이트 Selectors https://www.w3.org/T[...] W3C
[9] 웹사이트 Selectors Level 3 https://www.w3.org/T[...] W3C 2014-05-30
[10] 웹사이트 CSS Syntax Module Level 3 https://www.w3.org/T[...] 2023-10-01
[11] 웹사이트 W3C CSS2.1 specification for rule sets, declaration blocks, and selectors https://www.w3.org/T[...] World Wide Web Consortium 2009-06-20
[12] 웹사이트 Full property table https://www.w3.org/T[...] W3C 2014-05-30
[13] 웹사이트 Index of CSS properties https://www.w3.org/S[...] 2020-08-09
[14] 웹사이트 CSS Color https://developer.mo[...] MDN Web Docs 2024-04-05
[15] 웹사이트 6.1 Length units https://www.w3.org/T[...] 2019-06-20
[16] 웹사이트 5. Distance Units: the <length> type https://www.w3.org/T[...] 2019-06-20
[17] 웹사이트 HTML 5. A vocabulary and associated APIs for HTML and XHTML https://www.w3.org/T[...] World Wide Web Consortium 2014-06-28
[18] 서적 Cascading Style Sheets: The Definitive Guide https://shop.oreilly[...] O'Reilly Media, Inc. 2014-02-16
[19] 웹사이트 Assigning property values, Cascading, and Inheritance https://www.w3.org/T[...] 2014-06-10
[20] 웹사이트 Can a CSS class inherit one or more other classes? https://stackoverflo[...] 2017-09-10
[21] 뉴스 Shorthand properties https://developer.mo[...] Mozilla Developers 2018-01-30
[22] 웹사이트 9.3 Positioning schemes https://www.w3.org/T[...] W3C 2011-02-16
[23] 서적 Spring into HTML and CSS Pearson Education, Inc
[24] 웹사이트 Cascading HTML style sheets – a proposal https://www.w3.org/P[...] CERN 2014-05-25
[25] 서적 Cascading Style Sheets, designing for the Web https://archive.org/[...] Addison Wesley 2010-06-23
[26] 웹사이트 Cascading Style Sheets, level 1 https://www.w3.org/T[...] World Wide Web Consortium 2014-03-07
[27] 웹사이트 Simple style sheets for SGML & HTML on the web https://www.w3.org/P[...] World Wide Web Consortium 1995-04-14
[28] 웹사이트 Cascading Style Sheets https://people.opera[...] University of Oslo 2014-09-03
[29] 웹사이트 Interview Robert Cailliau on the WWW Proposal: "How It Really Happened." https://www.computer[...] Institute of Electrical and Electronics Engineers 1997-11
[30] 웹사이트 Stream-based Style sheet Proposal https://www.w3.org/P[...] 1995-03-31
[31] 웹사이트 Libwww Hackers https://www.w3.org/L[...] World Wide Web Consortium 2002-06-07
[32] 웹사이트 Yves Lafon https://www.w3.org/P[...] World Wide Web Consortium 2010-06-17
[33] 웹사이트 The W3C Team: Technology and Society https://www.w3.org/P[...] World Wide Web Consortium 2008-07-18
[34] 웹사이트 JavaScript-Based Style Sheets https://www.w3.org/S[...] W3C 1996-08-22
[35] 웹사이트 CSS software https://www.w3.org/S[...] W3C 2011-01-15
[36] 웹사이트 CSS 2.1 – Anne's Weblog https://annevankeste[...] 2011-02-16
[37] 웹사이트 Archive of W3C News in 2007 https://www.w3.org/N[...] World Wide Web Consortium 2011-02-16
[38] 웹사이트 Incorrect MIME Type for CSS Files https://web.archive.[...] Mozilla 2002-03-18
[39] 웹사이트 File Types https://donsnotes.co[...] 2009-11-27
[40] 웹사이트 css file extension details https://web.archive.[...] File extension database 2010-03-12
[41] 웹사이트 What Are CSS Vendor or Browser Prefixes? https://www.lifewire[...] 2019-11-12
[42] 웹사이트 Compatibility Standard https://compat.spec.[...] 2024-01-24
[43] 웹사이트 CSS Snapshot 2023 – 2.4. CSS Levels https://www.w3.org/T[...] 2023-12-07
[44] 서적 Cascading style sheets: designing for the Web https://archive.org/[...] Addison Wesley Longman 1997
[45] 웹사이트 Cascading Style Sheets, level 1 https://www.w3.org/T[...] W3C
[46] 웹사이트 Cascading Style Sheets level 1 specification https://www.w3.org/T[...] W3C
[47] 웹사이트 Aural style sheets https://www.w3.org/T[...] W3C 2014-10-26
[48] 웹사이트 Cascading Style Sheets, level 2 https://www.w3.org/T[...] W3C
[49] 웹사이트 Cascading Style Sheets, level 2 revision 1 https://www.w3.org/T[...] W3C
[50] 웹사이트 Cascading Style Sheets Standard Boasts Unprecedented Interoperability https://www.w3.org/2[...] W3C
[51] 웹사이트 Descriptions of all CSS specifications https://www.w3.org/S[...] World Wide Web Consortium 2011-03-03
[52] 웹사이트 CSS current work https://www.w3.org/S[...] World Wide Web Consortium 2011-03-03
[53] 웹사이트 Cascading Style Sheets (CSS) Snapshot 2010 https://www.w3.org/T[...] World Wide Web Consortium 2011-03-03
[54] 웹사이트 All CSS specifications https://www.w3.org/S[...] W3C 2014-05-30
[55] 웹사이트 A Word About CSS4 https://www.xanthir.[...] 2012-10-18
[56] 웹사이트 CSS Flexible Box Layout Module Level 1 https://www.w3.org/T[...] W3C 2012-10-18
[57] 웹사이트 Cascading Style Sheets (CSS) Snapshot 2007 https://www.w3.org/T[...] 2016-07-18
[58] 웹사이트 Cascading Style Sheets (CSS) Snapshot 2010 https://www.w3.org/T[...] 2011-03-03
[59] 웹사이트 CSS Snapshot 2015 https://www.w3.org/T[...] 2017-02-13
[60] 웹사이트 CSS Snapshot 2017 https://www.w3.org/T[...] 2017-02-13
[61] 웹사이트 CSS Snapshot 2018 https://www.w3.org/T[...] 2019-01-02
[62] 웹사이트 CSS https://caniuse.com/[...] 2019-01-26
[63] 웹사이트 CSS https://developer.mo[...] 2023-07-21
[64] 웹사이트 Call for Participation in CSS4 Community Group https://www.w3.org/c[...] 2020-02-27
[65] 뉴스 CSS3 Solutions for Internet Explorer https://www.smashing[...] 2016-10-12
[66] 웹사이트 Using Feature Queries in CSS https://hacks.mozill[...] 2016-10-12
[67] 뉴스 Looking at the Web with Internet Explorer 6, one last time https://arstechnica.[...] 2016-10-12
[68] 웹사이트 Pure CSS Popups https://web.archive.[...] meyerweb.com 2009-11-19
[69] 웹사이트 CSS apply rule https://web.archive.[...] GitHub 2016-02-27
[70] 웹사이트 Why I Abandoned @apply — Tab Completion https://www.xanthir.[...]
[71] 서적 Handcrafted CSS: More Bulletproof Web Design https://books.google[...] New Riders 2010-06-19
[72] 웹사이트 OOCSS, ACSS, BEM, SMACSS: what are they? What should I use? https://clubmate.fi/[...] Hiljá 2015-06-02
[73] 문서
[74] 문서 Inheritance propagates property values from parent elements to their children. https://www.w3.org/T[...] W3C CSSWG 2022
[75] 문서 en:Internet Explorer box model bug
[76] 간행물 CSS Snapshot 2023 2023-02-14
[77] 웹사이트 All CSS specifications https://www.w3.org/S[...] W3C 2023-09-06
[78] 문서 CSS Snapshot 2023 ... This document collects together into one definition all the specs that together form the current state of Cascading Style Sheets (CSS) as of 2023. https://www.w3.org/T[...] CSSWG 2023
[79] 웹인용 CSS developer guide https://developer.mo[...] 2015-09-24
[80] 문서 HTML의 index.html과 같은 것
[81] 저널 Cascading HTML style sheets - a proposal http://www.w3.org/Pe[...] CERN 1994-10-10
[82] 문서 CSS: under construction http://www.w3.org/St[...] W3C
[83] 문서 Introduction to CSS3, W3C Working Draft, 23 May 2001 http://www.w3.org/TR[...]
[84] 웹인용 A Word About CSS4 http://www.xanthir.c[...] 2012-10-18
[85] 웹인용 W3C CSS Selectors Level 4 http://www.w3.org/TR[...] W3.org 2014-05-30
[86] 웹인용 W3C CSS2.1 specification for rule sets, declaration blocks, and selectors http://www.w3.org/TR[...] World Wide Web Consortium 2009-06-20
[87] 문서 예: {{code|lang=css|code=margin: 30px !important;}}



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com