Help us shape the 2021 DevExtreme Roadmap. Take our 5 minute survey.
Dismiss
Your search did not match any results.
Accordion

Accordion

Documentation

The Accordion widget contains several panels displayed one under another. These panels can be collapsed or expanded by a user, which makes this widget very useful for presenting information in a limited amount of space.

Copy to CodeSandBox
Apply
Reset
<div id="accordion"> <dx-accordion #accordion [dataSource]="companies" [collapsible]="false" [multiple]="false" [animationDuration]="300" [selectedItems]="[companies[0]]"> <div *dxTemplate="let company of 'title'"> <h1>{{company.CompanyName}}</h1> </div> <div *dxTemplate="let company of 'item'"> <div> <p> <b>{{company.City}}</b> (<span>{{company.State}}</span>) </p> <p> <span>{{company.Zipcode}}</span> <span>{{company.Address}}</span> </p> </div> <div> <p> Phone: <b>{{company.Phone}}</b> </p> <p> Fax: <b>{{company.Fax}}</b> </p> <p> Website: <a href="{{company.Website}}" target="_blank"> {{company.Website}} </a> </p> </div> </div> </dx-accordion> <div class="selected-data"> <span class="caption">Selected Items</span> <dx-tag-box [dataSource]="companies" displayExpr="CompanyName" [(value)]="accordion.selectedItems" [disabled]="!accordion.multiple" ></dx-tag-box> </div> <div class="options"> <div class="caption">Options</div> <div class="option"> <dx-check-box text="Multiple enabled" [(value)]="accordion.multiple" ></dx-check-box> </div> <div class="option"> <dx-check-box text="Collapsible enabled" [(value)]="accordion.collapsible" ></dx-check-box> </div> <div class="option"> <span>Animation duration</span> <dx-slider [min]="0" [max]="1000" [(value)]="accordion.animationDuration" > <dxo-tooltip [enabled]="true" position="bottom"></dxo-tooltip> <dxo-label [visible]="true"></dxo-label> </dx-slider> </div> </div> </div>
import { NgModule, Component, enableProdMode } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxAccordionModule, DxCheckBoxModule, DxSliderModule, DxTagBoxModule, DxTemplateModule } from 'devextreme-angular'; import { Company, Service } from './app.service'; if(!/localhost/.test(document.location.host)) { enableProdMode(); } @Component({ selector: 'demo-app', templateUrl: 'app/app.component.html', styleUrls: ['app/app.component.css'], providers: [Service], preserveWhitespaces: true }) export class AppComponent { companies: Company[]; constructor(service: Service) { this.companies = service.getCompanies(); } } @NgModule({ imports: [ BrowserModule, DxAccordionModule, DxCheckBoxModule, DxSliderModule, DxTagBoxModule, DxTemplateModule ], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
::ng-deep #accordion h1 { font-size: 20px; } ::ng-deep #accordion h1, ::ng-deep #accordion p { margin: 0; } ::ng-deep .dx-theme-material #accordion .dx-accordion-item-opened .dx-accordion-item-title { display: flex; } ::ng-deep .dx-theme-material #accordion .dx-accordion-item-opened h1 { align-self: center; } ::ng-deep .options, ::ng-deep .selected-data { padding: 20px; background-color: rgba(191, 191, 191, 0.15); margin-top: 20px; } ::ng-deep .selected-data { position: relative; height: 36px; } ::ng-deep .selected-data > .caption { position: relative; top: 5px; margin-right: 10px; font-weight: bold; font-size: 115%; } ::ng-deep .selected-data > .dx-widget { position: absolute; left: 140px; right: 20px; top: 20px; } ::ng-deep .options > .caption { font-weight: 500; font-size: 18px; } ::ng-deep .option { margin-top: 10px; }
import { Injectable } from '@angular/core'; export class Company { ID: number; CompanyName: string; Address: string; City: string; State: string; Zipcode: number; Phone: string; Fax: string; Website: string; } let companies: Company[] = [{ "ID": 1, "CompanyName": "Super Mart of the West", "Address": "702 SW 8th Street", "City": "Bentonville", "State": "Arkansas", "Zipcode": 72716, "Phone": "(800) 555-2797", "Fax": "(800) 555-2171", "Website": "http://www.nowebsitesupermart.com" }, { "ID": 2, "CompanyName": "Electronics Depot", "Address": "2455 Paces Ferry Road NW", "City": "Atlanta", "State": "Georgia", "Zipcode": 30339, "Phone": "(800) 595-3232", "Fax": "(800) 595-3231", "Website": "http://www.nowebsitedepot.com" }, { "ID": 3, "CompanyName": "K&S Music", "Address": "1000 Nicllet Mall", "City": "Minneapolis", "State": "Minnesota", "Zipcode": 55403, "Phone": "(612) 304-6073", "Fax": "(612) 304-6074", "Website": "http://www.nowebsitemusic.com" }, { "ID": 4, "CompanyName": "Tom's Club", "Address": "999 Lake Drive", "City": "Issaquah", "State": "Washington", "Zipcode": 98027, "Phone": "(800) 955-2292", "Fax": "(800) 955-2293", "Website": "http://www.nowebsitetomsclub.com" }]; @Injectable() export class Service { getCompanies(): Company[] { return companies; } }
// In real applications, you should not transpile code in the browser. You can see how to create your own application with Angular and DevExtreme here: // https://js.devexpress.com/Documentation/Guide/Angular_Components/Getting_Started/Create_a_DevExtreme_Application/ System.config({ transpiler: 'ts', typescriptOptions: { module: "system", emitDecoratorMetadata: true, experimentalDecorators: true }, meta: { 'typescript': { "exports": "ts" }, 'devextreme/localization.js': { "esModule": true } }, paths: { 'npm:': 'https://unpkg.com/' }, map: { 'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js', 'typescript': 'npm:typescript@3.5.3/lib/typescript.js', '@angular': 'npm:@angular', 'tslib': 'npm:tslib@2.0.3/tslib.js', 'rxjs': 'npm:rxjs@6.3.3', 'rrule': 'npm:rrule@2.6.6/dist/es5/rrule.js', 'luxon': 'npm:luxon@1.25.0/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign@1.1.0', 'devextreme': 'npm:devextreme@20.2.4', 'jszip': 'npm:jszip@3.5.0/dist/jszip.min.js', 'devextreme-quill': 'npm:devextreme-quill@0.9.7/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.0.5', 'devexpress-gantt': 'npm:devexpress-gantt@2.0.8', 'devextreme-angular': 'npm:devextreme-angular@20.2.4', 'preact': 'npm:preact@10.5.7/dist/preact.js', 'preact/hooks': 'npm:preact@10.5.7/hooks/dist/hooks.js' }, packages: { 'app': { main: './app.component.ts', defaultExtension: 'ts' }, 'devextreme': { defaultExtension: 'js' }, 'devextreme/events/utils': { main: 'index' }, 'devextreme/events': { main: 'index' }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js' } }, packageConfigPaths: [ "npm:@angular/*/package.json", "npm:@angular/common/*/package.json", "npm:rxjs/package.json", "npm:rxjs/operators/package.json", "npm:devextreme-angular/*/package.json", "npm:devextreme-angular/ui/*/package.json", "npm:devextreme-angular/package.json", "npm:devexpress-diagram/package.json", "npm:devexpress-gantt/package.json", ] });
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.4/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.4/css/dx.light.css" /> <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script> <script src="https://unpkg.com/zone.js@0.10.2/dist/zone.js"></script> <script src="https://unpkg.com/reflect-metadata@0.1.3/Reflect.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script src="config.js"></script> <script> System.import('app').catch(console.error.bind(console)); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <demo-app>Loading...</demo-app> </div> </body> </html>