A warm Bootstrap 6 homepage template for an interior design studio (the fictional Olive & Linen) with arched photos, a tabbed portfolio, a before/after slider and a booking form.
How it works
The page root .ol-page pins data-bs-theme="light" and maps the Bootstrap 6 primary role (--bs-primary-bg, --bs-primary-contrast and the others) to the olive green in --ol-olive. Fonts: Cormorant Garamond and Jost.
- Navbar:
navbar lg:navbar-expandwith a<dialog class="drawer drawer-end">panel for small screens. The script syncsaria-expandedand closes the panel after a link is chosen. - Hero: a serif headline with an italic accent, two pill buttons and an
avatar-stackrating. On the right,.ol-archeslayers two arched photos (.ol-arch-main,.ol-arch-side), a palette card and a rotated.ol-stamp. - Services: four
.ol-servicecards. - Portfolio:
nav nav-underlinetabs (data-bs-toggle="tab") switch three.tab-panegalleries, each an.ol-gallerygrid. - Before & after:
.ol-comparestacks two photos. The Bootstrap 6 Range (.form-range>.form-range-input) sets--ol-pos, which clips.ol-compare-afterand moves the divider line. - Process: an exclusive accordion of
<details name="ol-process">items with numbered steps. - Reviews: three rated quote cards and a press row.
- Booking:
<form data-bs-validate novalidate>with a Chips input for rooms (data-bs-chips), a Datepicker (data-bs-toggle="datepicker") and a budget select. The script setsdata-bs-date-min/data-bs-date-maxto tomorrow and 60 days out. On submit it flags invalid fields with.is-invalid, simulates the request and shows a Toast with the chosen date and rooms.
Customization
- To rebrand, change
--ol-olive,--ol-clayand--ol-creamon.ol-pageinstyle.css, and keep the--bs-primary-*lines next to them in sync. - Edit
border-radiuson.ol-archto change the arch shape (50%gives ovals). - To start the comparison at a different split, change
valueon#ol-compare-range. - To change the booking window, change the
60in the date block ofscript.js. - To add a fourth portfolio category, add a
nav-itembutton and a matching.tab-pane. - To send bookings to your server, replace the
setTimeoutin the submit handler withfetch()to your endpoint. - The photos come from Unsplash. Replace them with photographs of your own projects and clients.
Accessibility
There is a skip link to #ol-main. The tabs use role="tab" with aria-selected and aria-controls. The comparison slider is a labelled range input with a live aria-valuetext; star ratings are a labelled role="img". Validation messages appear as text under each field, and the Toast uses role="status". Hover lifts and smooth scrolling are turned off under prefers-reduced-motion.
Bootstrap 6 notes
The template is built on Bootstrap 6.0.0-alpha.1, and alpha APIs can still change. Here is how it maps to Bootstrap 5:
- Drawer replaces Offcanvas and
navbar-collapse. btn-solid theme-primaryreplacesbtn-primary.form-controlon<select>replacesform-select.<details>replaces the old accordion buttons.data-bs-validatereplacesneeds-validation.- Range, Chips and Datepicker are new components and need no extra libraries.
script.js imports Drawer and Toast from the bundle as an ES module. Chips and date are kept after a submit.