---
title: Themes
path: /v6/themes/
index: 6
---
Tippies can have any custom styling via CSS.
### Included themes
The package comes with themes for you to use:
- `light`
- `light-border`
- `material`
- `translucent`
They need to be
[imported separately](../getting-started/#optional-extra-imports).
```js
import 'tippy.js/themes/light.css';
```
Pass the theme name as the `theme` prop:
```js
tippy('button', {
theme: 'light',
});
```
### Tippy elements
To learn how to create a theme, it's helpful to understand the basic structure
of a tippy element:
```html
My content
```
A tippy is essentially three nested `div`s.
- `[data-tippy-root]` is the outermost node. It is what Popper uses to position
the tippy. You don't need to apply any styles to this element.
- `tippy-box` is the actual box node.
- `tippy-content` is the content node.
Depending on the props supplied, there will exist other elements inside it:
```html
My content
```
### Creating a theme
Themes are created by including a class on the `tippy-box` element as part of a
selector in the form `.tippy-box[data-theme~='theme']`. Let's demonstrate this
by creating our own theme called `tomato`:
```css
.tippy-box[data-theme~='tomato'] {
background-color: tomato;
color: yellow;
}
```
To apply the theme:
```js
tippy(targets, {
theme: 'tomato',
});
```
> **What is `~=`?**
>
> Since `theme` can have multiple names, it allows you to target a single theme
> inside the space-separated list. Visit
> [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors)
> for more information.
### Styling the arrow
There are two types of arrows:
- CSS arrows (using `border-width`)
- SVG arrows (using an `