Lista do układania bez przeciągania
InterfejsPodgląd
Ładowanie podglądu…
Lista z przyciskami i skrótami do zmiany kolejności elementów.
Kod źródłowy
Licencja MIT — także do użytku komercyjnego. Zachowaj informacje o autorze i licencji.
HTML
<main class="prep"><div class="intro"><h1>Plan na<br>dobry obiad.</h1><p>Ułóż kolejność przygotowań.<br>Przyciski lub Alt + ↑ / ↓.</p><div class="plate" aria-hidden="true"><i></i><b></b><em></em></div></div><section><h2>Kolejność zadań</h2><ol id="tasks"><li data-task="Nakryj stół"><span>Nakryj stół</span><div><button data-move="-1" aria-label="Przenieś Nakryj stół wyżej">↑</button><button data-move="1" aria-label="Przenieś Nakryj stół niżej">↓</button></div></li><li data-task="Umyj warzywa"><span>Umyj warzywa</span><div><button data-move="-1" aria-label="Przenieś Umyj warzywa wyżej">↑</button><button data-move="1" aria-label="Przenieś Umyj warzywa niżej">↓</button></div></li><li data-task="Ugotuj makaron"><span>Ugotuj makaron</span><div><button data-move="-1" aria-label="Przenieś Ugotuj makaron wyżej">↑</button><button data-move="1" aria-label="Przenieś Ugotuj makaron niżej">↓</button></div></li><li data-task="Podaj obiad"><span>Podaj obiad</span><div><button data-move="-1" aria-label="Przenieś Podaj obiad wyżej">↑</button><button data-move="1" aria-label="Przenieś Podaj obiad niżej">↓</button></div></li></ol><p id="order-status" class="status" aria-live="polite">4 zadania do ułożenia</p></section></main>
CSS
*{box-sizing:border-box}body{margin:0;min-height:100vh;font-family:Arial,sans-serif;color:var(--ink,#15202b);background:var(--paper,#fff);line-height:1.5}button,input,select{font:inherit}button{cursor:pointer;min-height:44px}button:disabled{cursor:not-allowed;opacity:.55}button,input,select,a{touch-action:manipulation}button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible,[tabindex]:focus-visible,summary:focus-visible{outline:3px solid var(--focus,#1368ce);outline-offset:4px}button{border-radius:0}h1,h2,p{margin-top:0}svg{display:block;max-width:100%}[hidden]{display:none!important}.status{min-height:24px;font-size:14px}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
body{--paper:#e8efe5;--ink:#203e2d;--focus:#945d21}.prep{max-width:900px;margin:auto;padding:35px;display:grid;grid-template-columns:.9fr 1.2fr;gap:45px}h1{font-family:Georgia,serif;font-size:47px;line-height:1.04;margin-bottom:20px}.intro p{font-size:14px;color:#45604a}.plate{width:180px;height:180px;border-radius:50%;background:#fdfdf7;border:15px double #bdcdb4;position:relative;margin:22px auto 0}.plate i,.plate b,.plate em{position:absolute;display:block;border-radius:50%}.plate i{width:55px;height:55px;background:#c54e34;left:22px;top:26px}.plate b{width:50px;height:70px;background:#50775a;right:21px;top:30px;transform:rotate(35deg)}.plate em{width:65px;height:28px;background:#e9ba66;left:37px;bottom:18px}h2{font:17px Arial,sans-serif;border-bottom:2px solid #203e2d;padding-bottom:15px}ol{padding:0;list-style:none;counter-reset:steps}li{counter-increment:steps;display:flex;gap:12px;align-items:center;border-bottom:1px solid #aec0a7;padding:12px 0}li:before{content:counter(steps,decimal-leading-zero);font:13px monospace;color:#5c725d}li>span{flex:1;font-weight:600;font-size:16px}li>div{display:flex;gap:8px}li button{min-width:44px;border:1px solid #aec0a7;background:#f9fbf5;color:#203e2d;font-size:20px}.status{font-size:13px;margin-top:18px}@media(max-width:600px){.prep{grid-template-columns:1fr;padding:24px;gap:18px}.intro{position:relative;padding-right:95px}h1{font-size:36px}.plate{position:absolute;right:0;bottom:10px;transform:scale(.52);transform-origin:right bottom;margin:0}.intro p{max-width:210px}li>span{font-size:14px}}
JavaScript
(()=>{
const list=document.querySelector('#tasks');function sync(){[...list.children].forEach((li,i,rows)=>{li.querySelector('[data-move="-1"]').disabled=i===0;li.querySelector('[data-move="1"]').disabled=i===rows.length-1;});}function move(li,step,focus){const target=step<0?li.previousElementSibling:li.nextElementSibling;if(!target)return;if(step<0)list.insertBefore(li,target);else list.insertBefore(target,li);sync();const button=li.querySelector('[data-move="'+step+'"]');(button.disabled?li.querySelector('button:not(:disabled)'):button).focus();document.querySelector('#order-status').textContent=li.dataset.task+': pozycja '+([...list.children].indexOf(li)+1)+' z '+list.children.length;}list.addEventListener('click',e=>{const b=e.target.closest('[data-move]');if(b)move(b.closest('li'),Number(b.dataset.move));});list.addEventListener('keydown',e=>{if(e.altKey&&['ArrowUp','ArrowDown'].includes(e.key)){e.preventDefault();move(e.target.closest('li'),e.key==='ArrowUp'?-1:1);}});sync();
})();
Edytuj swój pen
Podaj adres e-mail użyty przy zapisie. Wyślemy link do edycji.