DevExtreme React - Icons

Built-In Icon Library

DevExtreme comes with an icon library that provides font icons for all DevExtreme themes. You can use the icons in widgets and in other page elements as they are or customize them.

Available icons are presented below:

Icons in Widgets

Icons can be used in those widgets that have an icon option. For instance, the Button widget has this option on the first level of the configuration object. Icons in the following code samples are taken from the built-in icon library.

jQuery
JavaScript
$(function() {
    $("#saveButton").dxButton({
        icon: "save",
        text: "Save"
    });
});
Angular
HTML
TypeScript
<dx-button
    icon="save"
    text="Save">
</dx-button>
import { DxButtonModule } from "devextreme-angular";
// ...
export class AppComponent {
    // ...
}
@NgModule({
    imports: [
        // ...
        DxButtonModule
    ],
    // ...
})
Vue
<template>
    <DxButton
        icon="save"
        text="Save" />
</template>
<script>
import DxButton from 'devextreme-vue/button';

export default {
    components: {
        DxButton
    }
}
</script>
React
import React from 'react';
import { Button } from 'devextreme-react/button';

class App extends React.Component {
    render() {
        return (
            <Button
                icon="save"
                text="Save"
            />
        );
    }
}

export default App;
ASP.NET MVC Controls
Razor C#
@(Html.DevExtreme().Button()
    .Icon("save")
    .Text("Save")
)

View Demo

Many default templates provide the icon option as well, the ContextMenu widget's default item template being an example:

jQuery
JavaScript
$(function() {
    $("#contextMenuContainer").dxContextMenu({
        // ...
        dataSource: [
            { text: "Zoom In", icon: "plus" },
            { text: "Share", icon: "message" },
            { text: "Download", icon: "download" }
        ]
    });
});
Angular
HTML
TypeScript
<dx-context-menu ... >
    <dxi-item text="Zoom In" icon="plus"></dxi-item>
    <dxi-item text="Share" icon="message"></dxi-item>
    <dxi-item text="Download" icon="download"></dxi-item>
</dx-context-menu>
import { DxContextMenuModule } from "devextreme-angular";
// ...
export class AppComponent {
    // ...
}
@NgModule({
    imports: [
        // ...
        DxContextMenuModule
    ],
    // ...
})
Vue
<template>
    <DxContextMenu ... >
        <DxItem text="Zoom In" icon="plus" />
        <DxItem text="Share" icon="message" />
        <DxItem text="Download" icon="download" />
    </DxContextMenu>
</template>
<script>
import { DxContextMenu, DxItem } from 'devextreme-vue/context-menu';

export default {
    components: {
        DxContextMenu,
        DxItem
    }
}
</script>
React
import React from 'react';
import { ContextMenu, Item } from 'devextreme-react/context-menu';

class App extends React.Component {
    render() {
        return (
            <ContextMenu ... >
                <Item text="Zoom In" icon="plus" />
                <Item text="Share" icon="message" />
                <Item text="Download" icon="download" />
            </ContextMenu>
        );
    }
}

export default App;
ASP.NET MVC Controls
Razor C#
@(Html.DevExtreme().ContextMenu()
    .Items(i => {
        i.Add().Text("Zoom In").Icon("plus");
        i.Add().Text("Share").Icon("message");
        i.Add().Text("Download").Icon("download");
    })
)

To find a list of widgets that support icons, search for "icon" in the left-hand menu.

Icons in Other HTML Elements

If an HTML element should display a DevExtreme icon, add a dx-icon-IconName class to it. We recommend using inline HTML elements (<i> or <span>).

HTML
<i class="dx-icon-email"></i>

You can find icon names in the Built-In Icon Library article.

Customize Icons

Since DevExtreme icons are shipped as an icon font, they can be customized with the same CSS properties that you would use to customize textual content: color, font-size, font-weight, text-align, etc. This is true for icons used in widgets...

jQuery
HTML
JavaScript
CSS
<div id="saveButton"></div>
$(function() {
    $("#saveButton").dxButton({
        icon: "save",
        text: "Save"
    });
});
#saveButton .dx-icon {
    font-size: 24px;
    color: blue;
}
Angular
HTML
TypeScript
CSS
<dx-button
    id="saveButton" 
    icon="save"
    text="Save">
</dx-button>
import { DxButtonModule } from "devextreme-angular";
// ...
export class AppComponent {
    // ...
}
@NgModule({
    imports: [
        // ...
        DxButtonModule
    ],
    // ...
})
::ng-deep #saveButton .dx-icon {
    font-size: 24px;
    color: blue;
}
Vue
<template>
    <DxButton
        id="saveButton"
        icon="save"
        text="Save" />
</template>
<script>
import DxButton from 'devextreme-vue/button';

export default {
    components: {
        DxButton
    }
}
</script>
<style>
#saveButton .dx-icon {
    font-size: 24px;
    color: blue;
}
</style>
React
JavaScript
CSS
import React from 'react';
import { Button } from 'devextreme-react/button';

class App extends React.Component {
    render() {
        return (
            <Button
                id="saveButton"
                icon="save"
                text="Save"
            />
        );
    }
}

export default App;
#saveButton .dx-icon {
    font-size: 24px;
    color: blue;
}
ASP.NET MVC Controls
Razor C#
CSS
@(Html.DevExtreme().Button()
    .ID("saveButton")
    .Icon("save")
    .Text("Save")
)
#saveButton .dx-icon {
    font-size: 24px;
    color: blue;
}

... and for icons used in any other HTML elements:

HTML
CSS
<i class="dx-icon-email dx-icon-custom-style"></i>
.dx-icon-custom-style {
    font-size: 24px;
    color: blue;
}

dx-icon is a CSS class added to icon elements when DevExtreme widgets render them into the DOM. You cannot use another name for it. However, it is not true for icons in other HTML elements. You can use any name for the class in this case, as demonstrated in the previous example.

Custom Images as Icons

The widget's icon option accepts URLs, so you can assign the image's URL to it. However, it is better to encode the image in the Base64 type instead to reduce the amount of transferred data. Search for an image to Base64 converter on the web.

Although Base64 code can be assigned directly to the icon option, we recommend placing it in the CSS because of its length. Add the following CSS rule to your stylesheet:

CSS
.dx-icon-customicon { // in Angular apps, add ::ng-deep before
    background-image: url(data:image/png;base64,... LONG BASE64 CODE IS HERE ...);
    background-repeat: no-repeat;
    background-position: 0px 0px;
}

customicon here is the icon's name that you should assign to the widget's icon option.

In addition, you can provide a specific icon variant for different states of a widget element. In the following code, a special icon is provided for selected tabs:

CSS
.dx-tab-selected .dx-icon-customicon {
    background-image: url(data:image/png;base64,... LONG BASE64 CODE GOES HERE ...);
    background-repeat: no-repeat;
    background-position: 0px 0px;
}

Classes like dx-tab-selected from the previous example are not documented. Inspect CSS rules to find out which classes are added to the widget element you are customizing.

External Icon Libraries

Icons in widgets are inserted into the DOM as <i> elements. When you set a widget's icon option, its value is used to form the class attribute of the <i> element. For instance, the code below ...

icon: "home"

... renders into the DOM as follows:

HTML
<i class="dx-icon dx-icon-home"></i>

This allows DevExtreme widgets to support icons from external icon libraries, provided that they too should be specified in the class attribute.

Font Awesome, Glyphicons, and Ionicons are examples of such libraries. Follow the installation tutorial for the library you want to use and set the icon option as follows:

jQuery
JavaScript
$(function() {
    $("#homeButton").dxButton({
        icon: "fas fa-home" // Font Awesome 5
        icon: "fa fa-home" // Font Awesome 4
        icon: "glyphicon glyphicon-home" // Glyphicons
        icon: "icon ion-md-home" // Ionicons
    });
});
Angular
HTML
<dx-button ... 
    icon="fas fa-home" <!-- Font Awesome 5 -->
    icon="fa fa-home" <!-- Font Awesome 4 -->
    icon="glyphicon glyphicon-home" <!-- Glyphicons -->
    icon="icon ion-md-home"> <!-- Ionicons -->
</dx-button>
Vue
<template>
    <DxButton ... 
        icon="fas fa-home" <!-- Font Awesome 5 -->
        icon="fa fa-home" <!-- Font Awesome 4 -->
        icon="glyphicon glyphicon-home" <!-- Glyphicons -->
        icon="icon ion-md-home" /> <!-- Ionicons -->
</template>
<script>
import DxButton from 'devextreme-vue/button';

export default {
    components: {
        DxButton
    }
}
</script>
React
import React from 'react';
import { Button } from 'devextreme-react/button';

class App extends React.Component {
    render() {
        return (
            <Button
                icon="fas fa-home" // Font Awesome 5
                icon="fa fa-home" // Font Awesome 4
                icon="glyphicon glyphicon-home" // Glyphicons
                icon="icon ion-md-home" // Ionicons
            />
        );
    }
}

export default App;
ASP.NET MVC Controls
Razor C#
@(Html.DevExtreme().Button()
    .Icon("fas fa-home") // Font Awesome 5
    .Icon("fa fa-home") // Font Awesome 4
    .Icon("glyphicon glyphicon-home") // Glyphicons
    .Icon("icon ion-md-home") // Ionicons
)

SVG Icons

You can use SVG icons instead of font icons. The following code demonstrates how to use them in the Button widget. The same technique can be used for widgets with the icon option.

An SVG icon can be specified as follows:

  1. By the URL:

    JavaScript
    new DevExpress.ui.dxButton(targetElement, {
        icon: "https://js.devexpress.com/Content/data/loadingIcons/rolling.svg"
    });
  2. Inserted inline:

    JavaScript
    new DevExpress.ui.dxButton(targetElement, {
        icon: "<svg>SVG_CONTENT</svg>"
    });
  3. Imported:

    JavaScript
    import * as myIcon from "./assets/icon.svg";
    new DevExpress.ui.dxButton(targetElement, {
        icon: myIcon
    });
IMPORTANT
The SVG format allows you to run executable code that might be malicious. It is strongly recommended that you use SVG icons only from trusted sources.