
sticky-and-fixed-elements
Sticky headers, bottom toolbars, floating action buttons and pinned table headers. Use when deciding what stays on screen while the user scrolls.
- Installs
- 864
- Last 24h
- +9
- Trending rank
- #9286
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/dembrandt/dembrandt-skills --skill sticky-and-fixed-elements- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads sticky-and-fixed-elements automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Sticky and Fixed Elements
position: fixed vs position: sticky
| Property | Behaviour | Use for |
|---|---|---|
position: fixed | Removed from document flow. Always stays at the same viewport position regardless of scroll or parent. | Global navigation header, bottom toolbar, floating action button |
position: sticky | Stays in document flow until it hits its scroll threshold, then locks in place. Returns to flow when parent scrolls past. | Table column headers, section headings in a long list, in-page toolbars within a scroll container |
Prefer sticky over fixed when the element belongs to a specific section or scroll context. Fixed elements sit above everything and affect the entire viewport — use them only for truly global UI.
Top — Navigation Header
The global navigation header is the most common fixed element. It should:
- Remain visible at all times so the user can always navigate away
- Be as thin as possible to maximise content area — 48–64px is a common range
- Have a background and shadow so content scrolling beneath it does not bleed through
- On scroll, a subtle shadow (
--shadow-sm) signals that content is behind it
.site-header {
position: fixed;
top: 0;
left: 0;
right: 0;
height: var(--header-height);
background: var(--color-surface);
box-shadow: var(--shadow-sm);
z-index: var(--z-header);
}
Compensate for the fixed header with matching top padding on the page body:
body { padding-top: var(--header-height); }
Bottom — Toolbar on Mobile
On mobile, the bottom of the screen is the most reachable area with one thumb. A persistent bottom toolbar is the natural home for:
- Primary navigation (bottom tab bar — iOS and Android convention)
- Contextual actions for the current view (edit, share, delete)
- A floating action button (FAB) for the single most important action
Bottom toolbars should:
- Respect the safe area inset on devices with a home indicator:
padding-bottom: env(safe-area-inset-bottom) - Be visually separated from content (background fill, top border, or shadow)
- Contain 3–5 items maximum — more than 5 should move to a menu or a different pattern
- Use icons with labels for navigation tabs, or icons alone for contextual toolbars (with tooltips)
On desktop, bottom toolbars are uncommon. Status bars, editor toolbars, and command palettes are the desktop equivalent — these are typically position: fixed at the bottom or position: sticky within their scroll container.
Sticky Table Headers
For data tables inside a scroll container, sticky column headers prevent the user from losing track of what each column means.
thead th {
position: sticky;
top: 0;
background: var(--color-surface);
z-index: 1;
}
If the table also has a sticky first column (for row identifiers), the top-left cell needs both top: 0 and left: 0, and a higher z-index to sit above both the header row and the sticky column.
Stacking and Z-index
Sticky and fixed elements create stacking context. Define z-index as named tokens, not arbitrary numbers:
--z-base: 0;
--z-dropdown: 100;
--z-sticky: 200;
--z-header: 300;
--z-modal: 400;
--z-toast: 500;
Every fixed or sticky element must declare its z-index explicitly using a token. Avoid ad-hoc values like z-index: 9999 — they signal an unmanaged stacking context and will eventually conflict.
How Many Fixed Layers Is Too Many
Each fixed layer removes space from the content area and adds visual complexity. A page should rarely need more than:
- 1 fixed header (top)
- 1 fixed toolbar or bottom nav (bottom, mobile)
- 1 floating action button or contextual overlay
A fixed header + fixed bottom toolbar + floating button + sticky sidebar + sticky table header all simultaneously is too many layers. Consolidate where possible.
Review Checklist
- Is
stickyused for section-scoped elements andfixedonly for truly global UI? - Does the fixed header compensate for its height with body padding?
- Does the bottom toolbar respect
env(safe-area-inset-bottom)on mobile? - Are all z-index values defined as named tokens, not arbitrary numbers?
- Is the total number of simultaneous fixed layers minimal — header + one bottom element maximum in most cases?
- Does content scrolling behind a fixed element not visually bleed through (background + shadow on the fixed element)?
FAQ
What does the sticky-and-fixed-elements skill do?
Sticky headers, bottom toolbars, floating action buttons and pinned table headers. Use when deciding what stays on screen while the user scrolls.
How do I install sticky-and-fixed-elements?
Run npx skills add https://github.com/dembrandt/dembrandt-skills --skill sticky-and-fixed-elements in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/sticky-and-fixed-elements/ (personal) or .claude/skills/sticky-and-fixed-elements/ (project).
Which AI agents can use sticky-and-fixed-elements?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is sticky-and-fixed-elements safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains sticky-and-fixed-elements?
It is published by dembrandt in dembrandt/dembrandt-skills. It has 864 recorded installs.
More from dembrandt/dembrandt-skills
nielsen-usability-heuristics
dembrandt/dembrandt-skills
Nielsen's 10 usability heuristics. Use when auditing an interface, designing interaction flows, writing error messages or reviewing usability.
performance-and-web-vitals
dembrandt/dembrandt-skills
Lighthouse audits and Core Web Vitals — LCP, CLS, INP. Use when optimising page load, layout shift, input delay, images, fonts or render-blocking resources.
color-mode-and-theme
dembrandt/dembrandt-skills
Light, dark or both, and when a theme selector is worth it. Use when defining a base palette or deciding on dark mode support.
ui-density
dembrandt/dembrandt-skills
Match information density to platform and user type. Use when designing data tables, dashboards or toolbars, or adapting a desktop product for mobile.
form-design
dembrandt/dembrandt-skills
Helper text, placeholders, validation and submit behaviour. Use when designing or reviewing a form, input field or data entry UI.
brand-visual-language
dembrandt/dembrandt-skills
Shape language across type, radius and icons carries brand personality. Use when starting a design system, picking icons or radius tokens, or reviewing visual consistency.
Popular other skills
hyperframes-cli
heygen-com/hyperframes
The HyperFrames CLI by job - scaffold, check, look at frames, edit the timeline, preview, render locally or in the cloud, publish, project history - plus reading its JSON and recovering from build or render failures.
triage
mattpocock/skills
Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.
ask-matt
mattpocock/skills
Ask which skill or flow fits your situation. A router over the skills in this repo.
to-questionnaire
mattpocock/skills
Turn a decision you can't fully answer into a questionnaire for someone else to fill in.
loop-me
mattpocock/skills
Grill me about specs for the workflows I want to build, within this workspace.