기본
설치
npm install htmx.org
동작 방식
HTML-drivenHTML 속성으로 AJAX 발행, JS 불필요
Swap content서버가 HTML 조각 반환, htmx가 교체
Progressive표준 HTML 향상; 점진적 지원
REST-friendly모든 서버 사이드 프레임워크와 호환
속성
핵심 요청 속성
hx-get="/url"URL로 GET 요청 발행
hx-post="/url"URL로 POST 요청 발행
hx-put="/url"URL로 PUT 요청 발행
hx-patch="/url"URL로 PATCH 요청 발행
hx-delete="/url"URL로 DELETE 요청 발행
동작 속성
hx-trigger요청을 트리거하는 이벤트
hx-target콘텐츠를 교체할 요소
hx-swap응답 콘텐츠를 교체하는 방법
hx-select응답 HTML의 일부 선택
hx-vals요청에 추가 값 포함
hx-confirm요청 전 확인 대화상자 표시
hx-disable요소의 htmx 처리 비활성화
트리거
트리거 문법
Feed
트리거 수정자
changed값이 변경된 경우에만 실행
delay:NsN초 대기 후 실행
throttle:NmsN ms당 한 번으로 제한
once처음 한 번만 트리거
from:selector다른 요소에서 이벤트 수신
every NsN초마다 폴링
load요소 로드 시 실행
revealed요소가 뷰포트에 나타날 때 실행
타겟
타겟 선택
타겟 키워드
this요소 자체 (기본값)
closest <sel>선택자와 일치하는 가장 가까운 조상
find <sel>선택자와 일치하는 첫 번째 자손
next <sel>선택자와 일치하는 다음 형제
previous <sel>선택자와 일치하는 이전 형제
스왑
스왑 전략
innerHTML내부 콘텐츠 교체 (기본값)
outerHTML타겟 요소 전체 교체
afterbegin타겟 안 맨 앞에 삽입
beforeend타겟 안 맨 뒤에 추가
beforebegin타겟 앞에 삽입
afterend타겟 뒤에 삽입
delete타겟 요소 제거
none교체 없이 이벤트만 발생
스왑 수정자
헤더
요청 헤더 (htmx가 전송)
HX-Requesthtmx 요청이면 항상 "true"
HX-Target타겟 요소의 ID
HX-Trigger트리거된 요소의 ID
HX-Trigger-Name트리거된 요소의 name
HX-Current-URL브라우저 현재 URL
HX-Prompthx-prompt에 대한 사용자 응답
응답 헤더 (서버가 전송)
HX-RedirectURL로 클라이언트 사이드 리다이렉트
HX-Refresh"true"이면 전체 페이지 새로고침
HX-RetargetCSS 선택자로 hx-target 재정의
HX-Reswaphx-swap 전략 재정의
HX-Trigger클라이언트 사이드 이벤트 트리거
HX-Push-Url브라우저 히스토리에 URL 추가
이벤트
생명 주기 이벤트
htmx:configRequest요청 전; 파라미터/헤더 수정
htmx:beforeRequestAJAX 호출 직전
htmx:afterRequest요청 완료 후
htmx:beforeSwap콘텐츠 교체 전
htmx:afterSwap콘텐츠 교체 후
htmx:afterSettle스왑 후 DOM이 안정화된 후
htmx:responseError서버가 에러 상태 반환
이벤트 수신
document.body.addEventListener("htmx:afterSwap", (e) => { console.log("Swapped:", e.detail.target); }); // Cancel a request document.body.addEventListener("htmx:configRequest", (e) => { if (!confirm("Proceed?")) e.preventDefault(); });
확장
확장 사용
주요 확장
json-enc요청 본문을 JSON으로 인코딩
loading-states로딩 상태 CSS 클래스 관리
head-support응답의 태그 병합
preloadmousedown/hover 시 링크 미리 로드
sseServer-Sent Events 지원
wsWebSocket 지원
response-targets에러 응답에 다른 타겟 지정
인디케이터
로딩 인디케이터
Loading...
인디케이터 CSS
.htmx-indicator { display: none; } .htmx-request .htmx-indicator { display: inline; } .htmx-request.htmx-indicator { display: inline; }

htmx는 요청 중 요소에 htmx-request 클래스를 추가

요청 중 비활성화

hx-disabled-elt는 요청 중 disabled 속성 추가

일반 패턴
실시간 검색
#results" />
무한 스크롤
Loading more...
확인 후 삭제
인라인 편집
Click to edit this text