Tailwind CSS 기반 프레젠테이션 라이브러리
사용 가이드
~4.5KB gzip · Zero Dependencies · TypeScript
Space 또는 → 로 넘기세요
Step 1
npm 또는 CDN, 원하는 방식으로
npm
npm install tw-slide
CDN (설치 없이 바로 사용)
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/tw-slide/dist/tw-slide.css" />
<script src="https://cdn.jsdelivr.net/npm/tw-slide/dist/tailslide.umd.js"></script>
Step 2
HTML 3개 태그만 기억하세요
<!-- 1. 덱 컨테이너 -->
<div class="ts-deck ts-dark">
<!-- 2. 슬라이드 -->
<section class="ts-slide">
<!-- 3. 콘텐츠 -->
<div class="ts-content">
<h1 class="text-5xl font-bold">
첫 번째 슬라이드
</h1>
</div>
</section>
<section class="ts-slide">
<div class="ts-content">
<h1>두 번째 슬라이드</h1>
</div>
</section>
</div>
.ts-deck
전체 프레젠테이션 컨테이너. .ts-dark으로 다크모드 전환.
.ts-slide
각각의 슬라이드. <section> 태그 사용을 권장.
.ts-content
콘텐츠 영역. max-width 제한으로 가독성 확보. 선택사항.
Step 3
JavaScript 한 줄이면 시작
ES Module (npm)
import TailSlide from 'tw-slide';
import 'tw-slide/style.css';
const deck = new TailSlide({
transition: 'slide',
dark: true,
});
CDN (글로벌)
<script>
const deck = new TailSlide.TailSlide({
transition: 'slide',
dark: true,
});
</script>
Styling
별도 테마 없이, 유틸리티 클래스로 모든 것을 표현
<section class="ts-slide">
<div class="ts-content text-center">
<h1 class="text-6xl font-bold
bg-gradient-to-r from-blue-400
to-purple-500 bg-clip-text
text-transparent">
그라디언트 타이틀
</h1>
<p class="text-xl text-gray-400
mt-6 max-w-lg mx-auto">
서브타이틀 텍스트
</p>
</div>
</section>
그라디언트
bg-gradient-to-r from-* to-*
레이아웃
grid grid-cols-2 gap-4, flex items-center
반응형
text-4xl md:text-6xl — 브레이크포인트 자유롭게
다크모드
.ts-dark 클래스 하나로 전환
Transitions
Web Animations API 기반, 60fps GPU 가속
none
즉시 전환
fade
크로스 디졸브
slide
좌우 슬라이드 (기본값)
zoom
확대/축소
flip
3D 카드 플립
cube
3D 큐브 회전
new TailSlide({
transition: 'cube',
transitionSpeed: 600,
});
Fragments
슬라이드 안에서 요소를 하나씩 보여줍니다
<!-- 기본 (fade-in) -->
<p class="ts-fragment">
첫 번째
</p>
<!-- 애니메이션 지정 -->
<p class="ts-fragment"
data-ts-animation="fade-up">
두 번째
</p>
<p class="ts-fragment"
data-ts-animation="grow">
세 번째
</p>
8가지 애니메이션
fade-in
페이드 (기본값)
fade-up
아래에서 위로
fade-left
오른쪽에서 왼쪽으로
grow
작은 크기에서 확대
highlight
하이라이트 강조
+ fade-down, fade-right, shrink
Plugins
필요한 기능만 골라서 사용
화면 상단에 얇은 진행률 바 표시
↑ 이 슬라이드 상단에서 확인하세요
8 / 12
우측 하단에 현재/전체 슬라이드 번호
↘ 우측 하단에서 확인하세요
O 키로 전체 슬라이드 그리드 보기
지금 눌러보세요!
import TailSlide, {
ProgressPlugin,
SlideNumberPlugin,
OverviewPlugin,
} from 'tw-slide';
const deck = new TailSlide();
deck.use(new ProgressPlugin());
deck.use(new SlideNumberPlugin());
deck.use(new OverviewPlugin());
Config
모든 옵션에 기본값이 있어 생략 가능
new TailSlide({
el: '.ts-deck', // 컨테이너 선택자
transition: 'slide', // none | fade | slide | zoom | flip | cube
transitionSpeed: 500, // 전환 속도 (ms)
easing: 'ease-in-out', // CSS 이징 함수
keyboard: true, // 키보드 네비게이션
touch: true, // 터치 / 스와이프
hash: true, // URL 해시 동기화 (#/0, #/1, ...)
dark: true, // 다크 모드
loop: false, // 마지막 슬라이드 → 처음으로
autoSlide: 0, // 자동 넘김 (ms, 0 = 꺼짐)
startSlide: 0, // 시작 슬라이드 인덱스
});
Navigation
모바일에서는 좌우 스와이프로 네비게이션
API
프로그래밍으로 슬라이드를 제어
deck.next(); // 다음
deck.prev(); // 이전
deck.goTo(3); // 인덱스로 이동
deck.getState(); // 현재 상태
deck.getSlides(); // 슬라이드 배열
deck.toggleOverview(); // 오버뷰 토글
deck.destroy(); // 정리
deck.on('slide:changed', (e) => {
console.log(e.from, '→', e.to);
});
deck.on('fragment:shown', (e) => {
console.log('fragment', e.fragment);
});
deck.on('deck:ready', (e) => {
console.log('total:', e.totalSlides);
});