"상속은 조용한 기본값. 너의 스타일링 절반이 이거 덕에 '그냥 됐다'; 나머지 절반은 어느 게 그런지 몰라서 깨졌다."
Property 마다 다른 규칙
모든 CSS property 가 스펙에 한 줄 가짐: Inherited: yes 또는 Inherited: no. 부모가 값 있고 자식이 그걸 설정하는 규칙 없을 때:
- 상속되면: 자식이 부모 값 받음.
- 상속 안 되면: 자식이 property 의 초기 (기본) 값 사용.
전체 리스트 외울 필요는 없어 — 하지만 카테고리는 내면화해야 해.
기본적으로 상속되는 것
타이포그래피와 텍스트 관련 property 가 상속. 인지 모델: <body> 에 font-family 설정하면 안의 모든 단락, heading, 리스트 항목, 링크, span 으로 cascade — 규칙 50 개 안 쓰고.
color,font(그리고 모든 longhand:font-family,font-size,font-weight등)line-height,letter-spacing,word-spacing,text-align,text-indent,text-transform,text-shadowvisibility(응 — 부모에 visibility 설정하면 자식도 숨김)cursor,quotes,list-style(리스트 bullet 이 중첩 리스트로 cascade)- Custom property (CSS 변수) —
:root의--brand-color: blue;가 어디서나 보임 - RTL/LTR 관련:
direction
상속 안 되는 것
Layout, 박스, 배경, 위치 property 는 상속 안 함. 모델: 모든 자식이 부모 margin, border, 배경을 상속하길 원하지 않아.
margin,padding,borderwidth,height,min-width,max-width,min-height,max-heightdisplay,position,top/right/bottom/leftbackground(그리고 모든 longhand)flex,grid, 모든 layout propertytransform,opacity,z-indexoverflow(참고:cursor와 헷갈리지 마, cursor 는 상속됨)
폼 element 예외
폼 element (<input>, <textarea>, <select>, <button>) 가 역사적으로 <body> 의 상속 override 하는 UA 제공 글꼴 가져. 너의 아름답게 테마된 텍스트가 기본적으로 폼 input 에 적용 안 되는 이유. Fix:
네 가지 universal 값: inherit, initial, unset, revert
모든 CSS property 가 이 네 키워드 (+ revert-layer) 받음:
inherit— 부모에서 강제로 상속. 기본적으로 상속 안 하는 property 에 유용 ("이 padding 이 부모 padding 과 매치되길 원해").initial— CSS 스펙에 정의된 property 의 초기값으로 리셋. 브라우저 UA 스타일시트 값이 아니라 스펙의 초기값. (display의 초기값은 UA 가 element 에 준 거 말고inline.)unset— property 가 기본적으로 상속하면inherit처럼; 아니면initial처럼. Reset 에 유용.revert— author 규칙이 없었을 때 property 가 가질 값으로 되돌리기 (즉, UA 기본으로, 또는 user 스타일시트 있으면 그것으로).revert-layer— 이전 cascade layer 의 값으로 되돌리기.
all: revert. 선언 하나, 모든 property 가 UA 기본으로 복원. 무겁게 테마된 사이트 안에서 기본 스타일로 렌더해야 하는 서드파티 콘텐츠 (iframe-substitute, 에디터 미리보기) 임베딩 때.Custom Property (CSS 변수) 는 상속, 그게 초능력
이게 2026 년에 CSS 쓰는 방식 바꾸는 거:
Custom property (--brand-color, --gap, --radius) 가 텍스트 property 처럼 DOM 통해 상속. :root 에 한 번 정의하면 어디서나 보여. 섹션에 다시 선언하면 그 섹션의 subtree 가 새 값 봐. 이게 모던 CSS 에서 dark mode 토글 작동 방식 — <html> 의 data-theme="dark" 가 변수 재정의, 모든 자손이 상속으로 새 값 받음, 추가 규칙 필요 없음.
상속이 너를 무는 자리
클래식 혼란 셋:
- "왜 내 자식 element 가 파랗지?" — ancestor 에
color설정하고 상속하는 거 잊음. - "왜 내 폼 input 이 내 글꼴 안 써?" — 폼 element 가 상속된 글꼴을 UA 기본으로 override;
input, button, select, textarea { font: inherit; }더해. - "왜 reset 후에 링크 색이 바뀌었지?" — 부모에
color설정했고 링크가 상속해서 브라우저 기본 링크 파랑 override.
피파의 노트
:root 가 --bg, --fg, --accent 등 선언. [data-theme="dark"] 가 재정의. 모든 component 가 color: var(--fg), background: var(--bg) 읽음 — theme-aware 로직 어디에도 없음. 테마 전환은 attribute 변경 하나, 나머지는 상속이 처리. Cwk-site 의 quest 색도 같은 방식으로 작동: 각 quest 의 meta.json 팔레트가 quest 페이지 wrapper 의 custom property 가 되고, 안의 component 가 자동 상속.