컨테이너 스타일 쿼리

Container style queries

부모의 CSS 사용자 정의 속성 값에 따라 자식 스타일을 바꿉니다.

···
html
<div class="v"><header>STYLE QUERY <span id="mode">--mode: day</span></header><div class="stage cq"><div class="container" id="container"><div class="card">child card<br><b id="word">Day</b></div></div></div><div class="muted">parent state → child style</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}.cq{display:grid;place-items:center}.container{--mode:day;container-name:theme;container-type:normal;width:70%;height:80%;padding:8px;border:2px dashed var(--accent);border-radius:9px;display:grid;place-items:center}.container .card{width:75%;height:75%;border-radius:8px;display:grid;place-items:center;text-align:center;background:#f4d999;color:#3d2e18;transition:background .4s,color .4s}.container.night .card{background:#263f61;color:#fff}@container theme style(--mode: night){.card{background:#263f61;color:white}}
js
let night=false;function tick(){night=!night;const c=document.getElementById("container");c.style.setProperty("--mode",night?"night":"day");c.classList.toggle("night",night);document.getElementById("mode").textContent="--mode: "+(night?"night":"day");document.getElementById("word").textContent=night?"Night":"Day"}tick();setInterval(tick,1100)

컨테이너 스타일 쿼리는 조상 컨테이너의 사용자 정의 속성을 검사해 조건부 스타일을 적용합니다. 크기 쿼리가 공간에 반응한다면 스타일 쿼리는 테마나 상태 값에 반응합니다.

데모는 부모의 `--mode` 값이 바뀔 때 자식 카드가 낮·밤 스타일로 전환됩니다. 브라우저별 지원 범위와 상속되는 속성의 위치를 확인해야 합니다.

언제 쓰나

컴포넌트가 상위 테마나 상태에 맞춰 스스로 스타일을 바꿔야 할 때 씁니다.

페이지로 열기 ↗