Vue Stepper - Accessibility

Accessibility Features Overview

NOTE
The overall accessibility level of your application depends on the Stepper features you use.
Accessibility Requirement Support Level
Right-to-Left Support
Keyboard Navigation Support
Screen Reader Support
Contrast Color Theme
Mobile Device Support
Lighthouse Accessibility Validation
Axe Accessibility Validation
WAVE Accessibility Validation
Section 508 Support
WCAG 2.x Support
  • - All component features meet the requirement
  • - Some component features may not meet the requirement
  • - Accessibility requirement is not supported

Accessibility Standards Compliance

The Stepper component meets a variety of Section 508 and WCAG 2.x compliance standards. Known exceptions:

Section 508 criteria WCAG 2.x criteria Exception description
501 (Web)(Software)
504.2 (Authoring Tool)
602.3 (Support Docs)
1.4.3 Contrast (Minimum) (Level AA)
1.4.11 Non-text Contrast (Level AA 2.1 and 2.2)
Stepper does not support Windows High Contrast themes.

The component also complies with the European Accessibility Act (EAA) and Americans with Disabilities Act (ADA) directives.

Keyboard Navigation

A user can use the following keys to interact with the Stepper component:

Key Action
← → ↑ ↓
PageUp, PageDown
Moves focus between steps. Focused steps are automatically selected if selectOnFocus is true.
Home, End Moves focus to the first step and last step when linear is set to false. When linear is set to true, acts like the arrow keys.
Enter or Space Selects a step if selectOnFocus is set to false.

Use the registerKeyHandler(key, handler) method to implement a custom handler for a key.

jQuery
JavaScript
function registerKeyHandlers () {
    const stepper = $("#stepperContainer").dxStepper("instance");
    stepper.registerKeyHandler("backspace", function(e) {
        // The argument "e" contains information on the event
    });
    stepper.registerKeyHandler("space", function(e) {
        // ...
    });
}
Angular
TypeScript
import { ..., ViewChild, AfterViewInit } from '@angular/core';
import { DxStepperModule, DxStepperComponent } from 'devextreme-angular';
// ...
export class AppComponent implements AfterViewInit {
    @ViewChild(DxStepperComponent, { static: false }) stepper: DxStepperComponent;
    // Prior to Angular 8
    // @ViewChild(DxStepperComponent) stepper: DxStepperComponent;

    ngAfterViewInit () {
        this.stepper.instance.registerKeyHandler('backspace', function(e) {
            // The argument "e" contains information on the event
        });
        this.stepper.instance.registerKeyHandler('space', function(e) {
            // ...
        });
    }
}
@NgModule({
    imports: [
        // ...
        DxStepperModule
    ],
    // ...
})
Vue
<template>
    <DxStepper :ref="myStepperRef" />
</template>
<script>
import 'devextreme/dist/css/dx.light.css';

import DxStepper from 'devextreme-vue/stepper';

const myStepperRef = 'my-stepper';

export default {
    components: {
        DxStepper
    },
    data() {
        return {
            myStepperRef
        }
    },
    computed: {
        stepper: function() {
            return this.$refs[myStepperRef].instance;
        }
    },
    mounted: function() {
        this.stepper.registerKeyHandler('backspace', function(e) {
            // The argument "e" contains information on the event
        });
        this.stepper.registerKeyHandler('space', function(e) {
            // ...
        });
    }
}
</script>
React
App.js
import React from 'react';
import 'devextreme/dist/css/dx.light.css';

import { Stepper } from 'devextreme-react/stepper';

class App extends React.Component {
    constructor(props) {
        super(props);

        this.stepperRef = React.createRef();
    }

    render() {
        return (
            <Stepper ref={this.stepperRef} />
        );
    }

    get stepper() {
        return this.stepperRef.current.instance();
    }

    componentDidMount() {
        this.stepper.registerKeyHandler('backspace', function(e) {
            // The argument "e" contains information on the event
        });
        this.stepper.registerKeyHandler('space', function(e) {
            // ...
        });
    }
}

export default App;

Screen Reader Support

The Stepper component supports screen readers and complies to WAI-ARIA standards.

Use elementAttr to specify the aria-label:

jQuery
index.js
index.html
$('#customStepper').dxStepper({
    // ...
    elementAttr: { 'aria-labelledby': 'label-customStepper' },
});
<div id="label-customStepper">Custom Stepper</div>
<div id="customStepper"></div>
Angular
app.component.ts
<div id="label-customStepper">Custom Stepper</div>
<dx-stepper ...
    [elementAttr]="{ 'aria-labelledby': 'label-customStepper' }"
>
</dx-stepper>
Vue
App.vue
<template>
    <div id="label-customStepper">Custom Stepper</div>
    <DxStepper ... 
        :element-attr="{ 'aria-labelledby': 'label-customStepper' }"
    />
</template>
React
App.tsx
export default function App() {
    return (
        <>
            <div id="label-customStepper">Custom Stepper</div>
            <Stepper ...
                elementAttr={{ 'aria-labelledby': 'label-customStepper' }}
            />
        </>
    );
}