diff --git a/contribute/style-guides/styling.md b/contribute/style-guides/styling.md
index e5a8789d0bc..fd569459eee 100644
--- a/contribute/style-guides/styling.md
+++ b/contribute/style-guides/styling.md
@@ -1,48 +1,55 @@
# Styling Grafana
-## Emotion
-
[Emotion](https://emotion.sh/docs/introduction) is our default-to-be approach to styling React components. It provides a way for styles to be a consequence of properties and state of a component.
-### Usage
+## Usage
-#### Basic styling
+### Basic styling
-For styling components use Emotion's `css` function
+For styling components, use [Emotion's `css` function](https://emotion.sh/docs/emotion#css).
```tsx
-import { css } from 'emotion';
+import React from 'react';
+import { css } from 'emotion';
-
-const ComponentA = () => {
- return (
-
- As red as you can ge
-
- );
-}
+const ComponentA = () => (
+
+ As red as you can get
+
+);
```
-#### Styling complex components
+### Styling complex components
-In more complex cases, especially when you need to style multiple DOM elements in one component or when your styles that depend on properties and/or state, you should create a helper function that returns an object with desired stylesheet. This function should also be wrapped in `stylesFactory` helper function that will provide basic memoization.
+In more complex cases, especially when you need to style multiple DOM elements in one component, or when using styles that depend on properties and/or state, you should create a helper function that returns an object of styles. This function should also be wrapped in the `stylesFactory` helper function, which will provide basic memoization.
-Let's say you need to style a component that has different background depending on the theme:
+Let's say you need to style a component that has a different background depending on the theme:
```tsx
-import { css, cx } from 'emotion';
-import { GrafanaTheme, useTheme, selectThemeVariant, stylesFactory } from '@grafana/ui';
+import React from 'react';
+import { css } from 'emotion';
+import { GrafanaTheme } from '@grafana/data';
+import { selectThemeVariant, stylesFactory, useTheme } from '@grafana/ui';
const getStyles = stylesFactory((theme: GrafanaTheme) => {
- const backgroundColor = selectThemeVariant({ light: theme.colors.red, dark: theme.colors.blue }, theme.type);
+ const backgroundColor = selectThemeVariant(
+ { light: theme.colors.red, dark: theme.colors.blue },
+ theme.type
+ );
return {
wrapper: css`
background: ${backgroundColor};
`,
- icon: css`font-size:${theme.typography.size.sm}`;
+ icon: css`
+ font-size: ${theme.typography.size.sm};
+ `,
};
-}
+});
const ComponentA = () => {
const theme = useTheme();
@@ -54,18 +61,18 @@ const ComponentA = () => {
);
-});
+};
```
-For more information about themes at Grafana please see [themes guide](./themes.md)
+For more information about themes at Grafana please see the [themes guide](./themes.md).
-#### Composing class names
+### Composing class names
-For class composition use Emotion's `cx` function
+For class composition, use [Emotion's `cx` function](https://emotion.sh/docs/emotion#cx).
```tsx
-import { css, cx } from 'emotion';
-
+import React from 'react';
+import { css, cx } from 'emotion';
interface Props {
className?: string;
@@ -74,13 +81,11 @@ interface Props {
const ComponentA: React.FC = ({ className }) => {
const finalClassName = cx(
className,
- css`background: red`,
- )
-
- return (
-
- As red as you can ge
-
+ css`
+ background: red;
+ `
);
-}
+
+ return As red as you can ge
;
+};
```