브라우저 업데이트가 뜸한 사이, CSS 커뮤니티는 여전히 뜨거웠다
최근 몇 주간 안정화된 브라우저 업데이트는 많지 않았지만, CSS 세계에서는 정말 흥미로운 일들이 많이 일어났습니다. 1996년 게임 Quake를 CSS로 포팅한 CSS Quake, flexbox/grid의 gap 공간을 스타일링하는 gap decorations, 아직 대부분의 브라우저에서 지원되지 않는 random() 함수를 활용한 다양한 실험들까지.
이번 글에서는 CSS-Tricks의 'What's Important #14'에서 소개된 내용을 바탕으로, 최신 CSS 트렌드와 웹 플랫폼 소식을 한국 개발자 관점에서 정리해 보겠습니다. 근거자료를 참고하면 더 자세한 내용을 확인할 수 있어요.
CSS Quake: 1996년 게임이 CSS로 부활하다
PolyCSS와 Layoutit이 만든 CSS Quake는 획기적인 프로젝트입니다. JavaScript 없이 CSS만으로 Quake의 핵심 요소를 재현했는데, 최근 공개된 CSS DOOM과 함께 CSS의 한계를 시험하는 대표적인 사례로 꼽히고 있습니다.
/* CSS Quake의 핵심 아이디어: CSS 변수와 calc()로 3D 공간 구현 */
:root {
--player-x: 0;
--player-y: 0;
--player-angle: 0;
}
.world {
transform:
translate3d(calc(-1 * var(--player-x)), calc(-1 * var(--player-y)), 0)
rotate(var(--player-angle));
}
/* 벽면 렌더링은 CSS 그라디언트와 필터로 처리 */
.wall {
background: linear-gradient(
to right,
#4a4a4a 0%,
#6b6b6b 50%,
#3a3a3a 100%
);
filter: drop-shadow(0 0 5px rgba(0,0,0,0.5));
}
이 프로젝트는 CSS가 단순한 스타일링을 넘어 로직과 게임 엔진의 역할까지 할 수 있음을 보여줍니다. 다만, 실제 프로젝트에서 이렇게까지 CSS를 활용하는 것은 성능과 유지보수 측면에서 비현실적이므로, 기술적 호기심과 한계 탐구의 관점에서 접근하는 것이 좋습니다.
gap decorations: flexbox/grid의 빈 공간을 디자인하다
Temani Afif가 소개한 gap decorations는 flexbox, grid, multi-column 레이아웃에서 gap으로 생기는 공간을 스타일링하는 방법입니다. 기존에는 빈 공간으로 남아 있던 영역을 활용할 수 있게 되면서, 디자인의 자유도가 크게 높아졌습니다.
/* gap 영역에 배경색과 테두리를 적용하는 예시 */
.container {
display: flex;
gap: 20px;
background: linear-gradient(90deg, #ff6b6b, #ffd93d);
}
.item {
flex: 1;
background: white;
border-radius: 8px;
}
/* gap 영역을 강조하려면 배경을 활용 */
.container {
background-image: repeating-linear-gradient(
90deg,
transparent 0 20px,
rgba(0,0,0,0.1) 20px 40px
);
}
주의할 점은 gap 자체는 여전히 콘텐츠 영역이 아니므로, 접근성이나 터치 타겟 크기에 영향을 줄 수 있다는 것입니다. 또한, gap에 직접 background를 지정하는 것은 아직 표준이 아니므로, 위처럼 컨테이너 배경을 활용하는 방식이 더 안정적입니다.
random() 함수: 아직은 실험적이지만 가능성은 무한
Polypane은 CSS random() 함수를 활용한 다양한 실험을 공개했습니다. 보케 효과, 떨어지는 꽃잎, 폴라로이드 사진 더미, 시, 애니메이션 오로라 등 창의적인 예제들이 쏟아져 나왔습니다.
/* random() 함수로 요소의 위치를 무작위로 지정 */
.petal {
position: absolute;
left: random(0%, 100%);
top: random(0%, 100%);
animation: fall 3s linear infinite;
}
@keyframes fall {
to {
transform: translateY(100vh) rotate(360deg);
}
}
하지만 random()은 아직 Safari에서만 지원되고, 다른 브라우저에서는 사용할 수 없습니다. 따라서 실제 프로덕션에서 사용하기보다는, 프로토타입이나 디자인 탐구에 적합한 기능입니다.
모던 CSS 테마링: @property, light-dark(), contrast-color()의 조합
Una Kravets가 최근 발표한 글에서 모던 CSS 테마링의 표준을 설명했습니다. @property, light-dark(), contrast-color(), @container style() 등이 모두 Baseline으로 채택되면서, 이제 이 기능들을 함께 사용해 일관된 테마 시스템을 구축할 수 있게 되었습니다.
/* @property로 커스텀 속성의 타입과 초기값을 정의 */
@property --theme-color {
syntax: '<color>';
inherits: true;
initial-value: #3498db;
}
/* light-dark()로 다크 모드 대응 */
body {
background: light-dark(white, #1a1a1a);
color: light-dark(black, #f0f0f0);
}
/* contrast-color()로 텍스트 색상 자동 조정 */
.button {
background: var(--theme-color);
color: contrast-color(var(--theme-color));
}
이 기법들은 특히 한국 웹 서비스의 다크 모드 지원에 큰 도움이 됩니다. 다만, contrast-color()는 아직 브라우저 지원이 제한적이므로, 폴리필이나 점진적 향상을 고려해야 합니다.
웹 엔진 해크페스트: 브라우저 개발자들의 현장 이야기
Web Engines Hackfest가 갈리시아의 A Coruña에서 열렸습니다. Marina Aísa가 현장에서 공유한 내용에 따르면, 이 행사는 웹 엔진과 표준의 미래에 대한 논의뿐 아니라, 접근성 개선을 위한 브라우저의 역할까지 다루는 자리였습니다.
특히 흥미로운 점은 플랫폼별로 웹사이트가 동일하게 동작할 필요가 없다는 Bramus의 주장입니다. 입력 방식, 보조 기술 지원 등이 다르기 때문에, 반응형 디자인을 넘어 플랫폼별 최적화가 필요하다는 것입니다.
이와 관련해 interest invokers, overscroll actions, Document Picture-in-Picture API 등은 플랫폼에 따라 다른 동작을 보여주는 대표적인 기능들입니다.
한국 개발 생태계에서의 적용 맥락
한국에서는 아직 CSS만으로 게임을 만드는 시도가 많지 않지만, gap decorations이나 모던 테마링은 실무에서 바로 활용할 수 있는 유용한 기법입니다. 특히, 다크 모드 지원이 필수가 된 지금, light-dark()와 @property를 활용한 테마 시스템은 국내 서비스에서도 큰 가치를 발휘할 수 있습니다.
다만, 한국의 인터넷 환경은 여전히 구형 브라우저 사용 비중이 높은 편이므로, 새로운 CSS 기능을 도입할 때는 브라우저 지원 범위를 꼼꼼히 확인하고, 필요한 경우 폴리필이나 대체 스타일을 준비하는 것이 좋습니다.
이 기술의 한계 또는 주의사항
- gap decorations는 아직 표준화된 방법이 아니므로, 브라우저별 렌더링 차이가 있을 수 있습니다.
- random() 함수는 Safari 외 브라우저에서 지원되지 않아, 프로덕션 사용은 불가능합니다.
- 모던 테마링의
contrast-color()도 마찬가지로 지원 범위가 제한적입니다.
이러한 한계를 고려할 때, 점진적 향상(Progressive Enhancement) 전략으로 접근하는 것이 가장 안전합니다.
다음 단계 학습 방향
- 파이썬 타입 힌트 2025 현황 86%가 쓰지만, 여전히 고민은 있다에서 확인할 수 있듯이, 최신 개발 트렌드를 파악하는 것은 중요합니다.
@property와@container style()를 깊이 있게 학습해 보세요.random()함수의 브라우저 지원 현황을 주기적으로 체크해 보세요.
결론
최근 CSS 소식은 브라우저 업데이트가 뜸한 가운데도 커뮤니티의 창의성과 기술 발전이 계속되고 있음을 보여줍니다. CSS Quake 같은 실험은 CSS의 한계를 넓히고, gap decorations와 모던 테마링은 실무에 바로 적용할 수 있는 실용적인 기능입니다.
새로운 기능을 무작정 도입하기보다는, 브라우저 지원 범위와 프로젝트 요구사항을 고려해 선택적으로 적용하는 것이 중요합니다. 앞으로의 CSS 발전이 더 기대되네요!

CSS Quake: 1996년 게임이 CSS로 부활하다
PolyCSS와 Layoutit이 만든 CSS Quake는 획기적인 프로젝트입니다. JavaScript 없이 CSS만으로 Quake의 핵심 요소를 재현했는데, 최근 공개된 CSS DOOM과 함께 CSS의 한계를 시험하는 대표적인 사례로 꼽히고 있습니다.
/* CSS Quake의 핵심 아이디어: CSS 변수와 calc()로 3D 공간 구현 */
:root {
--player-x: 0;
--player-y: 0;
--player-angle: 0;
}
.world {
transform:
translate3d(calc(-1 * var(--player-x)), calc(-1 * var(--player-y)), 0)
rotate(var(--player-angle));
}
/* 벽면 렌더링은 CSS 그라디언트와 필터로 처리 */
.wall {
background: linear-gradient(
to right,
#4a4a4a 0%,
#6b6b6b 50%,
#3a3a3a 100%
);
filter: drop-shadow(0 0 5px rgba(0,0,0,0.5));
}
이 프로젝트는 CSS가 단순한 스타일링을 넘어 로직과 게임 엔진의 역할까지 할 수 있음을 보여줍니다. 다만, 실제 프로젝트에서 이렇게까지 CSS를 활용하는 것은 성능과 유지보수 측면에서 비현실적이므로, 기술적 호기심과 한계 탐구의 관점에서 접근하는 것이 좋습니다.
gap decorations: flexbox/grid의 빈 공간을 디자인하다
Temani Afif가 소개한 gap decorations는 flexbox, grid, multi-column 레이아웃에서 gap으로 생기는 공간을 스타일링하는 방법입니다. 기존에는 빈 공간으로 남아 있던 영역을 활용할 수 있게 되면서, 디자인의 자유도가 크게 높아졌습니다.
/* gap 영역에 배경색과 테두리를 적용하는 예시 */
.container {
display: flex;
gap: 20px;
background: linear-gradient(90deg, #ff6b6b, #ffd93d);
}
.item {
flex: 1;
background: white;
border-radius: 8px;
}
/* gap 영역을 강조하려면 배경을 활용 */
.container {
background-image: repeating-linear-gradient(
90deg,
transparent 0 20px,
rgba(0,0,0,0.1) 20px 40px
);
}
주의할 점은 gap 자체는 여전히 콘텐츠 영역이 아니므로, 접근성이나 터치 타겟 크기에 영향을 줄 수 있다는 것입니다. 또한, gap에 직접 background를 지정하는 것은 아직 표준이 아니므로, 위처럼 컨테이너 배경을 활용하는 방식이 더 안정적입니다.

random() 함수: 아직은 실험적이지만 가능성은 무한
Polypane은 CSS random() 함수를 활용한 다양한 실험을 공개했습니다. 보케 효과, 떨어지는 꽃잎, 폴라로이드 사진 더미, 시, 애니메이션 오로라 등 창의적인 예제들이 쏟아져 나왔습니다.
/* random() 함수로 요소의 위치를 무작위로 지정 */
.petal {
position: absolute;
left: random(0%, 100%);
top: random(0%, 100%);
animation: fall 3s linear infinite;
}
@keyframes fall {
to {
transform: translateY(100vh) rotate(360deg);
}
}
하지만 random()은 아직 Safari에서만 지원되고, 다른 브라우저에서는 사용할 수 없습니다. 따라서 실제 프로덕션에서 사용하기보다는, 프로토타입이나 디자인 탐구에 적합한 기능입니다.
모던 CSS 테마링: @property, light-dark(), contrast-color()의 조합
Una Kravets가 최근 발표한 글에서 모던 CSS 테마링의 표준을 설명했습니다. @property, light-dark(), contrast-color(), @container style() 등이 모두 Baseline으로 채택되면서, 이제 이 기능들을 함께 사용해 일관된 테마 시스템을 구축할 수 있게 되었습니다.
/* @property로 커스텀 속성의 타입과 초기값을 정의 */
@property --theme-color {
syntax: '<color>';
inherits: true;
initial-value: #3498db;
}
/* light-dark()로 다크 모드 대응 */
body {
background: light-dark(white, #1a1a1a);
color: light-dark(black, #f0f0f0);
}
/* contrast-color()로 텍스트 색상 자동 조정 */
.button {
background: var(--theme-color);
color: contrast-color(var(--theme-color));
}
이 기법들은 특히 한국 웹 서비스의 다크 모드 지원에 큰 도움이 됩니다. 다만, contrast-color()는 아직 브라우저 지원이 제한적이므로, 폴리필이나 점진적 향상을 고려해야 합니다.
![]()
결론
최근 CSS 소식은 브라우저 업데이트가 뜸한 가운데도 커뮤니티의 창의성과 기술 발전이 계속되고 있음을 보여줍니다. CSS Quake 같은 실험은 CSS의 한계를 넓히고, gap decorations와 모던 테마링은 실무에 바로 적용할 수 있는 실용적인 기능입니다.
새로운 기능을 무작정 도입하기보다는, 브라우저 지원 범위와 프로젝트 요구사항을 고려해 선택적으로 적용하는 것이 중요합니다. 앞으로의 CSS 발전이 더 기대되네요!
함께 보면 좋은 글
- AI가 통계를 조작한다? P-해킹 자동화의 위험과 대처법 - 데이터 기반 의사결정의 함정을 피하는 방법