autocomplete-theme-classic
The theme is designed as a neutral and clean starter. You can use it as a base and customize it with CSS variables.
If you want to build your own theme, you can start from the Classic theme and adjust it.
Installation
First, you need to install the theme.
1
2
3
yarn add @algolia/autocomplete-theme-classic
# or
npm install @algolia/autocomplete-theme-classic
Then import it in your project:
1
import '@algolia/autocomplete-theme-classic';
If you don’t use a package manager, you can link the style sheet in your HTML:
1
2
3
4
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@algolia/autocomplete-theme-classic"
/>
CSS variables
The theme uses CSS variables that you can customize in your own CSS.
All colors are defined with two variables: one for the RGB values and one for the alpha layer. This lets you adjust each value independently.
Size and spacing
--aa-base-unit
|
type: number
The base value to calculate font sizes and spacing. |
--aa-spacing-factor
|
type: number
The base value to calculate spacing increments. |
--aa-spacing
|
type: length
A fixed spacing value derived from the |
--aa-spacing-half
|
type: length
Half of |
--aa-panel-max-height
|
type: length
The maximum height for the panel before showing a vertical scrollbar. |
Z-index
--aa-base-z-index
|
type: integer
The base value to calculate all |
Font
--aa-font-size
|
type: length
A fixed font size derived from the |
--aa-font-family
|
type: string
The base font stack. |
--aa-font-weight-medium
|
type: number
The medium boldness weight for |
--aa-font-weight-semibold
|
type: number
The semi-boldness weight for |
--aa-font-weight-bold
|
type: number
The boldness weight for |
Icons
--aa-icon-size
|
type: length
A fixed icon size value. |
--aa-icon-stroke-width
|
type: number
A fixed icon stroke width value. |
--aa-icon-color-rgb
|
The RGB values for the icon color. |
--aa-icon-color-alpha
|
type: number
The alpha value for the icon color. |
--aa-action-icon-size
|
type: length
A fixed action icon size value. |
Text colors
--aa-text-color-rgb
|
The RGB values for the global text color. |
--aa-text-color-alpha
|
type: number
The alpha value for the global text color. |
--aa-primary-color-rgb
|
The RGB values for the accent color. |
--aa-primary-color-alpha
|
type: number
The alpha value for the accent color. |
--aa-muted-color-rgb
|
The RGB values for the muted color. |
--aa-muted-color-alpha
|
type: number
The alpha value for the muted color. |
Border colors
--aa-panel-border-color-rgb
|
The RGB values for the panel border color. |
--aa-panel-border-color-alpha
|
type: number
The alpha value for the panel border color. |
--aa-input-border-color-rgb
|
The RGB values for the input border color. |
--aa-input-border-color-alpha
|
type: number
The alpha value for the input border color. |
Background colors
--aa-background-color-rgb
|
The RGB values for the background color. |
--aa-background-color-alpha
|
type: number
The alpha value for the background color. |
--aa-input-background-color-rgb
|
The RGB values for the input-background color. |
--aa-input-background-color-alpha
|
type: number
The alpha value for the input-background color. |
--aa-selected-color-rgb
|
The RGB values for selected, active, or focused elements. |
--aa-selected-color-alpha
|
type: number
The alpha value for selected, active, or focused elements. |
--aa-description-highlight-background-color-rgb
|
The RGB values for the description highlight background color. |
--aa-description-highlight-background-color-alpha
|
type: number
The alpha value for the description highlight background color. |
Detached mode
--aa-detached-media-query
|
type: media query
The media query to enable detached mode on smaller devices. |
--aa-detached-modal-media-query
|
type: media query
The media query to enable detached mode on bigger devices. |
--aa-detached-modal-max-width
|
type: length
The maximum width of the modal in detached mode. |
--aa-detached-modal-max-height
|
type: length
The maximum height of the modal in detached mode. |
--aa-overlay-color-rgb
|
The RGB values for the overlay color. |
--aa-overlay-color-alpha
|
type: number
The alpha value for the overlay color. |
Shadows
--aa-panel-shadow
|
type: box-shadow
The shadow for the panel. |
Scrollbar
--aa-scrollbar-width
|
type: length
The width of the scrollbar. |
--aa-scrollbar-track-background-color-rgb
|
The RGB values for the scrollbar track color. |
--aa-scrollbar-track-background-color-alpha
|
type: number
The alpha value for the scrollbar track color. |
--aa-scrollbar-thumb-background-color-rgb
|
The RGB values for the scrollbar thumb color. |
--aa-scrollbar-thumb-background-color-alpha
|
type: number
The alpha value for the scrollbar thumb color. |
To customize a value, you can create a custom style sheet and override the variable.
1
2
3
:root {
--aa-icon-size: 24px;
}
Make sure to load these styles after the theme.
Templates
For the theme to work out of the box, you need to use a conventional CSS class set. All class names from the theme come with an aa-
namespace to avoid interfering with your own styles.
Item
Here’s the markup for an item
template.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
autocomplete({
// ...
templates: {
item({ item, components }) {
return (
<div className="aa-ItemWrapper">
<div className="aa-ItemContent">
<div className="aa-ItemIcon">
<img src={item.image} alt={item.name} width="40" height="40" />
</div>
<div className="aa-ItemContentBody">
<div className="aa-ItemContentTitle">
<components.Snippet hit={item} attribute="name" />
</div>
<div className="aa-ItemContentDescription">
<components.Snippet hit={item} attribute="description" />
</div>
</div>
</div>
<div className="aa-ItemActions">
<button
className="aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly"
type="button"
title="Select"
>
<svg
viewBox="0 0 24 24"
width="20"
height="20"
fill="currentColor"
>
<path d="M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z" />
</svg>
</button>
</div>
</div>
);
},
},
});
Link item
To wrap an item within a link, use the .aa-ItemLink
class in place of the element with .aa-ItemWrapper
. Make sure not to use both together.
1
2
3
4
5
6
7
8
9
10
11
12
autocomplete({
// ...
templates: {
item({ item }) {
return (
<a className="aa-ItemLink" href={item.url}>
{/* ... */}
</a>
);
},
},
});
Header
Here’s the markup for a header
template.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
autocomplete({
// ...
templates: {
header() {
return (
<Fragment>
<span className="aa-SourceHeaderTitle">Products</span>
<div className="aa-SourceHeaderLine" />
</Fragment>
);
},
// ...
},
});
No results
Here’s the markup for a noResults
template.
1
2
3
4
5
6
7
8
9
autocomplete({
// ...
templates: {
noResults() {
return 'No products for this query.';
},
// ...
},
});
Additional CSS classes
The theme provides a set of optional classes for you to use in different contexts.
Modifiers
.aa-ItemIcon--noBorder
removes the border of the icon.aa-ItemIcon--alignTop
aligns the icon to the top (recommended when the template is longer than three lines).aa-ItemIcon--picture
makes the icon larger (recommended when using an image and the template is longer than three lines).aa-Panel--scrollable
declares the scrollable containers of the panel
Utilities
.aa-ActiveOnly
displays an element only when the item is active.aa-DesktopOnly
displays an element only on desktop devices.aa-TouchOnly
displays an element only on tap devices
Dark mode
The theme supports dark mode. You can enable it on the body
tag in two different ways:
<body data-theme="dark" />
<body class="dark" />