Dialogs
Dialogs inform users about a task and can contain critical information, require decisions, or involve multiple tasks.
A Dialog is a type of modal window that appears in front of app content to provide critical information or ask for a decision. Dialogs disable all app functionality when they appear, and remain on screen until confirmed, dismissed, or a required action has been taken.
Dialogs are purposefully interruptive, so they should be used sparingly.
Simple Dialogs
Simple dialogs can provide additional details or actions about a list item. For example, they can display avatars, icons, clarifying subtext, or orthogonal actions (such as adding an account).
Touch mechanics:
- Choosing an option immediately commits the option and closes the menu
- Touching outside of the dialog, or pressing Back, cancels the action and closes the dialog
Alerts
Alerts are urgent interruptions, requiring acknowledgement, that inform the user about a situation.
Most alerts don't need titles. They summarize a decision in a sentence or two by either:
- Asking a question (e.g. "Delete this conversation?")
- Making a statement related to the action buttons
Use title bar alerts only for high-risk situations, such as the potential loss of connectivity. Users should be able to understand the choices based on the title and button text alone.
If a title is required:
- Use a clear question or statement with an explanation in the content area, such as "Erase USB storage?".
- Avoid apologies, ambiguity, or questions, such as “Warning!” or “Are you sure?”
You can also swap out the transition, the next example uses Slide
.
Form dialogs
Form dialogs allow users to fill out form fields within a dialog. For example, if your site prompts for potential subscribers to fill in their email address, they can fill out the email field and touch 'Submit'
Customized dialog
If you have been reading the overrides documentation page
but you are not confident jumping in,
here is one example of how you can customize the DialogTitle
to support a close button.
⚠️ While the material design specification encourages theming, this example is off the beaten path.
Optional sizes
You can set a dialog maximum width by using the maxWidth
enumerable in combination with the fullWidth
boolean.
When the fullWidth
property is true, the dialog will adapt based on the maxWidth
value.
Responsive full-screen
You may make a dialog responsively full screen the dialog using withMobileDialog
. By default, withMobileDialog()(Dialog)
responsively full screens at or below the sm
screen size. You can choose your own breakpoint for example xs
by passing the breakpoint
argument: withMobileDialog({breakpoint: 'xs'})(Dialog)
.
Confirmation dialogs
Confirmation dialogs require users to explicitly confirm their choice before an option is committed. For example, users can listen to multiple ringtones but only make a final selection upon touching “OK.”
Touching “Cancel” in a confirmation dialog, or pressing Back, cancels the action, discards any changes, and closes the dialog.
Accessibility
Be sure to add aria-labelledby="id..."
, referencing the modal title, to the Dialog
. Additionally, you may give a description of your modal dialog with the aria-describedby="id..."
property on the Dialog
.
Scrolling long content
When dialogs become too long for the user’s viewport or device, they scroll.
scroll=paper
the content of the dialog scrolls within the paper element.scroll=body
the content of the dialog scrolls within the body element.
Try the demo below to see what we mean:
Draggable dialog
You can create a draggable dialog by using react-draggable.
To do so, you can pass the the imported Draggable
component as the PaperComponent
of the Dialog
component.
This will make the entire dialog draggable.
Performance
Follow the Modal performance section.