CSS로 요소를 묶을 수 있을까? DOM과의 차이
CSS로 요소를 묶을 수 있을까?
웹 개발을 하다 보면 여러 요소를 하나의 그룹처럼 다루고 싶을 때가 있습니다.
이때 흔히 드는 생각이 있습니다.
"CSS로 묶을 수 있지 않을까?"
결론부터 말하면 불가능합니다.
DOM과 CSS의 역할 차이
이 문제는 DOM과 CSS의 역할을 이해하면 명확해집니다.
| 구분 | 역할 | |------|------| | DOM | HTML 구조 (부모-자식 관계) | | CSS | 스타일 및 배치 |
브라우저 렌더링은 다음 순서로 진행됩니다. HTML → DOM → CSS 적용 → 화면 렌더링
CSS는 이미 만들어진 DOM 위에서만 작동합니다.
즉, 구조 자체를 변경할 수 없습니다.
CSS로는 왜 안 될까?
CSS는 다음과 같은 작업을 할 수 없습니다.
- 새로운 div 생성
- 요소를 다른 부모로 이동
- 여러 요소를 하나의 부모로 묶기
이 작업은 DOM 조작 영역이며 JavaScript가 담당합니다.
그렇다면 CSS로 가능한 것은?
CSS는 "묶는 것"이 아니라
"묶인 것처럼 보이게 하는 것" 만 가능합니다.
대표적인 방법은 다음과 같습니다.
1. display: contents
.wrapper {
display: contents;
}
-
wrapper를 제거한 것처럼 렌더링
-
구조는 그대로 유지
2. CSS Grid
#a, #b, #c {
grid-area: 1 / 1;
}
-
같은 영역에 배치
-
하나처럼 보임
3. position 활용
.item {
position: absolute;
}
- 위치를 강제로 묶음
실제로 묶으려면 어떻게 해야 할까?
정답은 JavaScript DOM 조작입니다.
wrapAll 사용
$('#a, #b').wrapAll('<div class="wrapper"></div>');
append 사용
const wrapper = $('<div class="wrapper"></div>');
wrapper.append($('#a, #b'));
이 방식은 실제로 DOM 구조를 변경합니다.
언제 CSS, 언제 JavaScript?
| 상황 | 선택 | | -------- | ---------- | | 단순 레이아웃 | CSS | | 기능 단위 묶기 | JavaScript | | 접근성/폼 처리 | JavaScript | | 반응형 UI | CSS |
핵심 정리
-
CSS는 구조를 바꾸지 못한다
-
DOM이 구조를 결정한다
-
실제 그룹화는 JavaScript로 해야 한다
-
CSS는 시각적 grouping만 가능하다