# Styling
URL: https://ark-ui.com/docs/guides/styling
Source: https://raw.githubusercontent.com/chakra-ui/ark/refs/heads/main/website/src/content/pages/guides/styling.mdx
Learn how to style Ark UI components.
---
## Overview
Ark UI is a headless component library that works with any styling solution. It provides functional styles for elements
like popovers for positioning, while leaving presentation styles up to you. Some components also expose CSS variables
that can be used for styling or animations.
> **Tip:** Looking for a ready-to-use solution? Checkout [Park UI](https://park-ui.com) for a collection of pre-designed
> styles based on Ark UI components.
### Data Attributes
Ark UI components use `data-scope` and `data-part` attributes to target specific elements within a component.
Interactive components often include `data-*` attributes to indicate their state. For example, here's what an open
accordion item looks like:
```html
```
For more details on each component's data attributes, refer to their respective documentation.
## Styling with CSS
When styling components with CSS, you can target the data attributes assigned to each component part for easy
customization.
### Styling a Part
To style a specific component part, target its `data-scope` and `data-part` attributes:
```css
[data-scope='accordion'][data-part='item'] {
border-bottom: 1px solid #e5e5e5;
}
```
### Styling a State
To style a component based on its state, use the `data-state` attribute:
```css
[data-scope='accordion'][data-part='item'][data-state='open'] {
background-color: #f5f5f5;
}
```
> **Tip:** If you prefer using classes instead of data attributes, utilize the `class` or `className` prop to add custom
> classes to Ark UI components.
### Class Names
If you prefer using classes instead of data attributes, utilize `class` or `className` prop to add custom classes to Ark
UI components.
Pass a class:
```jsx
{/* … */}
```
Then use in styles:
```css
.AccordionItem {
border-bottom: 1px solid #e5e5e5;
&[data-state='open'] {
background-color: #f5f5f5;
}
}
```
## Styling with Panda CSS
[Panda CSS](https://panda-css.com) is a best-in-class CSS-in-JS framework that integrates seamlessly with Ark UI,
providing an efficient styling solution.
### Styling a part
Panda offers various ways to write styles, but in the context of Ark UI, we recommend using the `defineSlotRecipe`
function to style a component with its different parts and variants.
> **Important:** When importing anatomy objects, we recommend using the `@ark-ui//anatomy` entrypoint (e.g.,
> `@ark-ui/react/anatomy`) instead of the main package export to avoid potential build and import errors.
```ts
import { accordionAnatomy } from '@ark-ui/react/anatomy'
import { defineSlotRecipe } from '@pandacss/dev'
export const accordionStyles = defineSlotRecipe({
className: 'accordion',
slots: accordionAnatomy.keys(),
base: {
item: {
borderBottom: '1px solid #e5e5e5',
},
},
defaultVariants: {},
variants: {},
})
```
### Styling a state
To style a component based on its state, you can use built in
[conditions](https://panda-css.com/docs/customization/conditions) in Panda CSS.
```ts
import { accordionAnatomy } from '@ark-ui/react/anatomy'
import { defineSlotRecipe } from '@pandacss/dev'
export const accordionStyles = defineSlotRecipe({
className: 'accordion',
slots: accordionAnatomy.keys(),
base: {
item: {
borderBottom: '1px solid {colors.gray.300}',
_open: {
// [!code highlight]
backgroundColor: 'gray.100',
},
},
},
defaultVariants: {},
variants: {},
})
```
## Styling with Tailwind CSS
[Tailwind CSS](https://tailwindcss.com/) is a utility-first CSS framework providing a flexible way to style your
components.
### Styling a Part
To style a part, apply classes directly to the parts using either `class` or `className`, depending on the JavaScript
framework.
```jsx
{/* … */}
```
### Styling a State
Leverage Tailwind CSS's variant selector to style a component based on its data-state attribute.
```jsx
{/* … */}
```