렌더 트리

Render tree

DOM과 스타일을 합쳐 실제로 그릴 노드만 남깁니다.

···
html
<div class="v"><header>DOM + STYLE → RENDER <span id="state">filtering</span></header><div class="stage filter"><div class="input"><span>A</span><span id="hidden">B<br>display:none</span><span>C</span></div><div class="arrow">→</div><div class="output"><span>A</span><span>C</span></div></div><div class="muted">B has no layout box</div></div>
css
.v{width:min(94vw,760px);height:min(88vh,320px);padding:clamp(9px,2.4vmin,18px);border:1px solid var(--line);border-radius:12px;background:var(--surface);font:500 clamp(12px,2.4vmin,16px)/1.3 var(--font-sans,system-ui,sans-serif);display:flex;flex-direction:column;gap:clamp(5px,1.4vmin,10px);overflow:hidden}.v header{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--accent);font-weight:700}.v header span{color:var(--muted);font-weight:500}.v .stage{flex:1;min-height:0;position:relative}.v .muted{color:var(--muted)}.v .active{background:color-mix(in srgb,var(--accent) 18%,var(--surface));border-color:var(--accent)!important;color:var(--fg)}.v button{font:inherit;color:var(--fg);background:var(--bg);border:1px solid var(--line);border-radius:7px;padding:5px 8px;cursor:pointer}.filter{display:flex;align-items:center;justify-content:space-around;gap:10px}.input,.output{display:flex;gap:6px;align-items:center}.input span,.output span{border:1px solid var(--line);border-radius:7px;padding:10px;background:var(--bg);min-width:32px;text-align:center}.input #hidden{font-size:12px;transition:opacity .4s,transform .4s}.input #hidden.off{opacity:.22;transform:scale(.82);text-decoration:line-through}.output{border:1px dashed var(--accent);border-radius:8px;padding:6px}.arrow{color:var(--accent);font-size:22px}@media(max-width:420px){.filter{gap:4px}.input span,.output span{padding:5px;min-width:26px}}
js
let off=false;function tick(){off=!off;document.getElementById("hidden").classList.toggle("off",off);document.getElementById("state").textContent=off?"B removed":"DOM input"}tick();setInterval(tick,1000)

렌더 트리는 문서 구조에 계산된 스타일을 적용해 표시할 대상을 정합니다. `display: none`인 요소는 레이아웃 박스를 만들지 않아 그리는 흐름에서 빠집니다.

데모는 세 DOM 노드 중 숨김 규칙이 적용된 노드를 걸러 결과를 만듭니다. 보이지 않는 방식마다 처리 결과가 다르므로 `visibility: hidden`과 혼동하지 않아야 합니다.

언제 쓰나

숨긴 요소가 공간을 차지하는지, 레이아웃에 참여하는지 판단할 때 씁니다.

페이지로 열기 ↗