* 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>
4.7 KiB
title, description
| title | description |
|---|---|
| Global Styling - Angular | Learn how to style all icons globally in your Angular application using CSS or the provideLucideConfig provider. |
Global Styling
Lucide icons can be customized using the inputs for color, size and stroke width.
To style all icons globally, you can either use CSS or configure global defaults using provideLucideConfig.
We recommend using CSS for global styling, as it is the most straightforward approach. However, CSS rules may override the size, color, and strokeWidth inputs on individual icons. If you need to keep those inputs configurable per icon, use provideLucideConfig instead.
Configuring global defaults
Lucide Angular provides the provideLucideConfig provider to set default properties for all icons.
You can define global defaults (such as size, color, or strokeWidth) while still allowing individual icons to override them through inputs.
Register the provider in your application configuration or in a top-level component:
import { ApplicationConfig } from '@angular/core';
import { provideLucideConfig } from '@lucide/angular';
export const appConfig: ApplicationConfig = {
providers: [
provideLucideConfig({
strokeWidth: 1.5,
}),
],
};
Style by using CSS
Styling icons globally can be done using CSS.
All Lucide icons include the lucide class. You can use this class in your styles to target every icon in your application.
- The color of the icons can be changed using the
colorproperty. - The size of the icons can be changed using
widthandheight. - The stroke width of the icons can be changed using
stroke-width.
::: sandpack {template=angular editorHeight=300 dependencies="@lucide/angular"}
.lucide {
/* Change this! */
color: #ffadff;
width: 56px;
height: 56px;
stroke-width: 1px;
}
.grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr;
gap: 6px;
}
import { Component, ViewEncapsulation } from '@angular/core';
import {
LucideCakeSlice,
LucideCandy,
LucideApple,
LucideCookie,
LucideMartini,
LucideIceCream2,
LucideSandwich,
LucideWine,
LucideDessert,
} from '@lucide/angular';
@Component({
selector: 'app',
imports: [
LucideCakeSlice,
LucideCandy,
LucideApple,
LucideCookie,
LucideMartini,
LucideIceCream2,
LucideSandwich,
LucideWine,
LucideDessert,
],
template: `<div class="grid">
<svg lucideCakeSlice />
<svg lucideCandy />
<svg lucideApple />
<svg lucideCookie />
<svg lucideMartini />
<svg lucideIceCream2 />
<svg lucideSandwich />
<svg lucideWine />
<svg lucideDessert />
</div>`,
styleUrls: ['./app.component.css', './icon.css'],
encapsulation: ViewEncapsulation.None,
})
export class App {}
:::
Non-scaling strokes
To keep the stroke width constant regardless of icon size, apply vector-effect: non-scaling-stroke to the icon's children. See non-scaling strokes for more details.
::: sandpack {template=angular editorHeight=300 dependencies="@lucide/angular"}
.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;
}
import { Component, ViewEncapsulation } from '@angular/core';
import {
LucideTentTree,
LucideCaravan,
LucideFlameKindling,
LucideMountainSnow,
LucideTrees,
LucideAxe,
LucideMap,
LucideCloudMoon,
LucideSparkles,
} from '@lucide/angular';
@Component({
selector: 'app',
imports: [
LucideTentTree,
LucideCaravan,
LucideFlameKindling,
LucideMountainSnow,
LucideTrees,
LucideAxe,
LucideMap,
LucideCloudMoon,
LucideSparkles,
],
template: `<div class="grid">
<svg lucideTentTree />
<svg lucideCaravan />
<svg lucideFlameKindling />
<svg lucideMountainSnow />
<svg lucideTrees />
<svg lucideAxe />
<svg lucideMap />
<svg lucideCloudMoon />
<svg lucideSparkles />
</div>`,
styleUrls: ['./app.component.css', './icon.css'],
encapsulation: ViewEncapsulation.None,
})
export class App {}
:::