mirror of
https://github.com/lucide-icons/lucide.git
synced 2026-11-14 13:58:21 +00:00
* feat(packages): extract build logic to @lucide/shared, still wip * feat(): unify icon build logic some more, add nonScalingStroke option, marking absoluteStrokeWidth as deprecated * feat(): unify icon build logic some more, add nonScalingStroke option, marking absoluteStrokeWidth as deprecated * feat(packages): extract build logic to @lucide/shared, still wip * feat(): unify icon build logic some more, add nonScalingStroke option, marking absoluteStrokeWidth as deprecated * feat(): unify icon build logic some more, add nonScalingStroke option, marking absoluteStrokeWidth as deprecated * chore(icons): revert git hook changes made to icons * fix(packages/astro,react-native,vue): fix iconNode type fix(packages/vue): fix hasA11yProp * fix(packages/solid): make component reactive & add unit tests for checking prop changes * test(packages/vue): add reactivity tests to @lucide/vue * fix(packages): replace cpy-cli, accidentally removed during main merge * docs(packages): upgrade react documentation with nonScalingStroke * fix(tests): update snapshots for lucide-react * feat(docs): upgraded package guides with nonScalingStroke, dropping absoluteStrokeWidth * fix(vue,react-native): fix linting issues * fix(icons): add proper fallback for icon width in calculatedStrokeWidth * fix(packages/svelte): add globalProps.class to icons * fix(packages/shared): wrap width, height & size in isDefined * Update types.ts * fix(packages/svelte): do not pass propsClass to mergeClasses --------- Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
159 lines
4.6 KiB
Markdown
159 lines
4.6 KiB
Markdown
---
|
|
title: Global Styling - Solid
|
|
description: Learn how to style all Lucide icons globally in your Solid application using CSS or the Lucide context provider.
|
|
---
|
|
|
|
<script setup>
|
|
import Sandpack from '~/.vitepress/theme/components/editors/Sandpack.vue'
|
|
</script>
|
|
|
|
# Global Styling
|
|
|
|
Adjusting icons can be done by using [color](../basics/color.md), [size](../basics/sizing.md) and [stroke width](../basics/stroke-width.md).
|
|
To style all icons globally, you can either use CSS, or use a context provider.
|
|
|
|
We recommend using CSS for global styling, as it is the most straightforward way to achieve this.
|
|
But using CSS prevents you from using props like `size`, `color` and `strokeWidth` on individual icons, since CSS specificity will override these props, to be able to use the props on individual ones you need to use the Lucide context provider.
|
|
|
|
## Context Provider
|
|
|
|
For global styling using a context provider, you can use the `LucideProvider` component that is provided by the `lucide-solid` package.
|
|
|
|
<!-- TODO: Replace this with live example after release -->
|
|
|
|
```tsx
|
|
import { LucideProvider, Home } from 'lucide-solid';
|
|
|
|
const App = () => (
|
|
<LucideProvider
|
|
color="red"
|
|
size={48}
|
|
strokeWidth={2}
|
|
>
|
|
<Home />
|
|
</LucideProvider>
|
|
);
|
|
```
|
|
|
|
This will apply the `color`, `size` and `strokeWidth` props to all icons that are children of the `LucideProvider`.
|
|
|
|
## Style by using CSS
|
|
|
|
Styling icons is easy to accomplish using CSS.
|
|
|
|
Every icon has a class attribute applied called `lucide`. This class name can be used in the CSS file to target all icons that are being used within the app.
|
|
|
|
- The **color** of the icons can be changed using the [`color`](https://developer.mozilla.org/en-US/docs/Web/CSS/color) CSS property.
|
|
- The **size** of the icons can be changed using [`width`](https://developer.mozilla.org/en-US/docs/Web/CSS/width) and [`height`](https://developer.mozilla.org/en-US/docs/Web/CSS/height) CSS properties.
|
|
- The **stroke width** of the icons can be changed using the [`stroke-width`](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width) CSS property.
|
|
|
|
::: sandpack {template=vite-solid editorHeight=300 editorWidthPercentage=60 dependencies="lucide-solid"}
|
|
|
|
```css icon.css [active]
|
|
.lucide {
|
|
/* Change this! */
|
|
color: #ffadff;
|
|
width: 48px;
|
|
height: 48px;
|
|
stroke-width: 1px;
|
|
}
|
|
|
|
.grid {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr 1fr;
|
|
grid-template-rows: 1fr 1fr 1fr;
|
|
gap: 6px;
|
|
}
|
|
```
|
|
|
|
```tsx App.tsx
|
|
import CakeSlice from 'lucide-solid/icons/cake-slice';
|
|
import Candy from 'lucide-solid/icons/candy';
|
|
import Apple from 'lucide-solid/icons/apple';
|
|
import Cookie from 'lucide-solid/icons/cookie';
|
|
import Martini from 'lucide-solid/icons/martini';
|
|
import IceCream2 from 'lucide-solid/icons/ice-cream-2';
|
|
import Sandwich from 'lucide-solid/icons/sandwich';
|
|
import Wine from 'lucide-solid/icons/wine';
|
|
import Dessert from 'lucide-solid/icons/dessert';
|
|
import './icon.css';
|
|
|
|
function App() {
|
|
return (
|
|
<div class="grid">
|
|
<CakeSlice />
|
|
<Candy />
|
|
<Apple />
|
|
<Cookie />
|
|
<Martini />
|
|
<IceCream2 />
|
|
<Sandwich />
|
|
<Wine />
|
|
<Dessert />
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export default App;
|
|
```
|
|
|
|
:::
|
|
|
|
### Non-scaling strokes
|
|
|
|
For global non-scaling stroke width styling the `vector-effect: non-scaling-stroke` CSS property can be applied to the children. This will keep the stroke-width the same size no matter the size of the icon. See [non-scaling strokes](../basics/stroke-width.md#non-scaling-strokes) for more info.
|
|
|
|
::: sandpack {template=vite-solid editorHeight=300 editorWidthPercentage=60 dependencies="lucide-solid"}
|
|
|
|
```css icon.css [active]
|
|
.lucide {
|
|
width: 48px;
|
|
height: 48px;
|
|
stroke-width: 1.5;
|
|
}
|
|
|
|
.lucide * {
|
|
vector-effect: non-scaling-stroke;
|
|
}
|
|
|
|
.grid {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr 1fr;
|
|
grid-template-rows: 1fr 1fr 1fr;
|
|
gap: 6px;
|
|
}
|
|
```
|
|
|
|
```tsx App.tsx
|
|
import TentTree from 'lucide-solid/icons/tent-tree';
|
|
import Caravan from 'lucide-solid/icons/caravan';
|
|
import FlameKindling from 'lucide-solid/icons/flame-kindling';
|
|
import MountainSnow from 'lucide-solid/icons/mountain-snow';
|
|
import Trees from 'lucide-solid/icons/trees';
|
|
import Axe from 'lucide-solid/icons/axe';
|
|
import Map from 'lucide-solid/icons/map';
|
|
import CloudMoon from 'lucide-solid/icons/cloud-moon';
|
|
import Sparkles from 'lucide-solid/icons/sparkles';
|
|
import './icon.css';
|
|
|
|
function App() {
|
|
return (
|
|
<div class="grid">
|
|
<TentTree />
|
|
<Caravan />
|
|
<FlameKindling />
|
|
<MountainSnow />
|
|
<Trees />
|
|
<Axe />
|
|
<Map />
|
|
<CloudMoon />
|
|
<Sparkles />
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export default App;
|
|
```
|
|
|
|
:::
|