About this set
A mobile-style action sheet that slides up from the bottom of the screen over a dimmed page. It opens from a dark Board actions button and holds a grab handle, a small Board heading, three actions with icons (Rename board, Duplicate, Export as CSV), a destructive Delete board in red below a divider, and a full-width Cancel button. Use it for per-item actions on phones and in compact web apps, where a dropdown would be too small to tap comfortably. The sheet is a native dialog opened with showModal(), so the browser makes the rest of the page inert, keeps focus inside, closes it on Esc and draws the backdrop. The actions are buttons in a form with method=”dialog”: choosing one closes the sheet and leaves its value in dialog.returnValue for your code to act on, with no click handler per item. A few lines of script open it, close it on a backdrop click and put focus back on the trigger. The slide and fade use @starting-style, so no timers are needed. The Bootstrap version uses .offcanvas-bottom with a .list-group of buttons.
What’s included
- Native modal dialog: inert page, focus kept inside, Esc to close
- Actions in a form method="dialog" that report dialog.returnValue
- Slide-up and backdrop fade with @starting-style
- Backdrop click and Cancel close the sheet and refocus the trigger
- Bootstrap version uses .offcanvas-bottom and .list-group
Accessibility
The sheet is a modal dialog labelled Board actions, and its trigger declares aria-haspopup="dialog". The page behind is inert while it is open, Esc closes it, and focus returns to the trigger. Every action is a real button with visible text and an indigo focus outline, and the delete action says Delete as well as being red. Motion is removed under prefers-reduced-motion.
Customise it
Change --sh-ink, --sh-danger and --sh-focus on .sh, the 20px corner radius, and the backdrop colour on .sh::backdrop. In Bootstrap the sizes and colours are the --bs-offcanvas-* and --bs-list-group-* variables plus the .offcanvas-backdrop rules; in Tailwind edit backdrop:bg-[#101828]/42 and text-[#dc2626].



















