모든 브라우저에서 올바른 선택 처리로 포맷 토글(굵게, 기울임 등)을 안정적으로 구현하는 방법
해결 팁
contenteditable 문제 해결을 위한 실용적인 팁과 해결 방법
일반 패턴
일상 작업을 위한 재사용 가능한 패턴
contenteditable에서 접힌 선택과 펼쳐진 선택을 모두 처리하여 현재 커서 위치에 텍스트를 안정적으로 삽입하는 방법
특히 DOM 조작 후 contenteditable에서 선택 범위를 안정적으로 저장하고 복원하는 방법
모든 브라우저에서 안정적으로 작동하는 contenteditable용 사용자 정의 undo/redo 스택 구현 방법
contenteditable에서 붙여넣기 이벤트를 가로채고 처리하며, HTML 콘텐츠를 정화하고 붙여넣을 내용을 제어하는 방법
프레임워크 통합
React, Vue 및 기타 프레임워크 팁
React에서 contenteditable을 사용할 때 re-render로 인한 캐럿 위치 이동 문제를 해결하는 방법
Vue에서 contenteditable을 반응형 상태와 함께 사용할 때 캐럿 위치 문제를 해결하는 방법
Angular와 contenteditable 요소를 올바르게 통합하고, 상태 동기화를 처리하며, 커서 위치 문제를 방지하는 방법
Svelte와 contenteditable 요소를 올바르게 통합하고, 반응형 상태를 처리하며, 커서 위치 문제를 방지하는 방법
포맷팅
텍스트 포맷팅 및 스타일링
모든 브라우저에서 일관된 동작으로 contenteditable 요소에 링크를 생성, 편집, 제거하는 방법
선택 & 캐럿
선택 및 커서 처리
브라우저 확대/축소나 CSS transform으로 인한 캐럿 위치 부정확 문제를 해결하는 방법
position:relative CSS 속성을 가진 요소 내부에서 콘텐츠를 편집할 때 텍스트 캐럿(커서)을 보이게 만드는 방법
브라우저 기능
브라우저별 동작 처리
Grammarly 같은 브라우저 확장 프로그램이 contenteditable 편집을 방해하는 것을 방지하는 방법
브라우저 번역 기능이 contenteditable 편집을 방해하지 않도록 하는 방법
다크 모드에서 contenteditable의 캐럿이 보이지 않는 문제를 해결하는 방법
contenteditable 요소에서 브라우저가 URL, 이메일, 전화번호를 자동으로 클릭 가능한 링크로 변환하는 것을 방지하는 방법
beforeinput 이벤트를 지원하지 않는 Safari를 포함하여 모든 브라우저에서 작동하는 입력 가로채기 구현 방법
성능
최적화 및 모범 사례
이벤트 리스너와 MutationObserver를 사용할 때 메모리 누수를 방지하는 방법
접근성
WCAG 준수 및 키보드 네비게이션
WCAG 요구사항을 준수하는 키보드 탐색을 contenteditable에 구현하는 방법
IME & 컴포지션
입력기 처리
WebKit 브라우저에서 제목 요소(H1-H6)에 IME 컴포지션 사용 시 Pinyin 중복 텍스트를 방지하는 방법
붙여넣기 & 클립보드
클립보드 작업
contenteditable 요소에 링크를 붙여넣을 때 링크 제목과 HTML 구조를 보존하는 방법, 특히 Safari에서