Off Canvas

Used to present secondary content or navigation which could be a part of the page but due to limited screen real-estate, or to focus user attention, sits just outside screen until triggered by the user.

Coded Components

Helper classes: Looking for a complete list of helper classes for these components?View helper classes

Redlines: We don't include redline comps because it's always more accurate to use developer tools to inspect the coded components, or a plugin such as the Prism Redline Tool.

Off Canvas

<div> <!-- The first div is used as a full screen background overlay. There are a few components that use this overlay so it only needs to be added once preferably at the top of the page below the body tag. This is a usable example. <div id="dds__full-screen-overlay" class="dds__overlay"></div> --> <div id="exampleModalOffcanvas" tabindex="-1" class="dds__modal dds__modal-offcanvas" role="dialog" aria-labelledby="dds__modal-title3"> <!-- <div class="dds__modal-dialog" role="document"> --> <div class="dds__modal-content"> <div class="dds__container-fluid dds__p-1"> <div class="dds__row"> <div class="dds__col-6"> <button class="dds__btn dds__btn-link" data-dismiss="dds__modal" aria-label="Back"> <i class="dds__icons dds__chevron-left" aria-hidden="true"></i> <span>Back</span> </button> </div> </div> </div> <div class="dds__modal-body"> <h2 id="dds__modal-title3">Offcanvas Header</h2> <div class="dds__tabs-container"> <ul class="dds__tabs dds__mb-4" role="tablist" aria-label="Example description of tabs"> <li role="none"> <button id="home-tab-default" class="dds__tab-link dds__active" data-toggle="dds__tab" data-target="#exampleResponsiveTab" role="tab" aria-controls="home-default" aria-selected="true"> Home <i class="dds__icons dds__chevron-right dds__tab-icon" aria-hidden="true"></i> </button> </li> <li role="none"> <button id="profile-tab-default" class="dds__tab-link" tabindex="-1" data-toggle="dds__tab" data-target="#exampleResponsiveTab" role="tab" aria-controls="profile-default" aria-selected="false"> Profile <i class="dds__icons dds__chevron-right dds__tab-icon" aria-hidden="true"></i> </button> </li> <li role="none"> <button id="contact-tab-default" class="dds__tab-link" tabindex="-1" data-toggle="dds__tab" data-target="#exampleResponsiveTab" role="tab" aria-controls="contact-default" aria-selected="false"> Contact <i class="dds__icons dds__chevron-right dds__tab-icon" aria-hidden="true"></i> </button> </li> </ul> <div class="dds__tab-content"> <div id="home-default" class="dds__tab-pane dds__fade dds__show dds__active" role="tabpanel" tabindex="0" aria-labelledby="home-tab-default"> <p>Home content</p> <p> Bacon ipsum dolor amet pork pig turkey prosciutto filet mignon. Landjaeger doner pork belly fatback, jerky porchetta ham filet mignon ribeye jowl short ribs beef ribs meatball. Prosciutto kevin venison ham biltong cupim landjaeger ribeye. Short ribs pig beef ribs biltong kielbasa tenderloin strip steak boudin shoulder bresaola. Hamburger alcatra chuck andouille prosciutto pancetta. </p> <p> Ham hock chicken jowl, strip steak landjaeger shoulder andouille pork chop fatback ham biltong brisket. Ribeye jerky cow porchetta shank turkey bacon tenderloin ham venison kevin biltong pig bresaola swine. Cupim prosciutto venison tri-tip fatback porchetta drumstick burgdoggen shank strip steak bresaola ham hock. Biltong landjaeger beef, short ribs drumstick bresaola fatback pork loin pork chop bacon kielbasa chuck brisket venison tail. Jowl swine shoulder brisket. </p> </div> <div id="profile-default" class="dds__tab-pane dds__fade" role="tabpanel" tabindex="0" aria-labelledby="profile-tab-default"><p>Profile content</p></div> <div id="contact-default" class="dds__tab-pane dds__fade" role="tabpanel" tabindex="0" aria-labelledby="contact-tab-default"><p>Contact content</p></div> </div> </div> <form data-toggle="dds__form-validation" novalidate> <div class="dds__form-group"> <label for="modal-emailInput-validation">Email label</label> <input type="email" class="dds__form-control" maxlength="256" name="email" id="modal-emailInput-validation" required aria-invalid="false" aria-describedby="" /> <div class="dds__invalid-feedback" id="modal-emailInput-validationFeedback"> Please enter your email. </div> </div> <div class="dds__form-row"> <div class="dds__col-md-4 dds__mb-3"> <label for="modal-firstnameInput-validation">First name</label> <input type="text" class="dds__form-control" id="modal-firstnameInput-validation" required aria-invalid="false" aria-describedby="" /> <div class="dds__invalid-feedback" id="modal-firstnameInput-validationFeedback"> Please enter your first name. </div> </div> <div class="dds__col-md-4 dds__mb-3"> <label for="modal-lastnameInput-validation">Last name</label> <input type="text" class="dds__form-control" id="modal-lastnameInput-validation" required aria-invalid="false" aria-describedby="" /> <div class="dds__invalid-feedback" id="modal-lastnameInput-validationFeedback"> Please enter your last name. </div> </div> <div class="dds__col-md-4 dds__mb-3"> <label for="modal-usernameInput-validation">Username</label> <input type="text" class="dds__form-control" id="modal-usernameInput-validation" required aria-invalid="false" aria-describedby="" /> <div class="dds__invalid-feedback" id="modal-usernameInput-validationFeedback"> Please choose a username. </div> </div> </div> <div class="dds__form-row"> <div class="dds__col-md-6 dds__mb-3"> <label for="modal-cityInput-validation">City</label> <input type="text" class="dds__form-control" id="modal-modal-cityInput-validation" required aria-invalid="false" aria-describedby="" /> <div class="dds__invalid-feedback" id="modal-cityInput-validationFeedback"> Please provide a valid city. </div> </div> <div class="dds__col-md-3 dds__mb-3"> <label for="modal-stateInput-validation">State</label> <input type="text" placeholder="texas" class="dds__form-control" id="modal-stateInput-validation" required aria-invalid="false" aria-describedby="" /> <div class="dds__invalid-feedback" id="modal-stateInput-validationFeedback"> Please provide a valid state. </div> </div> <div class="dds__col-md-3 dds__mb-3"> <label for="modal-zipcodeInput-validation">Zip</label> <input id="modal-zipcodeInput-validation" type="text" placeholder="#####" pattern="[1-9]{1}[0-9]{4}" class="dds__form-control dds__input-masked" data-charset="XXXXX" required pattern="^[0-9]{5}(?:-9]{4})?$" aria-invalid="false" aria-describedby="" /> <div class="dds__invalid-feedback" id="modal-zipcodeInput-validationFeedback"> Please provide a valid zip. </div> </div> </div> <div class="dds__form-row"> <div class="dds__col-md-3 dds__mb-3"> <label for="modal-phoneInput-validation">Phone</label> <input id="modal-phoneInput-validation" type="text" placeholder="(___) ___-____" set-cursor="1" pattern="\([1-9]{1}[0-9]{2}\) [0-9]{3}-[0-9]{4}" class="dds__form-control dds__input-masked" data-charset="(XXX) XXX-XXXX" required /> <div class="dds__invalid-feedback" id="modal-phoneInput-validationFeedback"> Please provide a valid phone. </div> </div> </div> <button class="dds__btn dds__btn-primary" type="submit">Submit form</button> </form> </div> </div> <!-- </div> --> </div> <!-- Button trigger modal --> <button role="button" class="dds__btn dds__btn-primary" data-toggle="dds__modal" data-target="#exampleModalOffcanvas">Open Off Canvas</button>

No items found.

No items found.

No items found.


No items found.


An off canvas is a modal drawer that slides in from the right.

The page behind becomes frozen while an off canvas is open.

The browser scroll bar (or facsimile) controls the off canvas content while it's open instead of the page behind.

On larger breakpoints, an off canvas takes over a maximum of 10/12 columns, leaving a portion of the main screen visible.

On smaller breakpoints, the off canvas takes over the entire screen.

  • On smaller breakpoints, tabs become a vertical CTA list that each opens its own off-canvas.

You can override the default width of an off canvas by applying one of the following classes to dds__modal-offcanvas:

  • dds__modal-width-25
  • dds__modal-width-50
  • dds__modal-width-75
  • dds__modal-width-100

The off canvas masthead is a fixed element that remains in its persistent location as the user scrolls.

To close an off canvas, either select the left-most CTA in its masthead (typically "< Back") or on a touchscreen swipe it to the right.

Do's and Don'ts

Common Button Labels and Usage

Title case, 2-3 words maximum.
Do not combine actions in a label (exception: "Customize & Buy").
If standard labels don't fit the button's purpose, align label with the task the user is attempting.

Please refer to the Dell Technologies branding website,, for further information regarding call-to-action labels and usage.

Button Label:
Corresponding Action:
Add to Cart
Sign In/Sign Out
View Details
Learn More
Takes users to Cart page, with item added
Used for search buttons
Takes users back to entry point for a task
Used to save an item
Navigates users to change an item
Deletes an item on the page, usually with a verification step
Used as progression
Used as forward and backward navigation (Next is primary, Previous is secondary)
Used to submit a task or info
Used for choosing items in a task flow
Authentication standard, for consistency do not use Log In/Log Out or Signin/Signout
Used instead of “Select” in cases of product details or within learn content
For use in modal verification steps when more specific CTAs will not fit due to space
Used to link users to more learning content or contextual help
Used within modal windows


The W3C Web Accessibility Initiative (WAI) develops standards and support materials to help you understand and implement accessibility.

An off canvas is highly similar to a modal.

Please follow the best practices for modal dialogs from WAI-ARIA authoring practices 1.1.

Please also refer to these recommendations for dialogs from WAI-ARIA 1.1.

You may refer to these examples of modal dialogs from WAI-ARIA practices 1.1.