About this set
A bottom tab bar for mobile web apps, shown inside a phone frame. Four tabs (Home, Search, Inbox and Profile) sit either side of a round violet New post button that rises above the bar. Each tab stacks an icon over a small label; the current tab turns violet, its icon lifts by two pixels and a short bar appears above it. Use it for the three to five top-level destinations of a phone-first app, with the raised button for the one action people take most often. The tabs are links in a list inside a nav labelled Main, and the current one carries aria-current=”page”, which the CSS uses to draw the active state. The raised button is a real button with an accessible name, since it performs an action instead of going to a page. Bottom padding includes env(safe-area-inset-bottom) so the bar clears the home indicator on notched phones. The Bootstrap version builds the bar from .nav.nav-fill with a .btn for the action, and the Tailwind version styles the current tab with aria-[current=page] variants.
What’s included
- Four tabs plus a raised circular action button
- Current tab styled from aria-current, with a top indicator bar
- Safe-area padding for phones with a home indicator
- Labels darkened to 4.5:1 against the white bar
- Phone frame that shrinks to fit a 375px screen
Accessibility
The tabs are links in a list inside a nav labelled Main, so screen readers announce the list size and which tab is the current page. The raised button is named New post and its plus glyph is hidden from assistive technology. Every tab and the button show a 2px violet outline on keyboard focus, and the icon lift is not animated under prefers-reduced-motion.
Customise it
Change the accent in the aria-current rules and .bnav-fab (plain CSS), the .active rules and --bs-btn-bg on .bnav-fab (Bootstrap) or the --color-bnav-accent and --color-bnav-muted theme colours (Tailwind). Swap the emoji for your own icons inside .bnav-ic.



















