오프셋 페이지네이션

Offset Pagination

offset과 limit으로 위치를 지정하지만 앞쪽 삽입이 페이지 경계를 밀 수 있습니다.

···
html
<div class="viz"><h3>LIMIT 3 · OFFSET 3</h3><div class="row" id="list"></div><div class="muted" id="status">page 1: A B C</div></div>
css
.viz{width:94%;height:88%;max-width:960px;padding:clamp(10px,2vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);font:600 clamp(12px,1.35vw,16px)/1.35 var(--font-sans,system-ui,sans-serif);display:flex;flex-direction:column;gap:clamp(7px,1.8vmin,13px);overflow:hidden}.viz h3{margin:0;color:var(--accent);font:700 clamp(12px,1.35vw,16px)/1.2 var(--font-sans,system-ui,sans-serif);letter-spacing:.04em}.viz .row{display:flex;align-items:center;justify-content:center;gap:clamp(5px,1.4vmin,12px);flex:1;min-height:0}.viz .box{padding:clamp(5px,1.5vmin,12px);border:1px solid var(--line);border-radius:9px;background:var(--bg);text-align:center}.viz .muted{color:var(--muted)}.viz .accent{color:var(--accent)}.viz .code{font-family:ui-monospace,monospace}.viz .pill{padding:3px 7px;border:1px solid var(--line);border-radius:99px;white-space:nowrap}.viz .active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface))}.viz .arrow{color:var(--accent);font:700 18px ui-monospace,monospace}#list{gap:4px}#list .box{min-width:13%;padding:8px 2px}#list .duplicate{border-color:var(--accent-3);color:var(--accent-3)}
js
let changed=false;function draw(){changed=!changed;document.getElementById('list').innerHTML=(changed?['NEW','A','B','C','D','E']:['A','B','C','D','E','F']).map((x,i)=>'<span class="box '+(i===3&&changed?'duplicate':i<3?'active':'')+'">'+x+'</span>').join('');document.getElementById('status').textContent=changed?'insert → page 2: C D E (C repeats)':'page 1: A B C · page 2: D E F'}draw();setInterval(draw,1800)

오프셋 페이지네이션은 결과를 일정 크기로 잘라 offset부터 limit개를 돌려줍니다. 특정 페이지로 점프하기 쉽고 구현도 단순합니다. 다만 정렬된 목록 앞에 새 행이 들어오면 같은 offset이 다른 행을 가리킵니다.

데모는 첫 페이지에서 C를 읽은 뒤 새 항목을 맨 앞에 넣습니다. 다음 페이지를 offset=3으로 읽으면 C가 다시 나타납니다. 변경이 잦은 목록에서는 중복·누락 가능성을 받아들이거나 커서 방식으로 전환합니다.

언제 쓰나

작고 변화가 적은 결과를 페이지 번호로 탐색해야 할 때 적합합니다.

페이지로 열기 ↗