Typing Layout Visualizer – QWERTY, Dvorak, Colemak
Compare standard keyboard layouts side-by-side. Click keys to see characters. Useful for learning alternative layouts.
UD5 Toolkit
An accessible list implementing the roving tabindex pattern — use Tab to enter,
↑ ↓ to navigate, and observe how only one item holds
tabindex="0" at a time.
No items in the list
Add an item using the input below or click "Add Item".
tabindex="0"
—
A technique where only one element in a group has tabindex="0"
(making it the single Tab stop), while all others have tabindex="-1".
Arrow keys move focus and update tabindex dynamically.
Benefits: Reduces Tab stops for keyboard users, simplifies navigation, and meets WCAG 2.1 AA requirements for keyboard accessibility.
tabindex="0" at any given time, making it the single Tab stop for keyboard users. All other elements have tabindex="-1", removing them from the natural Tab order. Users navigate between elements using arrow keys, and the tabindex "roves" to track the currently active element. This pattern is recommended by the WAI-ARIA Authoring Practices and helps reduce excessive Tab stops while maintaining full keyboard operability.
tabindex="0" on every item forces keyboard users to Tab through each one individually, which becomes tedious with many items. Roving tabindex condenses the group into a single Tab stop, with arrow-key navigation inside the group, significantly improving the keyboard user experience. It is especially valuable for components with dynamic or large numbers of items.
role="listbox" with role="option", or role="toolbar") and ensure each item has an accessible name. Also provide a live region announcement or aria-activedescendant where applicable. Testing with NVDA, JAWS, and VoiceOver is recommended to verify the experience.
element.focus() — each item receives real focus as the user navigates. Aria-activedescendant keeps focus on a single container element and uses the aria-activedescendant attribute to point to the "active" child's ID without moving DOM focus. Roving tabindex is simpler to implement and provides clearer focus visibility, while aria-activedescendant avoids focus flickering and can be more suitable for complex widgets like autocomplete listboxes. Choose based on your specific UX and accessibility requirements.
role="grid", role="row", and role="gridcell". This pattern is used in spreadsheet-like interfaces, data tables with interactive cells, and calendar widgets.
updateTabindex() method after DOM changes to keep the tabindex state consistent. If the list becomes empty, ensure the container or a fallback element can receive focus gracefully.
Compare standard keyboard layouts side-by-side. Click keys to see characters. Useful for learning alternative layouts.
Place multiple grid items into the same cells to create overlapping layouts. Learn the technique visually. Copy code.
Control image‑orientation: from-image vs none. See how the browser interprets EXIF rotation. Fix portrait photos.
Paste HTML and detect elements with aria‑hidden='true' that contain focusable children. An easy a11y win to fix.
Configure how your PWA launches: focus existing or create new. Test with the launch_handler manifest field.
Build a horizontal scroll‑snap container with configurable snap‑type and alignment. Perfect for image galleries.
Compare all CSS easing presets side by side on a bouncing ball. See which curve fits your UI animation.
Query the permission state of camera, microphone, geolocation, and more. See the response and learn the API.
Process audio faster than real‑time with OfflineAudioContext. Apply filters and export the result. Dev tool.
Drop files onto a zone and see a preview with name, size, and type. Copy the JavaScript pattern for your site.
Demonstrate how to add custom headers and POST‑like functionality to EventSource using a polyfill. Code and example.
Scroll a container and see how sticky elements behave. Adjust top, bottom, and scroll margins. Copy the code.
See how overflow: visible, hidden, scroll, and auto behave with real content. Clone to test with your text.
Render the classic Stanford Bunny with a basic WebGPU pipeline. Rotate and zoom. Check if your browser supports WebGPU.
See how scroll‑padding and scroll‑margin affect the position of elements when using anchor links or scroll‑snap. Visual.
Test the experimental Translation API to translate text between languages directly in the browser, without cloud calls. Check support and copy the JavaScript starter.
Apply a convolution filter (blur, sharpen) using a Web Worker. See the UI stay responsive while processing. Learn multithreading in the browser.
Connect your MIDI keyboard and see pressed notes visually on a piano roll. Check velocity, channel, and aftertouch. No DAW needed.
Toggle scrollbar‑gutter: stable to reserve space for the scrollbar and avoid content jumps. Visual demo with two columns.
Acquire and release locks across tabs. Prevent race conditions in IndexedDB or localStorage. Visual queue and lock state.
Register a periodic background sync to fetch fresh data even when the tab is closed. Understand the API and limits.
Test the Fullscreen API: request fullscreen on a colored div, detect changes, and copy the JavaScript boilerplate.
See the View Transitions API in action. Cross‑fade and morph between two states. Copy the JavaScript starter code.
Press any key to see the complete KeyboardEvent properties: key, code, keyCode, modifiers. Indispensable for game & shortcut developers.
Press any key and see it light up on a standard QWERTY layout. Check functionality or demonstrate shortcuts.
Enter a URL and extract tab‐index order violations and focusable elements. Quick accessibility audit. Client‑side fetch.
Find safe mixing ratios for the classic elephant toothpaste demonstration. Volume adjustments for different container sizes.
Play a virtual piano keyboard using mouse or computer keys. Sustain and octave control. Record and play back your tune.
Press keys on your physical keyboard and see them highlighted on a virtual keyboard. Detects multi-key rollover. Quick hardware check.
Press any key to see the corresponding JavaScript event key, code, and keyCode. An essential debugging tool for front-end developers handling keyboard input.