Modals
Import
Import the settings, the modal, the bodys, and the button scss files.
Note that you can also implement in addition the scss file of the links if you use this component in your modals.
@import 'settings-tools/_all-settings';
@include import-font-families();
@import 'typography/_t.bodys';@import 'components/_c.modal';@import 'components/_c.button';
Usage
A modal is composed of several zones:
- A header with the class :
mc-modal__header - A body with class:
mc-modal__body - A footer with class:
mc-modal__footer
These areas are then encompassed in:
- A specific container with the class:
mc-modal__dialog - A global wrapper with the class:
mc-modal
<div class="example"> <div class="mc-modal" tabindex="-1" role="dialog" aria-labelledby="modalTitle" aria-hidden="true" > <div class="mc-modal__dialog" role="document"> <div class="mc-modal__header"> <h2 class="mc-modal__title" id="modalTitle">Modal Title</h2> <button class="mc-modal__close" type="button"> <span class="mc-modal__close-text">Close</span> </button> </div> <div class="mc-modal__body"> <article class="mc-modal__content"> <h3 class="mc-modal__heading">Title</h3> <p class="mt-body-m">Content paragraph</p> </article> </div> <div class="mc-modal__footer"> <button type="button" class="mc-button"> <span class="mc-button__label">Button label</span> </button> </div> </div> </div></div>
Detail of areas
In more detail, it should be noted that each of the fields mentioned above may contain other elements. Thus:
The header
The header contains:
- the title of the modal (
.mc-modal__title) - as well as its close button (
.mc-modal__close)
These elements are mandatory and must always be present in your modal code.
The body
The body can contain:
- a heading (
.mc-modal__heading) - as well as paragraph elements (
.mt-body-m)
Note that the heading is an optional element
The footer
The footer is the area that allows you to insert call-to-actions. This zone must always be present in your modals, and can contain one or more elements. See details about the footer.
Note that call to actions always take 100% of the modal's width on
breakpoint-s.
<div class="example"> <div class="mc-modal" tabindex="-1" role="dialog" aria-labelledby="modalTitle" aria-hidden="true" > <div class="mc-modal__dialog" role="document"> <div class="mc-modal__header"> <h2 class="mc-modal__title" id="modalTitle">Modal Title</h2> <button class="mc-modal__close" type="button"> <span class="mc-modal__close-text">Close</span> </button> </div> <div class="mc-modal__body"> <article class="mc-modal__content"> <h3 class="mc-modal__heading">Title</h3> <p class="mt-body-m">Content paragraph</p> </article> </div> <div class="mc-modal__footer"> <button type="button" class="mc-button"> <span class="mc-button__label">Button label</span> </button> </div> </div> </div></div>
Variations
Without heading
In cases where it is not necessary, you can use a modal without heading, as follows:
<div class="example"> <div class="mc-modal" tabindex="-1" role="dialog" aria-labelledby="modalTitle" aria-hidden="true" > <div class="mc-modal__dialog" role="document"> <div class="mc-modal__header"> <h2 class="mc-modal__title" id="modalTitle">Modal Title</h2> <button class="mc-modal__close" type="button"> <span class="mc-modal__close-text">Close</span> </button> </div> <div class="mc-modal__body"> <article class="mc-modal__content"> <p class="mt-body-m">Content paragraph</p> </article> </div> <div class="mc-modal__footer"> <button type="button" class="mc-button"> <span class="mc-button__label">Button label</span> </button> </div> </div> </div></div>
Scrolling long content
In some cases, the content paragraph can be bigger than the modal's viewport. A dropped shadow on the top of the footer is used to indicate to the user that this is a scrollable content.
Add the mc-modal--overflow modifier to the global wrapper (mc-modal).
<div class="example"> <div class="mc-modal mc-modal--overflow" tabindex="-1" role="dialog" aria-labelledby="modalTitle" aria-hidden="true" > <div class="mc-modal__dialog" role="document"> <div class="mc-modal__header"> <h2 class="mc-modal__title" id="modalTitle">Modal Title</h2> <button class="mc-modal__close" type="button"> <span class="mc-modal__close-text">Close</span> </button> </div> <div class="mc-modal__body"> <article class="mc-modal__content"> <h3 class="mc-modal__heading">Title</h3> <p class="mt-body-m"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores, aliquid! Illo quam, est nostrum eos ad dignissimos ullam omnis, impedit fugiat necessitatibus dolores odit, earum distinctio magni amet inventore suscipit. </p> <p class="mt-body-m"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores, aliquid! Illo quam, est nostrum eos ad dignissimos ullam omnis, impedit fugiat necessitatibus dolores odit, earum distinctio magni amet inventore suscipit. </p> <p class="mt-body-m"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores, aliquid! Illo quam, est nostrum eos ad dignissimos ullam omnis, impedit fugiat necessitatibus dolores odit, earum distinctio magni amet inventore suscipit. </p> <p class="mt-body-m"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores, aliquid! Illo quam, est nostrum eos ad dignissimos ullam omnis, impedit fugiat necessitatibus dolores odit, earum distinctio magni amet inventore suscipit. </p> <p class="mt-body-m"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores, aliquid! Illo quam, est nostrum eos ad dignissimos ullam omnis, impedit fugiat necessitatibus dolores odit, earum distinctio magni amet inventore suscipit. </p> <p class="mt-body-m"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores, aliquid! Illo quam, est nostrum eos ad dignissimos ullam omnis, impedit fugiat necessitatibus dolores odit, earum distinctio magni amet inventore suscipit. </p> <p class="mt-body-m"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores, aliquid! Illo quam, est nostrum eos ad dignissimos ullam omnis, impedit fugiat necessitatibus dolores odit, earum distinctio magni amet inventore suscipit. </p> <p class="mt-body-m"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores, aliquid! Illo quam, est nostrum eos ad dignissimos ullam omnis, impedit fugiat necessitatibus dolores odit, earum distinctio magni amet inventore suscipit. </p> </article> </div> <div class="mc-modal__footer"> <button type="button" class="mc-button"> <span class="mc-button__label">Button label</span> </button> </div> </div> </div></div>
Footer - two call to actions
A primary call to action button accompanied with a secondary button to give the user an alternative choice.
<div class="example"> <div class="mc-modal" tabindex="-1" role="dialog" aria-labelledby="modalTitle" aria-hidden="true" > <div class="mc-modal__dialog" role="document"> <div class="mc-modal__header"> <h2 class="mc-modal__title" id="modalTitle">Modal Title</h2> <button class="mc-modal__close" type="button"> <span class="mc-modal__close-text">Close</span> </button> </div> <div class="mc-modal__body"> <article class="mc-modal__content"> <h3 class="mc-modal__heading">Title</h3> <p class="mt-body-m">Content paragraph</p> </article> </div> <div class="mc-modal__footer"> <button type="button" class="mc-button"> <span class="mc-button__label">Button label</span> </button> <button type="button" class="mc-button mc-button--bordered"> <span class="mc-button__label">Button label</span> </button> </div> </div> </div></div>
Footer - call to action and link
A primary call to action button with a link to redirect the user to a page to give more informations.
<div class="example"> <div class="mc-modal" tabindex="-1" role="dialog" aria-labelledby="modalTitle" aria-hidden="true" > <div class="mc-modal__dialog" role="document"> <div class="mc-modal__header"> <h2 class="mc-modal__title" id="modalTitle">Modal Title</h2> <button class="mc-modal__close" type="button"> <span class="mc-modal__close-text">Close</span> </button> </div> <div class="mc-modal__body"> <article class="mc-modal__content"> <h3 class="mc-modal__heading">Title</h3> <p class="mt-body-m">Content paragraph</p> </article> </div> <div class="mc-modal__footer"> <button type="button" class="mc-button"> <span class="mc-button__label">Button label</span> </button> <a href="#" class="mc-link">Default link</a> </div> </div> </div></div>
Behaviour
Max-width
Modals are responsive elements, therefore with a variable width depending on the screen resolution. Thus the width of a modal varies as follows:
| Breakpoint | Modal width |
|---|---|
| S | 100% |
| M | 38,5mu (616px) |
| L | 48mu (768px) |
| XL | 50mu (800px) |
| XXL | 56,5mu (904px) |
Max-height
Just as the width of a modal varies according to the rules indicated above, the height of the modal also has max-height rules of variation:
| Breakpoint | Modal max-height |
|---|---|
| S | 100% (16px margin-top and bottom) |
| M | 1:2 screen |
| L | 2:3 screen |
| XL | 2:3 screen |
| XXL | 1:2 screen |
On opening
During the opening of a modal by Javascript, several events occur:
- Added the
mc-modal-openclass to the body to prevent the default scrolling of the browser window. - A
mc-modal-overlayelement is generated in the DOM.
<div class="example"> <div class="mc-modal" tabindex="-1" role="dialog" aria-labelledby="modalTitle" aria-hidden="true" > <div class="mc-modal__dialog" role="document"> <div class="mc-modal__header"> <h2 class="mc-modal__title" id="modalTitle">Modal Title</h2> <button class="mc-modal__close" type="button"> <span class="mc-modal__close-text">Close</span> </button> </div> <div class="mc-modal__body"> <article class="mc-modal__content"> <h3 class="mc-modal__heading">Title</h3> <p class="mt-body-m">Content paragraph</p> </article> </div> <div class="mc-modal__footer"> <button type="button" class="mc-button"> <span class="mc-button__label">Button label</span> </button> </div> </div> </div> <div class="mc-modal-overlay" tabindex="-1" role="dialog"></div></div>