CMMI Institute Design System

A central, scalable system to provide a unified set of UX, design rules, and UI components.

v2.1.11



Components

Components are the basic building blocks of our design system. You can put components together to form more complex patterns.


Basic list

  • Item A
  • Item B
  • Item C
  1. Item #1
  2. Item #2
  3. Item #3
Example Markup <ul> <li>Item A</li> <li>Item B</li> <li>Item C</li> </ul> <ol> <li>Item #1</li> <li>Item #2</li> <li>Item #3</li> </ol>

A list contains a group of related items listed vertically. Lists can be unordered (bulleted) or ordered (numbered).

Use an ordered list if the order of the items in the list matters, otherwise, always use an unordered list. All of our lists use hanging punctuation, where all text is left aligned and the bullets or numbers are pushed to the left. If you’re trying to represent complex numerical data, try using a table.


Strong/weak heading

A strong/weak heading has some lines that are in bold and others lines that aren’t

Example Markup <h1 class="strong-weak">A strong/weak heading has <strong>some lines that are in bold</strong> and others lines that aren&rsquo;t</h1>

The strong/weak heading varies type weight from one line to the next. Make sure to choose which lines are presented in a heavier weight carefully to provide a visual hierarchy. Bold the lines that are most important to conveying meaning.


Drop cap

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam quis diam blandit, sollicitudin tellus nec, condimentum nunc. Vestibulum dapibus tempor finibus. Integer faucibus pretium molestie. Fusce sodales sapien ex, ut suscipit elit finibus eu. Nulla id iaculis metus. Ut consequat nulla massa, id hendrerit est gravida eu. Donec sed ex tortor. Ut convallis massa laoreet, consectetur ligula sit amet, egestas diam. Sed convallis non nisl ut efficitur.

Aenean pellentesque sem gravida, sollicitudin nibh eu, maximus diam. Cras consequat lectus sodales, mollis nisi vel, facilisis turpis. Phasellus a faucibus purus, id dignissim dolor. Donec eget est in nisi sollicitudin dapibus. Vestibulum in dignissim orci, quis venenatis justo. Donec at urna aliquam, efficitur arcu eget, molestie elit. Nulla tristique vehicula ipsum quis cursus. Suspendisse lobortis ac sapien id molestie. Integer sit amet sagittis neque, id pretium nisi. Cras eu mauris velit. Cras risus dui, condimentum at vestibulum eu, tempor eget purus.

Example Markup <div class="drop-cap"> <p>Lorem ipsum dolor sit amet...</p> <p>Aenean pellentesque sem gravida...</p> </div>

A drop or initial capital is a long-standing typographic tradition. We use it only at the beginning of a long piece of text, like a press release or a blog post. Normal static marketing pages should not use blog posts.

If you add the drop-cap class to a paragraph, that paragraph will have a drop-cap. If you apply it to a different element, if the first, direct child of that element is a <p> tag, that paragraph will be shown with a drop cap.


Pull quote

86 percent of healthcare practitioners have witnessed or know of a medical error caused by patient misidentification.

Example Markup <blockquote class="pull"> <p>86 percent of healthcare practitioners have witnessed or know of a medical error caused by patient misidentification.</p> </blockquote>

A pull quote can help place greater emphasis on a particularly powerful snippet of text in a longer article. Use sparingly. Pull quotes work best in long pieces of text intended for more liesurely reading, and most such pieces should not use more than one.


Quote

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent in massa massa. Nam a efficitur magna, nec pharetra quam. Phasellus dapibus nec elit vitae accumsan. Donec efficitur nunc nec velit laoreet sodales. Mauris in purus eu felis accumsan ornare non at magna. Suspendisse lacinia mattis risus, ac tempor ipsum sodales quis. Mauris auctor urna libero, sit amet bibendum felis tincidunt sed.

Nikki Jackson, Role Title, Operational Excellence, Company
Example Markup <figure class="quote"> <blockquote> <p>Lorem ipsum dolor sit amet...</p> </blockquote> <figcaption> <cite><strong>Nikki Jackson</strong>, Role Title, Operational Excellence, Company</cite> </figcaption> </figure>

This component helps to provide social proof, testimonials, and other quotes in a clear manner.


Testimonial

Example Markup <div class="testimonial"> <img src="photo.jpg" alt="Nikki Jackson" /> <figure class="quote"> <blockquote> <p><a href="#testimonial">Lorem ipsum dolor sit amet...</a></p> </blockquote> <figcaption> <cite><strong>Nikki Jackson</strong>, Role Title, Operational Excellence, Company</cite> </figcaption> </figure> </div>

The testimonial component expands upon the quote component by adding a photo of the person quoted, making it more effective when used for social proof. It should not be used in full-width columns, so for more extensive quotes the quote component will generally work better.

You can include multiple images (for example, a photo and a logo) by replacing the <img /> tag with <ul class="images">. Place each image in a separate list element (<li />), and mark any list element that contains a logo with the logo class.


Splash section

Knowledge + Skills = Results

CMMI® provides guidance for efficient, effective improvement across multiple process disciplines in an organization. Our different training courses will prepare you to provide guidance to your organization’s efforts, leading to results.

Whether you are just getting started with CMMI or have decades of experience, our training courses will move you along your career path. Browse the course listings below to take the next step with CMMI.

Example Markup <div class="splash"> <h2>Knowledge + Skills = Results</h2> <p>CMMI<sup>&reg;</sup> provides guidance for efficient...</p> <p>Whether you are just getting started with CMMI or have decades of experience...</p> </div>

The splash section component provides variety on static marketing pages. Use this component for short pieces of text with a compelling heading.


Buttons

Regular Button
Secondary Button
Example Markup <a href="#buttons" class="button">Regular Button</a> <button>Regular Button</button> <input type="button" value="Regular Button"><br /> <a href="#buttons" class="button p2">Secondary Button</a> <button class="p2">Secondary Button</button> <input type="button" class="p2" value="Secondary Button"><br /> <button disabled>Disabled Button</button> <button disabled class="p2">Disabled Secondary Button</button>

A button expresses to the user the corresponding action when they click or touch the button. They initialize background and foreground actions.

We use two different types of buttons: regular and secondary. Only use the secondary button when two buttons are side by side. Use the secondary button to de-emphasize an action such as cancel.

Buttons also have two different states, active (default) and disabled. A disabled button has a less saturated appearance.


Button sets

Example Markup <p class="actions"> <button>Primary Action</button> <button class="p2">Secondary Action</button> </p>

When presenting multiple buttons together (for example, at the end of a form), wrap them in <p class="actions">. Choose one button as the primary, intended action (often the form submission). All other buttons should be presented in the secondary style (.p2).


Links

Example Markup <a href="#links">Link</a>

Links are used primarily as a navigational element. They may also change what or how data is displayed (view more, show all).

Always use text for links, never graphics or images.

Keep links below four words.

Make sure the text associated with the link isn’t confusing. The user shouldn’t have to guess where the link will take them.

Be descriptive. Avoid using “Click Here” or “here,” for the link.


Drop zone

Example Markup <input type="file" name="file-drag" class="file-drag" multiple data-name="filePath" data-upload="/dev/index.html" />

Drop zone is an area for a user to drop in a local file to be uploaded.

Make sure the text associated with the drop area indicate to the user the type of files accepted.

Validate that the file was uploaded or denied. If the file was denied, provide reasoning so the user can recover from their error.

The file-drag class identifies a <input type="file" /> tag as one that should be given a drop zone. The multiple attribute indicates that it can handle multiple files. If the user is expected to upload just one file, remove this attribute and the input will disallow multiple files.

The drop zone uses a <input type="file" /> tag, but if JavaScript is loaded, this is enhanced to create the full drop zone component. When files are selected or dropped in the drop zone, an upload button appears. When the user clicks this button, an array of the files selected is sent to the URL provided in the data-upload attribute, using the key provided in the data-name attribute, in a POST request.


Card

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam non est non ante sollicitudin tempus in dignissim augue. Vivamus porta gravida cursus. Fusce rutrum massa non libero suscipit finibus.

Example Markup <div class="card"> <p>Lorem ipsum dolor sit amet...</p> </div> <div class="card clickable"> <a href="#"> <p>Mauris convallis nibh lectus...</p> </a> </div>

A card is container for a few short, related pieces of information. It roughly resembles a playing card in size and shape, and is intended as a linked, short representation of a conceptual unit.

Cards should only be displayed on a grey background (#e1e5e6 or $gray1).

All content in the card should be related.

Keep content on the card short. Offer a linked entry point to further details, rather than the full details themselves.

Cards are essentially scannable lists, use them when you intend for the user to browse content. If hierarchical order is important, use a nested list instead.


Icon heading

Informational heading

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse mollis erat urna, non imperdiet velit laoreet sit amet.

Approval heading

Phasellus sodales neque ligula, at placerat diam lobortis a.

Confirmation heading

Etiam imperdiet sem nec metus tincidunt euismod. Donec ac leo sit amet tortor laoreet pretium.

Warning heading

Duis convallis, elit sit amet viverra tincidunt, nisi lectus cursus felis, vel laoreet est sapien vel est.

Error heading

Phasellus convallis blandit cursus. Etiam eget massa eget ante elementum dignissim maximus sed turpis. Fusce quis cursus velit, sit amet pellentesque tellus.

Example Markup <div class="card"> <h3 class="icon info">Informational heading</h3> <p>Lorem ipsum dolor sit amet...</p> </div> <div class="card"> <h3 class="icon approved">Approval heading</h3> <p>Phasellus sodales neque ligula...</p> </div> <div class="card"> <h3 class="icon confirmation">Confirmation heading</h3> <p>Etiam imperdiet sem nec metus...</p> </div> <div class="card"> <h3 class="icon warning">Warning heading</h3> <p>Duis convallis...</p> </div> <div class="card"> <h3 class="icon error">Error heading</h3> <p>Phasellus convallis blandit cursus...</p> </div>

As explained on the card pattern, a card should contain only “a few short, related pieces of information.” In most cases where you may want to pair this with an icon, the banner pattern would be a better choice. The banner is intended to “provide feedback of the system status when a user commits an action.” This pattern is very close to the banner pattern, but allows for more content on the card and does not necessarily require that it be tied directly to user input. Using this pattern likely indicates a deeper problem. If you’re considering using this pattern, it likely means that you’re not using the card pattern correctly. Are you sure that a table or some other pattern wouldn’t work better?


Banner

Example Markup <aside role="alert"> <p><strong>Alert Heading</strong></p> <p>This is a confirmation notification.</p> </aside> <aside role="alert" class="approved"> <p><strong>Approved</strong></p> <p>This is an approval notification.</p> </aside> <aside role="alert" class="confirmation"> <p><strong>Confirmation Message</strong></p> <p>This is a confirmation notification.</p> </aside> <aside role="alert" class="warning"> <p><strong>Warning!</strong></p> <p>This is a warning notification.</p> </aside> <aside role="alert" class="error"> <p><strong>Error!</strong></p> <p>This is an error notification.</p> </aside>

Banner messages provide feedback of the system status when a user commits an action. They span the width of a container and include an icon associated with the type of message, error or confirmation.

Banners appear at the top of a page, they shouldn’t be nested inside content.

These messages should not be able to be dismissed because of severity or importance to product usage.

Banners should always be white. The icon associated with the banner should coordinate appropriate color to the type of message and provide additional context.


Confirmation

Are you sure?

This action cannot be undone.

Tell us more.

We need more information.

Example Markup <!-- Yes/no confirmation --> <div class="card confirmation"> <p><strong>Are you sure?</strong></p> <p>This action cannot be undone.</p> <p class="actions"> <button>Yes</button> <button>No</button> </p> </div> <!-- Confirmation requesting more information --> <div class="card confirmation info"> <p><strong>Tell us more.</strong></p> <p>We need more information.</p> <textarea></textarea> <p class="actions"> <button>Submit</button> <button class="p2">Cancel</button> </p> </div>

This pattern should not be used. While confirmation dialogs can prevent user errors (if they are not overused), they are a perfect example of an enhancement. Enhancements are not features that are unimportant, but features that are not critical. Confirmation dialogs can prevent costly errors if properly used, but a system without confirmation dialogs will still function. The window.confirm() method might fail if a problem occurs with JavaScript, but that is acceptable. It uses an interface familiar to the user, and that familiarity can prompt her to recognize that she’s being asked to commit to an important decision. A custom-designed prompt like this one might look “better” but is not as well-designed because it fails to fulfill that need as well because it is less familiar and thus less recognizable.

Allowing users to undo a destructive action is, in general, a far better design pattern than requiring a confirmation. Any time you implement a confirmation dialog, try to find some way that you could provide an opportunity to undo the action instead. Use a confirmation dialog only if there truly is no way to provide an option to undo the action.

Use confirmations for actions that have serious consequences. Never use them for routine actions, or users will become too accustomed to dismissing them, which will defeat their purpose.

The heading for the confirmation should be specific. Never use, “Are you sure?” Instead, specify the action in question. Likewise, the text should also be specific, detailing what the consequences of the action will be. The text of the buttons should also be specific about the action that will take place if the user clicks them (e.g., use “Delete” rather than “Yes”).

When asking for a confirmation, do not select either option as the default. Confirmations should only be used for actions that have serious consequences, and if the consequences are that serious then we want to make sure that the user takes a moment to consider and act deliberately. Default choices reduce friction, making it easier for a user to proceed along the most likely route. In this case some friction is desired, because it gives the user occasion to pause and consider what she is about to do. That is the goal of this pattern. If the confirmation dialog is not to confirm anything but to gather extra information, then you can designate a default option (but if that’s the case, then this threatens to over-use the pattern, undermining its efficacy and violating previously-stated principles).

The confirmation dialog uses the same subclasses as the banner pattern, but rather than info, its default is warning, and it does not include the confirmation subclass. Setting info, approved, or error will set the corresponding icon. The info subclass should be used when the confirmation dialog is being used to gather additional information, as in the second example.


Pills

Standard Success Danger Warning Info

Example Markup <span class="pill">Standard</span> <span class="pill pill-success">Success</span> <span class="pill pill-danger">Danger</span> <span class="pill pill-warning">Warning</span> <span class="pill pill-info">Info</span>

Pills are used for non-interactive tags, most often in tables or lists. They should be used only to indicate an item’s membership in a particular class, or a status from an enumerable list (e.g., showing that an item is verified or not).


Logos

  • International Organization for Standardization
  • COBIT 5
  • Department of Homeland Security
  • ISC
  • National Institute of Standards and Technology
  • CIS
  • Honeywell
  • McKesson
  • Booz | Allen | Hamilton
  • Perficient
Example Markup <!-- Single logo --> <img src="logo.svg" alt="International Organization for Standardization" width="75" height="75" class="logo" /> <!-- A list of logos --> <ul class="logos"> <li><img src="logo-iso.svg" alt="International Organization for Standardization" width="75" height="75" /></li> <li><img src="logo-cobit.svg" alt="COBIT 5" width="75" height="21" /></li> <li><img src="logo-dhs.svg" alt="Department of Homeland Security" width="75" height="75" /></li> <li><img src="logo-isc.svg" alt="ISC" width="75" height="35" /></li> <li><img src="logo-nist.svg" alt="National Institute of Standards and Technology" width="75" height="21" /></li> <li><img src="logo-cis.svg" alt="CIS" width="121" height="21" /></li> </ul> <!-- A list of logos with a dark (Blue 5) background --> <ul class="logos dark"> <li><a href="#"><img src="logo-honeywell.svg" alt="Honeywell" width="150" height="20" /></a></li> <li><a href="#"><img src="logo-mckesson.svg" alt="McKesson" width="113" height="28" /></a></li> <li><a href="#"><img src="logo-boozallenhamilton.svg" alt="Booz | Allen | Hamilton" width="150" height="17" /></a></li> <li><a href="#"><img src="logo-perficient.svg" alt="Perficient" width="100" height="32" /></a></li> </ul>

This component is used to display the logo of another company or organization to show affiliations, certifications, or company partners.

Logos should either all be Blue 5 or their appropriate brand colors. Never present a mix of logos where some are in Blue 5 and others use their own brand colors.

Wherever possible, use SVG’s to preserve quality and scalability.


Figures

Puppy

Figure 1. This puppy is adorable, but it also clearly doesn’t belong here. That’s precisely why we use it as a placeholder image. It’s so obviously out of place here that we reduce the risk that we fail to obtain the correct image to replace it. Except here in the design system, where it’s perfect.

Example Markup <figure> <img src="puppy.jpg" alt="Puppy" /> <figcaption> <p><strong>Figure 1.</strong> This puppy is adorable...</p> </figcaption> </figure>

Figures can be used with any sort of media that is accompanied with a caption or explanation. Figures should be numbered, with a period after the number. Make sure that numbering is consistent for all figures on the page.


Embedded video

Example Markup <a href="https://vimeo.com/292762944" class="vimeo"> <img src="preview.jpg" alt="Introduction to CMMI Cybermaturity Platform" /> </a>

This component presents a media player for any videos used on the site. Video should be placed inside a container. Never play a video full screen. Use a video placeholder image for the placeholder.

For videos on YouTube, use the youtube class and link to the video using the form https://youtu.be/VIDEO_ID

For videos on Vimeo, use the vimeo class and link to the video using the form https://vimeo.com/VIDEO_ID


Progress tracker

Example Markup <!-- Determinate progress bar --> <progress max="100" value="80"></progress> <!-- Indeterminate progress bar --> <progress></progress>

A determinate progress indicator is a visual representations of how far a process has progressed. A <progress> tag is determinate if it has max and value attributes, indicating how much progress has been made (value) and what the total will be when the process is complete (max). Use determinate progress trackers when the process completion can be detected. Determine progress trackers fill from 0% to 100% (left to right).

An indeterminate progress indicator is used when the progress of the process is unknown. Use indeterminate progress trackers when the progress isn’t detectable, or if it’s not necessary to indicate how long an activity will take.


Progress tracker with button

Example Markup <p class="actions progress"> <progress max="100" value="80"></progress> <button>Go</button> <button class="p2">Cancel</button> </p>

Use this pattern when a button initiates an activity that will take some time to accomplish. If the activity can be tracked, use a determinate progress tracker (see the Progress tracker pattern above) and update it with the latest information about the progress of that activity. If no update can be given, use the indeterminate progress tracker to provide feedback that something is happening.


Process steps

Example Markup <nav class="process-steps"> <ul> <li class="done"><a href="#">Step I Finished</a></li> <li class="current"> <a href="#">Step I&rsquo;m On</a> </li> <li>Step I Have To Do</li> </ul> </nav>

The process step component is a visual representation of a user’s progress through a set of steps. They guide the user through several different steps in order to complete a specified process.

Always use some type of process tracker when a user is completing a complex task with multiple steps. Breaking down the entire process into smaller steps keeps the user focused, organized, and more inclined to complete the task. Break up the process into distinct steps that are each roughly equal in difficulty. Provide feedback when the user has completed each of the tasks. Allow for recovery if a user made an error on a previous step and wants to move back a step.


Side navigation

Example Markup <ul class="sidebar-menu"> <li class="current">Current Selection</li> <li><a href="#sidebar-menu">Selection #1</a></li> <li><a href="#sidebar-menu">Selection #2</a></li> </ul>

This component lays out navigation vertically on the left-side of a page. This is typically used with anchor tags or sub-pages of a micro-site.

Keep titles less than three words to fit nicely in the sidebar column. Use descriptive titles so the user never guesses where the menu item will take them. Use the current class to indicate the current page if the sidebar navigates to different sub-pages. Always use in a .col4 column.


Tabs


Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam sit amet neque at elit auctor auctor. Nunc risus lorem, venenatis vitae blandit et, eleifend id tellus. Vivamus tempus metus tempor, dapibus mi id, commodo velit. Etiam aliquam, odio eu convallis finibus, magna velit varius enim, eu euismod augue orci id orci. Duis lacinia scelerisque sapien, quis vestibulum ex porta sit amet. Etiam ornare euismod tincidunt. Vivamus fringilla rutrum enim eget tincidunt. Mauris eget placerat odio. Nullam porta nisl in auctor aliquet.

Sed porttitor mauris ut tincidunt suscipit. Ut ornare nulla a laoreet maximus. Nullam feugiat, justo id accumsan tristique, ipsum mauris viverra sem, quis vehicula nisi magna a tortor. Aliquam mi tortor, accumsan et eleifend sed, feugiat ut elit. Quisque commodo tempus vehicula. Sed ac auctor dolor. Donec imperdiet, nibh ut euismod gravida, massa leo feugiat turpis, eget tempor lorem arcu at nulla. Ut eu diam id justo pretium accumsan. Maecenas id dolor ut velit lobortis suscipit ac eu nisi.

Donec tristique augue a gravida congue. Ut sollicitudin enim eu consequat pharetra. Nulla sed sapien metus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas at lorem finibus, rhoncus ex ac, varius metus. Phasellus fermentum massa sit amet tempus luctus. Maecenas tincidunt diam sed lorem tincidunt interdum.

Example Markup <!-- Just tabs --> <ul class="tabs"> <li class="active"><a href="#">Tab 1</a></li> <li><a href="#">Tab 2</a></li> <li><a href="#">Tab 3</a></li> </ul> <!-- A dynamic tabbed content area (enhanced with JavaScript) --> <div class="tabbed"> <div class="tab" data-tab="Tab 1"> <p>Lorem ipsum dolor sit amet...</p> </div> <div class="tab" data-tab="Tab 2"> <p>Sed porttitor mauris ut tincidunt suscipit...</p> </div> <div class="tab" data-tab="Tab 3"> <p>Donec tristique augue a gravida congue...</p> </div> </div>

Tabs are used to quickly navigate between views within the same context.

Tab labels should concisely describe the content in the tab view (generally just one word). If you do require more than one word, use sentence case.

Never use more than 6 tabs. More than 6 tabs will clutter the UI and make the labels unreadable. If you need 6 tabs, consider using a different component or pattern to display the content.


Breadcrumbs

Example Markup <ul class="breadcrumbs"> <li><a href="#">CMMI Institute</a></li> <li><a href="#">Section</a></li> <li class="current">Current Page</li> </ul>

Breadcrumbs enable users to quickly see their location within a path of navigation and move up to a parent level if desired.

Place breadcrumbs in the upper-right corner, below the header and before the main headline of the page. Every tier of the breadcrumb except the current page should be a navigable link to that level. You can use one tier breadcrumbs to act as back buttons for the user.

Breadcrumbs should never replace the main navigation of a site.


Pagination

Example Markup <div class="pagination"> <a href="#" class="button prev">Previous</a> <strong>1</strong> &nbsp; <a href="#" class="button page">2</a> &nbsp; <a href="#" class="button page">3</a> &nbsp; <a href="#" class="button page">4</a> &nbsp; <a href="#" class="button page">5</a> &nbsp; <a href="#" class="button page">…</a> <a href="#" class="button next">Next</a> </div>

Pagination is used for splitting up content or data into several pages, with a control for navigating to the next or previous page.

Use pagination when the user’s goal is not to browse a full collection, but rather to find a specific item and click through to that destination page. Include buttons to allow the user to click through to different pages, as well as the ability to click to a specific page. Indicate clearly where the user is in the list of pages, as well as how many pages are included in the entire list.


Checkbox




Example Markup <!-- A single checkbox --> <input type="checkbox" id="checkbox-example" /> <label for="checkbox-example" class="checkbox">Lorem ipsum dolor sit amet...</label> <!-- A list of checkboxes --> <ul class="checkboxes"> <li> <input type="checkbox" id="checkbox-list-example-01" /> <label for="checkbox-list-example-01">Lorem ipsum dolor sit amet...</label> </li> <li> <input type="checkbox" id="checkbox-list-example-02" /> <label for="checkbox-list-example-02">Maecenas nec augue vel est sagittis...</label> </li> <li> <input type="checkbox" id="checkbox-list-example-03" /> <label for="checkbox-list-example-03">Aliquam eget tincidunt justo.</label> </li> </ul> <!-- An inline list of checkbox options --> <ul class="inline-checkboxes"> <li> <input type="checkbox" id="checkbox-inline-example-01" /> <label for="checkbox-inline-example-01">First option</label> </li> <li> <input type="checkbox" id="checkbox-inline-example-02" /> <label for="checkbox-inline-example-02">A different option</label> </li> <li> <input type="checkbox" id="checkbox-inline-example-03" /> <label for="checkbox-inline-example-03">Third option</label> </li> </ul> <!-- A switch --> <input type="checkbox" id="switch-example" class="switch" /> <label for="switch-example" class="switch"></label> <label for="switch-example" class="checkbox">Lorem ipsum dolor sit amet...</label>

A checkbox is a small square that has a checkmark when selected. Use checkboxes when a user can select one or multiple options from a list. A stand-alone checkbox is used for a single option, such as turning something on or off. Avoid using negations for checkbox labels that could confuse the user about what will happen if they check a particular box.

Use the inline version only when the number of options is limited and the labels on each option is short.

Checkboxes should never be checked by default.


Radio buttons

Example Markup <ul class="radio"> <li> <input type="radio" id="radio-example-01" name="radio-example" value="1" /> <label for="radio-example-01">Option #1</label> </li> <li> <input type="radio" id="radio-example-02" name="radio-example" value="2" /> <label for="radio-example-02">Option #2</label> </li> <li> <input type="radio" id="radio-example-03" name="radio-example" value="3" /> <label for="radio-example-03">Option #3</label> </li> </ul>

A radio button is a small circle that has a solid circle inside when it is selected. Use radio buttons when there is a list of two or more options that are mutually exclusive. Left align radio buttons vertically so a user can easily determine what label belongs to what radio button.


Dashboard widget

Widget

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus at aliquet metus, eget sagittis tellus. Sed malesuada, quam vitae elementum sagittis, enim dolor vulputate lectus, vitae viverra est magna quis eros. Phasellus euismod felis ac neque consequat mattis. Sed imperdiet efficitur blandit. Vivamus fringilla, ex condimentum convallis porttitor, dui libero faucibus erat, quis fermentum quam dolor vitae velit. Vivamus mattis suscipit sapien, sit amet fringilla nisl vehicula eu. Curabitur tincidunt egestas neque at euismod.

Example Markup <div class="dashboard-widget"> <h2 class="label">Widget</h2> <p>Lorem ipsum dolor sit amet...</p> </div>

This component is used on the user dashboard to display information or provides a specific way for the user to interact with the CMMI Website. Dashboard widgets are built from a user need for a shortcut while interacting with our site. They are white cards and may include links to different parts or pages of the site.


Address

CMMI Institute 11 Stanwix Street Suite 1150 Pittsburgh, PA 15210 United States
Example Markup <div itemscope itemtype="http://schema.org/PostalAddress"> <span itemprop="name">CMMI Institute</span> <span itemprop="streetAddress">11 Stanwix Street</span> <span itemprop="streetAddress">Suite 1150</span> <span itemprop="addressLocality">Pittsburgh</span>, <span itemprop="addressRegion">PA</span> <span itemprop="postalCode">15210</span> <span itemprop="addressCountry">United States</span> </div>

The address component presents a location’s address, using the PostalAddress schema from Schema.org


Photo bucket

Always provide good alt text for images

Lorem ipsum dolor sit amet

Consectetur adipiscing elit. Sed vulputate ullamcorper ornare. Mauris at turpis non tortor maximus ornare. Ut cursus a eros eu sollicitudin. Etiam eget laoreet nisl. Nam sit amet est vitae lacus ullamcorper posuere pretium vitae diam. Curabitur elementum consectetur massa, at cursus urna feugiat quis. Aliquam gravida mattis condimentum. Nam turpis felis, blandit eget condimentum at, hendrerit quis diam. Nam maximus purus sit amet placerat rhoncus. Curabitur pellentesque sed nisl nec pretium. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque laoreet elit a erat posuere, sit amet congue dui consequat. Etiam nec semper magna. Morbi nisi urna, pretium et lorem sit amet, blandit bibendum sem. Morbi ullamcorper ac lectus vel efficitur. Aliquam lacus diam, consectetur eget ultricies at, consequat ut nisi.

Example Markup <div class="row photo-bucket"> <div class="col4"> <img src="photo.jpg" alt="Always provide good alt text for images" /> </div> <div class="col8"> <h2>Lorem ipsum dolor sit amet</h2> <p>Consectetur adipiscing elit...</p> </div> </div>

This component provides layout for an image and accompanying text. Use it on marketing or static pages. Images should always occur to the left of the text. Use engaging visuals that enhance the text. Images should never distract from the text. All images must have descriptive alt text; if you have a hard time coming up with a good description for this purpose, that is usually a warning that the image is also failing to enhance the text.


Stripe

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate ullamcorper ornare. Mauris at turpis non tortor maximus ornare. Ut cursus a eros eu sollicitudin. Etiam eget laoreet nisl. Nam sit amet est vitae lacus ullamcorper posuere pretium vitae diam. Curabitur elementum consectetur massa, at cursus urna feugiat quis. Aliquam gravida mattis condimentum. Nam turpis felis, blandit eget condimentum at, hendrerit quis diam. Nam maximus purus sit amet placerat rhoncus. Curabitur pellentesque sed nisl nec pretium. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque laoreet elit a erat posuere, sit amet congue dui consequat. Etiam nec semper magna. Morbi nisi urna, pretium et lorem sit amet, blandit bibendum sem. Morbi ullamcorper ac lectus vel efficitur. Aliquam lacus diam, consectetur eget ultricies at, consequat ut nisi.

Always provide good alt text for images
Example Markup <div class="row photo-stripe white"> <div class="text"> <p>Lorem ipsum dolor sit amet...</p> </div> <img src="photo.jpg" alt="Always provide good alt text for images" data-object-fit="cover" /> </div>

The stripe component is a full-page information call-out. Use the stripe component on static pages when directing the user’s attention to a certain area of the page or section of information.

There are six classes that you can add to this component to change its background color: blue (Blue 5), purple (Purple 5), green (Green 5), red (Red 5), and gray (Gray 5). All of these use white (#ffffff) text. These should be used sparingly.


Statistic

54%

do not measure what matters.



106

different countries



  • 54%

    don’t have standard processes, process assets, and job aids.

  • 42%

    have no established planning process.

  • 41%

    aren’t encouraging employees to build organizational capabilities.

  • 33%

    cite difficulties in monitoring plans and making adjustments when needed.

  • 54%

    do not measure what matters.

Example Markup <!-- A single percentage statistic --> <div class="statistic"> <svg viewbox="0 0 36 36"> <defs> <linearGradient id="Blue5Statistic" x1="0" x2="0" y1="0" y2="1"> <stop offset="0%" stop-color="#007dc6" /> <stop offset="100%" stop-color="#042740" /> </linearGradient> </defs> <path class="circle-bg" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /> <path class="circle" stroke="url(#Blue5Gradient)" stroke-dasharray="54, 100" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /> <text x="18" y="21">54%</text> </svg> <p>do not measure what matters.</p> </div> <!-- A single numerical statistic --> <div class="statistic"> <p class="number">106</p> <p>different countries</p> </div> <!-- A row of statistics --> <ul class="statistics"> <li> <svg viewbox="0 0 36 36"> <path class="circle-bg" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /> <path class="circle" stroke="url(#Blue5Gradient)" stroke-dasharray="54, 100" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /> <text x="18" y="21">54%</text> </svg> <p>don&rsquo;t have standard processes, process assets, and job aids.</p> </li> <li> <svg viewbox="0 0 36 36"> <path class="circle-bg" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /> <path class="circle" stroke="url(#Blue5Gradient)" stroke-dasharray="42, 100" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /> <text x="18" y="21">42%</text> </svg> <p>have no established planning process.</p> </li> <li> <svg viewbox="0 0 36 36"> <path class="circle-bg" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /> <path class="circle" stroke="url(#Blue5Gradient)" stroke-dasharray="41, 100" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /> <text x="18" y="21">41%</text> </svg> <p>aren&rsquo;t encouraging employees to build organizational capabilities.</p> </li> <li> <svg viewbox="0 0 36 36"> <path class="circle-bg" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /> <path class="circle" stroke="url(#Blue5Gradient)" stroke-dasharray="33, 100" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /> <text x="18" y="21">33%</text> </svg> <p>cite difficulties in monitoring plans and making adjustments when needed.</p> </li> <li> <svg viewbox="0 0 36 36"> <path class="circle-bg" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /> <path class="circle" stroke="url(#Blue5Gradient)" stroke-dasharray="54, 100" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /> <text x="18" y="21">54%</text> </svg> <p>do not measure what matters.</p> </li> </ul>

This component presents a single numerical datum. If the datum is a just a number, use <p class="number"> to present it.

If the datum is a percentage, use the SVG provided in the example code. You can update the statistic by changing the numbers in two places:

  1. in the <text> tag and
  2. the first number in the stroke-dasharray attribute of the <path class="circle"> tag.

The SVG stroke should refer to a linear gradient that is defined somewhere on the page. Here it is defined in the first statistic component. Each id on the page should be unique, so it would be both unnecessary and a violation of W3C standards to define the gradient multiple times. This gradient should define a vertical gradient that goes from a lighter shade to a darker shade, using defined CMMI colors. The most common gradient, used here, goes from CMMI Blue (Blue 4) to Blue 5.

The SVG used for percentages assumes a white background. If it appears against a gray background, add the graybg class to it.


Revealable

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi sed rutrum purus. Nulla scelerisque nec quam nec gravida. Donec tristique gravida arcu, et finibus lectus cursus at. Integer vel sapien a sapien maximus mollis. Donec iaculis justo at urna facilisis euismod. Nulla arcu eros, placerat quis mi at, gravida viverra tortor. Vivamus sit amet sodales nisl. Nam urna risus, tincidunt nec sem id, porttitor pulvinar orci. Pellentesque sollicitudin tortor eu ipsum pulvinar ullamcorper. Curabitur quis porttitor ipsum. Fusce fringilla faucibus sem hendrerit laoreet. Nullam felis tellus, malesuada nec tempor quis, tempor vel ante.

Example Markup <div class="revealable" data-instructions="Click to show content"> <p>Lorem ipsum dolor sit amet...</p> </div>

Use the revealable component when incorporating progressive disclosure in a design. The component only shows a segment of information and forces a user to make the decision to show more. Critical information should never be hidden in a revealable component.


Togglable

Lorem ipsum dolor sit amet.

Morbi sed rutrum purus. Nulla scelerisque nec quam nec gravida. Donec tristique gravida arcu, et finibus lectus cursus at. Integer vel sapien a sapien maximus mollis. Donec iaculis justo at urna facilisis euismod. Nulla arcu eros, placerat quis mi at, gravida viverra tortor. Vivamus sit amet sodales nisl. Nam urna risus, tincidunt nec sem id, porttitor pulvinar orci. Pellentesque sollicitudin tortor eu ipsum pulvinar ullamcorper. Curabitur quis porttitor ipsum. Fusce fringilla faucibus sem hendrerit laoreet. Nullam felis tellus, malesuada nec tempor quis, tempor vel ante.

Example Markup <p class="togglable-toggle has-caret">Lorem ipsum dolor sit amet.</p> <div class="togglable-content"> <p>Morbi sed rutrum purus...</p> </div>

Use the togglable interaction component to remove clutter from a UI list.

A togglable-content element must follow each togglable-toggle element for it to work. Only the next togglable-content element will be affected, so you may need to use a wrapper element like a <div>, but as always tags with more semantic value should be preferred.

Add the default-open class to the togglable-content element to leave it open by default.


Text input

Example Markup <input type="text" placeholder="Text input" /> <input type="email" placeholder="Email input" /> <input type="password" placeholder="Password input" /> <input type="search" placeholder="Search input" /> <input type="tel" placeholder="Telephone input" /> <input type="url" placeholder="URL input" />

Use text input to collect a single line of text from a user. Use type="text" as a default, but more specific types should be used wherever possible, as on some browsers and devices these may provide the user with helpful context-specific options.

Text inputs should always be accompanied by a label. Use placeholder text to provide an example of the sort of data requested. Placeholder text must never replace the label.


Text input (error state)

That’s not a valid entry. This error message should explain what happened.

Example Markup <label for="text-input-error" class="error">Label</label> <input type="text" placeholder="Text input" id="text-input-error" class="error" value="Invalid!" /> <p class="error">That’s not a valid entry. This error message should explain what happened.</p>

When any text input is in an error state, you should provide a clear and concise error message. Error messages should focus on what the user needs to do to fix the problem, and not necessarily on the technical details of what caused it.

To display a text field in an error state, apply the error class to the label and the input. The error message should appear in a <p class="error"> tag following the input.


URL input

Example Markup <p class="url-input"> <input type="url" placeholder="URL input" /> </p>

This input helps make it clear to a user that she is expected to enter a URL.


Text area

Limit 240 characters
Example Markup <textarea></textarea> <span class="char-limit" data-limit="240">Limit 240 characters</span>

Use text areas to collect more than a single line of text from a user.

Text inputs should always be accompanied by a label. Use placeholder text to provide an example of the sort of data requested. Placeholder text must never replace the label.

If the number of characters that a user can use in a text area is limited, add a span class="char-limit"> tag specifying that limit. If you supply a data-limit attribute, JavaScript will enhance the component to supply instantaneous feedback.


Date & time

Example Markup <!-- Time --> <div class="input-time-el"> <label> <span>Hour</span> <input placeholder="HH" maxlength="2" type="text" class="tabable"> </label> <label> <span>Minute</span> <input placeholder="MM" maxlength="2" type="text" class="tabable"> </label> <div class="tabable"> <select class="tabable"> <option>AM</option> <option>PM</option> <option>24-hour</option> </select> </div> </div> <!-- Date --> <div class="input-date-el"> <label> <span>Date</span> <input placeholder="dd" maxlength="2" type="text" class="tabable"> </label> <label> <span>Month</span> <input placeholder="mm" maxlength="2" type="text" class="tabable"> </label> <label> <span>Year</span> <input placeholder="yyyy" maxlength="4" type="text" class="tabable"> </label> </div>

The dates and times input allows users to interact with and input date and time data. Use labels to differentiate between start and end dates.


Number input

Example Markup <input type="number" value="0" />

Number inputs contain controls used to increase or decrease an integer value. Use this type of input when a user is adding or removing items, for example when a user is reviewing the items in their cart. Number inputs work best for making small, incremental changes that only require a few clicks. Always use a clear label with this input.


Search

Example Markup <form class="search-form" action="https://cmmiinstitute.com/search"> <input type="search" placeholder="Search" /> <button>Go</button> </form>

Search enables users to specify a word or phrase to find particular relevant pieces of content without the use of navigation. Use placeholder content text within a search field to help users understand what page or section the search box will parse through.

Indicate what results are being displayed with labels or headers, such as “Results for [user input]” Be sure to also include a clear “no results” message


File select

Example Markup <input type="file" name="file" multiple />

The file input allows a user to transfer a file or submit content of their own. To allow a user to upload more than one file, include the multiple attribute, as in the example provided here. To restrict a user to just one file, remove that attribute. If the types of files accepted are restricted, for example to just certain types or if they must be no larger than a particular size, add a helpful label to make sure the user is aware of these restrictions.


Dropdown




Example Markup <!-- Dropdown alone --> <select> <option value="o1">Option #1</option> <option value="o2">Option #2</option> <option value="o3">Option #3</option> <optgroup label="Option Group"> <option value="o4">Option #4</option> <option value="o5">Option #5</option> <option value="o6">Option #6</option> </optgroup> </select> <!-- Dropdown with button --> <div class="dropdown-set"> <select> <option value="oa">Option A</option> <option value="ob">Option B</option> <option value="oc">Option C</option> </select> <button>Go</button> </div> <!-- Dropdown with text input --> <div class="dropdown-set"> <select> <option value="oa">Option A</option> <option value="ob">Option B</option> <option value="oc">Option C</option> </select> <input type="text" placeholder="Text input" /> <button>Go</button> </div> <!-- Linked dropdowns --> <div class="dropdown-set"> <select name="dropdown1"> <option value="oa">Option A</option> <option value="ob">Option B</option> <option value="oc">Option C</option> </select> <select name="dropdown2"> <option value="o1" data-if="dropdown1=oa">Option #1</option> <option value="o2" data-if="dropdown1=ob">Option #2</option> <option value="o3" data-if="dropdown1=oc">Option #3</option> <option value="o4" data-if="dropdown1=oa">Option #4</option> <option value="o5" data-if="dropdown1=ob">Option #5</option> <option value="o6" data-if="dropdown1=oc">Option #6</option> <option value="o7" data-if="dropdown1=oa">Option #7</option> <option value="o8" data-if="dropdown1=ob">Option #8</option> <option value="o9" data-if="dropdown1=oc">Option #9</option> </select> <button>Go</button> </div>

This is an input that allows a user to choose one option from a dropdown list. It can be used in forms or standalone as a navigational component (as it is at the top of this page). Use a descriptive label to inform the user what options are in the select. Provide a reasonable default setting for the select input wherever possible. If the user is only selecting from three or fewer options, use the checkbox or tab select components.


Multiselect

Example Markup <select multiple="multiple"> <option value="a">Option A</option> <option value="b">Option B</option> <option value="c">Option C</option> </select>

When JavaScript loads, <select> tags with the multiple attribute behave as you see here. Selecting an option adds a “tag,” which can be removed from the list.

Use this component when the user must choose among several options, the options are short and concise, and the user can choose more than one. If the options require more detailed explanation, use checkboxes.


Tag select

Example Markup <select class="tag-select"> <option value="o1">Option #1</option> <option value="o2">Option #2</option> <option value="o3">Option #3</option> </select>

The tag select component is an input that lets a user select an option from a list of tags. It works like radio buttons: all options are mutually exclusive. The system should respond when a user selects an option. Selected tags have an appearance similar to a button. Non-selected tags have an appearance similar to a secondary button.

Align the tags horizontally. If there are too many tags that they require a second line, use the radio button component instead.


Basic table

Table 1
Default Short Numerical
Default content a 1
Second line b 2
Table footer
Example Markup <table> <caption>Table 1</caption> <thead> <tr> <th>Default</th> <th class="short">Short</th> <th class="num sortable"> <a href="#">Numerical</a> </th> </tr> </thead> <tbody> <tr> <td>Default content</td> <td class="short">a</td> <td class="num">1</td> </tr> <tr> <td>Second line</td> <td class="short">b</td> <td class="num">2</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">Table footer</td> </tr> </tfoot> </table>

A table presents information, numerical or textual, in a readable, scannable, and easily comparable manner. The header uses a Gray 5 background and white text. Our tables do not use zebra stripes.

The .actions class can be used on any table cell that provides a button set for a particular row. As with other button sets, this should include one button that is the intended action. Any other buttons should be marked as secondary by using the .p2 class.

If you can click on a table header to sort the values in that column, you can add the sortable class to that header (<th class="sortable" />) and wrap its content in either a <a> tag or a <span>. Sorting in descending order is the default. If you are sorting in ascending order, also use the asc class (<th class="sortable asc" />).

Since the exact criteria for sorting may differ from one implementation to the next, it is the responsibility of the behavior layer to handle the actual sorting and then update the classes applied in the markup appropriately. The behavior layer might be server-side code or JavaScript, for example. Depending on your implementation, you might use JavaScript or an <a> tag to make a column header clickable.


Responsive table

Credit Card Number Expires CCV
1111 1111 1111 1111 123
1234 5678 8765 4321 321

Product Name Availability Subtotal
Certified CMMI Associate In Stock $100.00
CMMI Online Model Subscription In Stock $10.00
Data Management Maturity (DMM) In Stock $100.00
Example Markup <!-- Labeled (default) --> <table class="responsive"> <thead> <tr> <th>Credit Card Number</th> <th>Expires</th> <th>CCV</th> </tr> </thead> <tbody> <tr> <td data-label="Credit Card Number">1111 1111 1111 1111</td> <td data-label="Expires"><time datetime="2525-05">2525/05</time></td> <td data-label="CCV">123</td> </tr> <tr> <td data-label="Credit Card Number">1234 5678 8765 4321</td> <td data-label="Expires"><time datetime="1970-01">1970/01</time></td> <td data-label="CCV">321</td> </tr> </tbody> </table> <!-- Unlabeled --> <table class="responsive unlabeled"> <thead> <tr> <th>Product Name</th> <th>Availability</th> <th>Subtotal</th> </tr> </thead> <tbody> <tr> <td>Certified CMMI Associate</td> <td>In Stock</td> <td>$100.00</td> </tr> <tr> <td>CMMI Online Model Subscription</td> <td>In Stock</td> <td>$10.00</td> </tr> <tr> <td>Data Management Maturity (DMM)</td> <td>In Stock</td> <td>$100.00</td> </tr> </tbody> </table>

The responsive table presents each row like a card when there is insufficient horizontal space to lay out a table. Always use a responsive table if there is a chance a user will be viewing it on any other device than a desktop.


Editable table

Name Email Department Admin

Please fill in all fields.

Example Markup <div class="editable-table" data-warning-id="0"> <form> <input type="hidden" name="id1" value="1" /> <div class="field"> <label for="editable-table-example-name1">Name</label> <input type="text" name="name1" id="editable-table-example-name1" value="Nikki Johnson" /> </div> <div class="field"> <label for="editable-table-example-email1">Email</label> <input type="text" name="email1" id="editable-table-example-email1" value="[email protected]" /> </div> <div class="field"> <label for="editable-table-example-status1">Status</label> <select name="status1" id="editable-table-example-status1"> <option value="1" selected="selected">Status #1</option> <option value="2">Status #2</option> <option value="3">Status #3</option> </select> </div> <div class="field" data-header="Static"> <p>Static</p> </div> <div class="actions"> <a href="#editable-table" class="remove">Remove</a> <button>Save</button> </div> </form> <form> <input type="hidden" name="id2" value="2" /> <div class="field"> <label for="editable-table-example-name2">Name</label> <input type="text" name="name2" id="editable-table-example-name2" value="Jay Baer" /> </div> <div class="field"> <label for="editable-table-example-email2">Email</label> <input type="text" name="email2" id="editable-table-example-email2" value="[email protected]" /> </div> <div class="field"> <label for="editable-table-example-status2">Status</label> <select name="status2" id="editable-table-example-status2"> <option value="1">Status #1</option> <option value="2" selected="selected">Status #2</option> <option value="3">Status #3</option> </select> </div> <div class="field" data-header="Static"> <p>Static</p> </div> <div class="actions"> <a href="#editable-table" class="remove">Remove</a> <button>Save</button> </div> </form> <form> <input type="hidden" name="id3" value="3" /> <div class="field"> <label for="editable-table-example-name3">Name</label> <input type="text" name="name3" id="editable-table-example-name3" value="Frans Johansson" /> </div> <div class="field"> <label for="editable-table-example-email3">Email</label> <input type="text" name="email3" id="editable-table-example-email3" value="[email protected]" /> </div> <div class="field"> <label for="editable-table-example-status3">Status</label> <select name="status3" id="editable-table-example-status3"> <option value="1">Status #1</option> <option value="2">Status #2</option> <option value="3" selected="selected">Status #3</option> </select> </div> <div class="field" data-header="Static"> <p>Static</p> </div> <div class="actions"> <a href="#editable-table" class="remove">Remove</a> <button>Save</button> </div> </form> </div>

This component is styled as a table that allows a user to interact with and edit data. Use an editable table when a user needs to change inline data. Each row has a submit button to save changes, and may include a link to remove that row.

This component relies on one script which can process changes to data given a POST request. If you want to remove a line, you will need another script which can remove it with a GET request. Both use optimistic feedback, assuming that everything works appropriately and showing an error if anything unexpected happens.

data-warning-id defines the 0-based index of the field to use to identify a row in a warning message. In the example provided here, it is 0, indicating the first field in each row — the name. If not provided, this will default to 0, meaning the first field in each row.


Tags

  • Australia
  • Africa
  • Asia Pacific
  • Europe
  • Latin America
  • Middle East
  • North America
  • South Asia
Example Markup <ul class="tags"> <li>Australia</li> <li>Africa</li> <li>Asia Pacific</li> <li>Europe</li> <li>Latin America</li> <li>Middle East</li> <li>North America</li> <li>South Asia</li> </ul>

Tags indicate association and related information. They can be clickable or static. They can be used to filter or find certain information based on the keyword that describes them. Multiple or single tags can be used to categorize items.

By default, the tags pattern assumes a white background. When placed against a gray background, use the class on-gray, which will set the tag background to white instead (as shown in the example above).


Label

Example Markup <!-- Default label --> <label for="label-example"><span>Label</span></label> <input type="text" id="label-example" /> <!-- Required label --> <label for="label-required-example" class="required"><span>Label</span></label> <input type="text" id="label-required-example" /> <!-- Label with note --> <label for="label-note-example"> <span>Label</span> <span class="note">This label includes a note with further explanation.</span> </label> <input type="text" id="label-note-example" />

Labels inform users what the corresponding input fields mean. Labels are left aligned and placed directly above the input field.

A red asterisk placed after the label is used to inform what fields are required of the user to complete the form.

Notes can be added directly below the label and before the input field. They should be succinct but clear.


Filter

Example Markup <div class="col4 filters"> <h2>Filter Items</h2> <h3>Item Type</h3> <ul> <li><a href="#"><span class="selection">Not selected</span> Any</a></li> <li><a href="#"><span class="selection selected">Selected</span> Presentation</a></li> <li><a href="#"><span class="selection selected">Selected</span> Article</a></li> <li><a href="#"><span class="selection">Not selected</span> Case Study</a></li> <li><a href="#"><span class="selection selected">Selected</span> PDF</a></li> </ul> <h3>Region</h3> <ul> <li><a href="#"><span class="selection">Not selected</span> North America</a></li> <li><a href="#"><span class="selection">Not selected</span> South America</a></li> <li><a href="#"><span class="selection selected">Selected</span> Asia</a></li> <li><a href="#"><span class="selection">Not selected</span> Middle East</a></li> </ul> <h3>Product</h3> <ul> <li><a href="#"><span class="selection selected">Selected</span> CMMI</a></li> <li><a href="#"><span class="selection">Not selected</span> DMM</a></li> <li><a href="#"><span class="selection">Not selected</span> MDDAP</a></li> <li><a href="#"><span class="selection">Not selected</span> Cybersecurity</a></li> </ul> </div>

This component upports the action of adding or removing data items from a shown data set by turning on and off certain predefined criteria. We use multi-select filters that incorporate a checkbox functionality. Similar filters are grouped in categories with a category heading separating the different categories in a filter list. We use an interactive filter that applies the filter changes to the data set as soon as a user clicks a checkbox.


Smooth Scroll

Example Markup <a href="#" class="smooth-scroll">Smooth scroll to the top of the page</a>

This component adds a scrolling interaction that jumps smoothly down a page or back up a page that doesn’t create a jarring experience for the user. Use this component when a user is navigating quickly to a different section of a page.


Return to Top

Example Markup <body class="cmmi-patterns return-to-top">

Adding the return-to-top class to the <body> tag (if it also has the cmmi-patterns class) adds a shortcut for users to quickly get back to the top of the page. Many of our pages use a single-column, long page design. These pages require the user to scroll a lot down and back to the top of the page. The button appears in the bottom right corner of the screen when the user has scrolled at least 1000px down and is using a device wide enough to use full layout.