Layouts
By default Material Base provide classic responsive layout with navbar, header, content, sidebars and footer areas. There is no settings for change structure of basic layout unless placing content in necessary Drupal regions.
To modify default layout behavior there are some options presented as classes which should be added to body tag:
no-sidebars— adds by Drupal if no sidebars content. Determines width of content area;one-sidebar— adds by Drupal if exist content for one sidebar. Determines width of content area;two-sidebars— adds by Drupal if exist content for two sidebars. Determines width of content area;wide-one-side— makes width of content area wider on the width of one sidebar;wide-two-side— makes width of content area wider on the width of two sidebars;full-width— removes main content width limits;layout-left— makes content area aligned left (by default it is centered).
For changing default widths of content, sidebar and gutter see Sizes in Styles section.
Examples
Grid
Grid system based on Flexbox Grid, see it for full supported features.
Basic example
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">
<div class="example-block">Block 1</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">
<div class="example-block">Block 2</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">
<div class="example-block">Block 3</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-12 col-lg-3">
<div class="example-block">Block 4</div>
</div>
</div>
Offsets
<div class="row">
<div class="col-xs-10 col-xs-offset-1 col-sm-6 col-sm-offset-3">
<div class="example-block">Block 1</div>
</div>
<div class="col-xs-12">
<div class="example-block">Block 2</div>
</div>
</div>
Reordering
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-4 last-xs last-sm last-md">
<div class="example-block">Block 1 (order last)</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4">
<div class="example-block">Block 2</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-4 first-xs first-sm first-md">
<div class="example-block">Block 3 (order first)</div>
</div>
</div>
Reversing
<div class="row reverse">
<div class="col-xs-12 col-sm-6 col-md-4">
<div class="example-block">Block 1</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-4">
<div class="example-block">Block 2</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-4">
<div class="example-block">Block 3</div>
</div>
</div>
Navbar
Navbar has fixed height 64px and primary color background as described in guidelines.
Navbar has some options presented as classes which should be added to body tag:
navbar-fixed— fixes navbar at top of the page;navbar-transparent— removes navbar background;navbar-light— changes navbar background to white;navbar-dark— changes navbar background to dark gray.
Every element which is child of navbar should have class navbar-item. For menu element also should be added navbar-menu class.
Navbar elements accepts pull-*, hidden-* and visible-* helper classes.
Also there are classes for specific child elements:
navbar-logo;navbar-title;navbar-slogan;navbar-branding;navbar-icon;block-search;navbar-account-menu.
Navbar markup
<div id="navbar">
<div class="navbar-item">
<div class="navbar-logo">
<a href="#"><img src="logo.svg"></a>
</div>
</div>
<div class="navbar-item">
<div class="navbar-title"><a href="#">Title</a></div>
</div>
<div class="navbar-item navbar-menu pull-center">
<ul class="menu">
<li><a href="#">Menu Item 1</a></li>
<li><a href="#">Menu Item 2</a></li>
<li><a href="#">Menu Item 3</a></li>
</ul>
</div>
<div class="navbar-item pull-right">
<div><a href="#"><i class="material-icons navbar-icon">account_circle</i></a></div>
</div>
</div>
Header
Header in Material Base has many variants for customization.
There are two regions designed for creating custom headers:
- Header content — for any kind of content, such as title, slogan, logo;
- Header background — for complicated background elements, such as changeable image, video, slider.
Header content
Height of header depends on placed content.
Big page title
<div class="block">
<div class="margin-box big-title align-center"><h1>Page title</h1></div>
</div>
Header background
Solid primary color background is default for header.
Static background image can be set by just adding header-bg-image class to body tag and placing image header-bg.jpg to theme img folder.
For using complicated background elements you should add header-bg-object class to body tag and add some block with background object to Header background region.
Id bg-object is necessary for background object.
Background image
<div class="block">
<img id="bg-object" src="img/header-bg.jpg">
</div>
Background video
<div class="block">
<video id="bg-object" src="img/header-bg.mp4" autoplay="true" loop="true" muted="true" poster="img/header-bg-poster.png"></video>
</div>
Background youtube video
<div class="block object-16by9">
<iframe id="bg-object" src="https://www.youtube.com/embed/YOUTUBEVID?rel=0&controls=0&showinfo=0&autoplay=1&modestbranding=1&wmode=transparent&loop=1&playlist=YOUTUBEVID&fs=0&disablekb=1&iv_load_policy=3&cc_load_policy=0" frameborder="0"></iframe>
</div>
Example
Drawer
Drawer can contain several elements such as logo, title and menu.
Every element which is child of drawer should have class drawer-item.
Drawer elements accepts divider-top and divider-bottom helper classes.
Ids for open and close elements are navbar-menu-toggle and drawer-menu-close respectively.
Also there is drawer-title class for title element.
Drawer open button (Navbar region)
<div class="navbar-item">
<div id="navbar-menu-toggle" ><a href="#"><i class="material-icons navbar-icon">menu</i></a></div>
</div>
Drawer close button
<div class="drawer-item divider-bottom">
<div id="drawer-menu-close"><a href="#"><i class="material-icons drawer-icon">arrow_back</i></a></div>
<div id="drawer-title">Main menu</div>
</div>
Drawer menu
<div class="drawer-item">
<ul class="menu">
<li><a href="#">Menu Item 1</a></li>
<li><a href="#">Menu Item 2</a></li>
<li><a href="#">Menu Item 3</a></li>
</ul>
</div>
Experimental
There are not fully implemented classes for body tag for permanent drawer displaying:
drawer-permanent;drawer-below-navbar(should be used withnavbar-fixedclass only).
Automatic adjusting of layout widths is not implemented yet.
Icons
For using icons:
- Drupal 8 —
material_base/iconslibrary must be included in theme; - Drupal 7 —
css/icons.cssstylesheet must be included in theme.
Icons in Material Base is implementation of official Material icons font provided by Google — material.io/icons.
Icon by "i" tag
In Material Base implemented the way described in Using the icons in HTML section of this guide, but sizes and colors applies with little different classes. Actually icons can be added by almost any tag, not just "i" tag.
<i class="material-icons">face</i>
Tag way support these additional classes:
fs-18,fs-24,fs-36,fs-48— for applying sizes;text-dark,text-light,text-accent,text-primary,text-secondarytext-disabled— for applying colors.
Icon by attribute
Also implemented the way, which provide adding icons to element by adding class icon-left or icon-right and data-icon attribute.
By this way icons can be easily added to link, button, menu item and other elements.
<span class="icon-left" data-icon="face">Text</span>
Attributes way support icon-dark, icon-light, icon-primary, icon-accent, icon-secondary and icon-disabled classes for applying colors.
Examples
Services icons
For using services icons:
- Drupal 8 —
material_base/services-iconslibrary must be included in theme; - Drupal 7 —
css/services-icons.cssstylesheet must be included in theme.
Services icons is additional set of icons, which includes logos of popular social networks and services.
All icons are stored in img/services-icons.svg file. The main reason to use SVG instead of font is more easy adding your custom icons.
There are two different ways to add icons described below.
Both ways support icon-dark, icon-light, icon-primary, icon-accent, icon-secondary and icon-disabled classes for applying colors.
Standalone way
There are two options to add icon:
- add
services-iconsandsi-*classes to element, where*is icon name; - add
services-iconsclass anddata-iconattribute with icon name.
Note:
In standalone way color changing by icon-primary, icon-accent, icon-dark and icon-light classes implemented with CSS mask property, which currently support only by modern browsers, see caniuse.com/#feat=css-masks.
Note:
Default, icon-secondary and icon-disabled colors will not be changed by $color-text or $color-text-dark variables. Changing default color should be done in img/services-icons.svg file.
<div class="services-icons mr-8" data-icon="facebook"></div>
<div class="services-icons mr-8" data-icon="twitter"></div>
<div class="services-icons mr-8" data-icon="instagram"></div>
<div class="services-icons icon-secondary mr-8" data-icon="whatsapp"></div>
<div class="services-icons icon-secondary mr-8" data-icon="wechat"></div>
<div class="services-icons icon-secondary mr-8" data-icon="telegram"></div>
<div class="services-icons icon-primary mr-8" data-icon="facebook"></div>
<div class="services-icons icon-primary mr-8" data-icon="twitter_circle"></div>
<div class="services-icons icon-primary mr-8" data-icon="instagram_circle"></div>
<div class="services-icons icon-accent mr-8" data-icon="facebook"></div>
<div class="services-icons icon-accent mr-8" data-icon="twitter_circle"></div>
<div class="services-icons icon-accent mr-8" data-icon="instagram_circle"></div>
Pseudo element way
Also implemented the way, which provide adding icons to element by adding class services-icon-left or services-icon-right and data-icon attribute.
By this way icons can be easily added to link, button, menu item and other elements.
<a href="#" class="services-icon-left" data-icon="github"> Link icon</a>
<a class="btn btn-raised btn-colored services-icon-left" data-icon="twitter" href="#">Button icon</a>
Note:
In pseudo element way icon colors implemented with CSS mask property, which currently support only by modern browsers, see caniuse.com/#feat=css-masks.
Icon names
androidapplebehancebitbucketbloggerdiggdiscorddisqusdisqus_outlinedribbbledribbble_boxdrupalevernotefacebookfacebook-messengerfacetimefiverrflickrfoursquaregithubgitlabgooglegoogle-chatgoogle-meetgoogle-photosgoogle-playgoogle_circleimessageimoinstagraminstagram_circlekakaotalkkuaishoulastfmlastfm_boxlikeelineline_boxlinkedinlinkedin_boxlivejournalmediummicrosoft-teamsodnoklassnikiodnoklassniki_boxperiscopepicsartpinterestpocketqqchatquoraqzoneredditrenrensignalsina-weiboskypeslacksnapchatsnapchat_outlinedsoundcloudspotifystackexchangestackoverflowswarmtelegramtiebatiktoktrellotumblrtumblr_boxtwitchtwittertwitter_circleupworkvibervimeovimeo_boxvkwechatwhatsappwordpressxingxing_boxyandexyandex_ruyoutubezoomExamples
Filetypes icons
For using filetypes icons:
- Drupal 8 —
material_base/filetypes-iconslibrary must be included in theme; - Drupal 7 —
css/filetypes-icons.cssstylesheet must be included in theme.
Filetypes icons is additional set of icons, which includes icons for popular file types and extentions.
Icons are stored in img/filetypes-icons.svg file.
There are two ways to add icons, the same as for Services icons.
Additionaly supported icon-colored class for applying predefined icon colors.
For standalone way there are two options to add icon:
- add
filetypes-iconsandfi-*classes to element, where*is file type or extention; - add
filetypes-iconsclass anddata-iconattribute with file type or extention.
For pseudo element way use filetypes-icon-left or filetypes-icon-right class and data-icon attribute.
Available icons
<div class="filetypes-icons mr-8" data-icon="doc"></div>
<div class="filetypes-icons mr-8" data-icon="sheet"></div>
<div class="filetypes-icons mr-8" data-icon="presentation"></div>
<div class="filetypes-icons mr-8" data-icon="pdf"></div>
<div class="filetypes-icons mr-8" data-icon="image"></div>
<div class="filetypes-icons mr-8" data-icon="video"></div>
<div class="filetypes-icons mr-8" data-icon="audio"></div>
<div class="filetypes-icons mr-8" data-icon="archive"></div>
<div class="filetypes-icons mr-8" data-icon="code"></div>
<div class="filetypes-icons icon-colored mr-8" data-icon="doc"></div>
<div class="filetypes-icons icon-colored mr-8" data-icon="sheet"></div>
<div class="filetypes-icons icon-colored mr-8" data-icon="presentation"></div>
<div class="filetypes-icons icon-colored mr-8" data-icon="pdf"></div>
<div class="filetypes-icons icon-colored mr-8" data-icon="image"></div>
<div class="filetypes-icons icon-colored mr-8" data-icon="video"></div>
<div class="filetypes-icons icon-colored mr-8" data-icon="audio"></div>
<div class="filetypes-icons icon-colored mr-8" data-icon="archive"></div>
<div class="filetypes-icons icon-colored mr-8" data-icon="code"></div>
Icon names
doctxtdocxrtfodt
sheetxlsxlsxcsvods
presentationpptpptxkeyodp
pdf
imagejpgjpegpnggifpsdsvgaiepscdr
videoavimpgmpegmp4movflvmkv
audiomp3flacoggwavapem4aaac
archiveziprargz7zjarappexeapkdebmsirpm
codephpmoduleincinfoymlcssscsshtmlhtmxmlclassjavaccpphjsplpysh
Examples
Buttons
To make element looks as a button class btn needs to be added. Also there are additional classes to modify button look.
To any kind of buttons can be added icons and/or tooltips.
Flat Buttons
Classes btn-colored, btn-accent and btn-disabled changes color.
<a class="btn" href="#">Button flt</a>
<a class="btn btn-colored" href="#">Btnflat clr</a>
<a class="btn btn-accent" href="#">Btnflt acn</a>
<a class="btn btn-disabled" href="#">Btnflt dis</a>
Raised buttons
Class btn-raised raises button.
<a class="btn btn-raised" href="#">Button rsd</a>
<a class="btn btn-raised btn-colored" href="#">Bttrsd clr</a>
<a class="btn btn-raised btn-accent" href="#">Btnrsd acn</a>
<a class="btn btn-raised btn-disabled" href="#">Btnrsd dis</a>
Floating action buttons
Floating action button makes by fab class.
Also there are additional classes fab-colored, fab-accent — for modify button color, and fab-mini — for modify button size.
For placing floating action buttons specially designed Actions region.
<a class="fab" href="#">М</a>
<a class="fab fab-colored icon-left" data-icon="face" href="#"></a>
<a class="fab fab-accent fab-mini" href="#"><i class="material-icons">face</i></a>
Tooltips
Tooltips can be easily added to elements such as buttons, links and so on.
To add a tooltip class tooltip and attribute data-tooltip should be added to element.
When needed icon "by attribute" and tooltip for one element in the same time icon-right should be used.
Default position of a tooltip is top canter, different posions can be set by adding one of this classes: tooltip-top-left, tooltip-top-right, tooltip-bottom, tooltip-bottom-left, tooltip-bottom-right, tooltip-left and tooltip-right.
<a class="btn tooltip" data-tooltip="Some description" href="#">Tooltip Top</a>
<a class="btn tooltip tooltip-bottom" data-tooltip="More bigger description" href="#">Tooltip Bottom</a>
<a class="btn tooltip tooltip-right" data-tooltip="Just another bigger description" href="#">Tooltip Right</a>
Tabs
Tabs can be styled by adding tabs class to ul element or its parent.
Tabs styles automatically applies to Drupal tabs.
<div class="tabs">
<ul>
<li><a href="#" class="is-active">Tab one</a></li>
<li><a href="#">Tab two</a></li>
<li><a href="#">Tab three</a></li>
</ul>
</div>
...
<ul class="tabs">
<li><a href="#" class="is-active">Tab one</a></li>
<li><a href="#">Tab two</a></li>
<li><a href="#">Tab three</a></li>
</ul>
Cards
Card is very universal style to highlight elements on the page.
Simple card
For simple use of card look you just need to add card class to an element.
Simple card
Simple card content.
<div class="card">
<h3>Simple card</h3>
<p>Simple card content.</p>
</div>
Card with complicated markup
For complicated card there are some additional markup and classes.
Every card children should have card-item class and also can have additional classes card-media, card-title, card-text and card-actions for corresponding elements.
Also card accept classes for modify background colors:
card-bg-primary,card-bg-accent— for applying theme colors;card-bg-*, where*is color name (see list here) — for applying other Material design palette colors.
<div class="card">
<div class="card-item card-title">
<h3><a href="#">Card title</a></h3>
<span class="subtitle">Subtitle</span>
</div>
<div class="card-item card-text">
<p>Complex card content.</p>
</div>
<div class="card-item card-actions divider-top">
<a class="btn" href="#">Action</a>
</div>
</div>
...
<div class="card card-bg-primary">
<div class="card-item card-title">
<h3><a href="#">Card title</a></h3>
<span class="subtitle">Subtitle</span>
</div>
<div class="card-item card-text">
<p>Complex card content.</p>
</div>
<div class="card-item card-actions divider-top">
<a class="btn" href="#">Action</a>
</div>
</div>
Card with two columns
To make two columned card you need to add card-vertical class to card element and create two additional wrappers for child elements — card-column-left and card-column-right. On narrow screens columns are getting stacked.
To card-column-* can be applied classes which modifies width:
card-column-fixwhich equalscard-column-240;card-column-360;card-column-180;card-column-120;card-column-80;card-column-stretch— for fluid with.
<div class="card card-vertical">
<div class="card-column-left card-column-180">
<div class="card-item card-media media-cover">
<img src="image.svg">
</div>
</div>
<div class="card-column-right card-column-stretch">
<div class="card-item card-title">
<h3><a href="#">Card title</a></h3>
</div>
<div class="card-item card-text">
<p>Two columns card content.</p>
</div>
<div class="card-item card-actions">
<a class="btn" href="#">Action</a>
</div>
</div>
</div>
Card media
To card can be added media element, such as image and video. The element should have card-media class.
To image can be applied stretching, if it dimensions does not fit in wrapping element by ratio, media-cover class does it.
Over the media element can be placed title, which accept classes pull-top, pull-bottom for alignment, and title for semitransparent background.
Card media content.
Card media content.
<div class="card">
<div class="card-item card-media">
<a href="#"><img src="image.svg"></a>
<h3 class="title pull-bottom"><a href="#">Card media title</a></h3>
</div>
<div class="card-item card-text">
<p>Card media content.</p>
</div>
</div>
...
<div class="card">
<div class="card-item card-media media-cover">
<a href="#"><img src="image.svg"></a>
<h3 class="title pull-top"><a href="#">Card media title</a></h3>
</div>
<div class="card-item card-text">
<p>Card media content.</p>
</div>
</div>
Сard grid
Card grid provide grid view and big amount of cards. To row element should be added class card-grid and to col-* element should be added class card-wrapper.
In grid view removed shadows and border radius for media elements.
<div class="row card-grid">
<div class="col-xs-12 col-sm-6 col-md-3 card-wrapper">
<div class="card">
<div class="card-item card-media">
<a href="#"><img src="image.svg"></a>
<h3 class="title pull-bottom"><a href="#">Card title</a></h3>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-3 card-wrapper">
<div class="card">
<div class="card-item card-media">
<a href="#"><img src="image.svg"></a>
<h3 class="title pull-bottom"><a href="#">Card title</a></h3>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-3 card-wrapper">
<div class="card">
<div class="card-item card-media">
<a href="#"><img src="image.svg"></a>
<h3 class="title pull-bottom"><a href="#">Card title</a></h3>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-3 card-wrapper">
<div class="card">
<div class="card-item card-media">
<a href="#"><img src="image.svg"></a>
<h3 class="title pull-bottom"><a href="#">Card title</a></h3>
</div>
</div>
</div>
</div>
Card style for main content
In Material Base implemented class card-main which can be added to any card element to make it take full width on narrow screens.
Body tag class content-card does same thing for region Main content in default layout. Body tag class main-shift-up rises main content over header area on 128px. Class shift-big increase shift to 280px.
Tables
By default to tables applied simple styles: 100% width, background, header styles, row dividers.
Also there are additional classes for table element:
table-bordered— adds border;table-striped— adds zebra;table-card— styles table like card.
Table rows can be highlighted with selected class.
| Name | House | Comments |
|---|---|---|
| Eddard Stark | Stark | Lord of Winterfell |
| Arya Stark | Stark | No one |
| Jon Snow | Stark | Knows nothing |
<table class="table-bordered table-striped">
<thead>
<tr>
<th>Name</th>
<th>House</th>
<th>Comments</th>
</tr>
</thead>
<tbody>
<tr>
<td>Eddard Stark</td>
<td>Stark</td>
<td>Lord of Winterfell</td>
</tr>
<tr>
<td>Arya Stark</td>
<td>Stark</td>
<td>No one</td>
</tr>
<tr>
<td>Jon Snow</td>
<td>Stark</td>
<td>Knows nothing</td>
</tr>
</tbody>
</table>
Responsive tables
To make table responsive needs additional wrapping element with table-responsive-wrapper class and table-responsive class should be added to table tag.
Note
If table-responsive needs to be applied at the same time with table-card or table-bordered the last one should be added to wrapping element as well as table-responsive-wrapper.
Also heading labels should be added as value of data-label attribute to all table cells.
| Name | House | Comments |
|---|---|---|
| Eddard Stark | Stark | Lord of Winterfell |
| Arya Stark | Stark | No one |
| Jon Snow | Stark | Knows nothing |
<div class="table-responsive-wrapper table-card">
<table class="table-responsive">
<thead>
<tr>
<th>Name</th>
<th>House</th>
<th>Comments</th>
</tr>
</thead>
<tbody>
<tr>
<td data-label="Name">Eddard Stark</td>
<td data-label="House">Stark</td>
<td data-label="Comments">Lord of Winterfell</td>
</tr>
<tr class="selected">
<td data-label="Name">Arya Stark</td>
<td data-label="House">Stark</td>
<td data-label="Comments">No one</td>
</tr>
<tr>
<td data-label="Name">Jon Snow</td>
<td data-label="House">Stark</td>
<td data-label="Comments">Knows nothing</td>
</tr>
</tbody>
</table>
</div>
Tip
Adding data-label attribute to views table can be little tricky in Drupal. For Drupal 8 you can use solution below.
In views-view-table.html.twig replace:
<td{{ column.attributes.addClass(column_classes) }}>
by:
<td{{ column.attributes.addClass(column_classes).setAttribute('data-label', header[key].content) }}>
Code
By defauult code font and background styles applies to code and pre tags (code highlighting).
For using code highlighting:
- Drupal 8 —
material_base/code-highlightlibrary must be included in theme; - Drupal 7 —
css/code-highlight.cssstylesheet andjs/prism.jsscript must be included in theme.
Code block and inline elements (code and pre tags) accept language-* to apply right syntax scheme.
Supported language-* values:
language-markup;language-css;language-clike;language-javascript;language-apacheconf;language-bash;language-c;language-cpp;language-css-extras;language-git;language-java;language-markdown;language-php;language-php-extras;language-sass;language-scss;language-twig;language-yaml.
Code highlighting provided by Prism library, you can download your own customized set of supported languages and highlight styles on official project site if necessary.
Code block (pre tag) accept line-numbers class for showing numbers and code-card class for showing in card.
@charset "UTF-8";
@import "compass";
// variables
$background: #FFF;
$color: #404040;
// mark-up
* { @include box-sizing(border-box); }
html, body { background: $background; color: $color; }
// styles
strong, b { font-weight: bold; }
em, i { font-style: italic; }
<pre class="line-numbers code-card">
<code class="language-scss">
@charset "UTF-8";
@import "compass";
// variables
$background: #FFF;
$color: #404040;
// mark-up
* { @include box-sizing(border-box); }
html, body { background: $background; color: $color; }
// styles
strong, b { font-weight: bold; }
em, i { font-style: italic; }
</code>
</pre>
Forms
Form element styles designed to match Drupal form markup.
For most elements only form-item class for wrapper element is necessary.
Text, password, e-mail
<div class="form-item">
<label>Text Label</label>
<input type="text" placeholder="Text field">
<div class="description">Hint: some info.</div>
</div>
Radio buttons
<div class="form-item">
<label>Radio label</label>
<div class="form-radios">
<div class="form-item">
<input id="radio-1" type="radio" name="radio" value="1" checked> <label for="radio-1" class="option">Radio 1</label>
</div>
<div class="form-item">
<input id="radio-2" type="radio" name="radio" value="2"> <label for="radio-2" class="option">Radio 2</label>
</div>
</div>
</div>
Checkboxes
<div class="form-item">
<label>Checkbox label</label>
<div class="form-checkboxes">
<div class="form-item">
<input id="checkbox-3" type="checkbox" value="3" checked> <label for="checkbox-3" class="option">Check 3</label>
</div>
<div class="form-item">
<input id="checkbox-4" type="checkbox" value="4"> <label for="checkbox-4" class="option">Check 4</label>
</div>
</div>
</div>
Single checkbox
<div class="form-item">
<input id="checkbox-single" type="checkbox" value="5"> <label for="checkbox-single" class="option">Check me.</label>
</div>
Select
<div class="form-item form-type-select">
<label>Label select</label>
<select class="form-select">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
</div>
File
<div class="form-item form-type-file">
<label>Label file</label>
<input type="file">
<div class="description">Allowed extensions: jpg, jpeg, png, gif</div>
</div>
Textarea
<div class="form-item form-type-textarea">
<label>Label textarea</label>
<div class="form-textarea-wrapper">
<textarea cols="60" rows="5"></textarea>
</div>
</div>
Texarea boxed
<div class="form-item form-type-textarea textarea-boxed">
<label>Label textarea</label>
<div class="form-textarea-wrapper">
<textarea cols="60" rows="5"></textarea>
</div>
</div>
Tip
Default style for textarea is the same as text field (in Material Design it called Multi line field).
Alternative "boxed" style (in Material Design it called text area) can be applied by implementing hook_form_alter in your theme, like this:
$form['FIELD_NAME']['widget'][0]['#wrapper_attributes']['class'][] = 'textarea-boxed';
Submit button
<div class="form actions">
<input type="submit" value="Submit">
</div>
Search
Search form styles designed for Drupal markup. Styles applies to form tag, form-item and input tag, so these elements are necessary.
Wrapper element should have block-search class, also search-persistent class may be added for boxed style.
For changing default search form width see Sizes in Styles section.
<div class="block-search">
<form>
<div class="form-item icon-left" data-icon="search">
<input type="text" placeholder="Search">
</div>
</form>
</div>
Note
For using search-persistent style in Drupal 8 with Search API Autocomlete search-persistent-autocomplete class should be added to body tag.
Media
There are few classes for media elements:
img-responsive— for making images responsive;object-16by9— for wrapper of responsive objects with 16:9 aspect ratio.
Also many of helper classes can be applied to media elements.
<div>
<img class="img-responsive pull-center" src="image.svg">
</div>
Helpers
Helper classes is set of useful classes for applying to any elements which can make them look as you need without writing CSS code.
For using helper classes:
- Drupal 8 —
material_base/helperslibrary must be included in theme; - Drupal 7 —
css/helpers.cssstylesheet must be included in theme.
There are these classes:
pull-left,pull-center,pull-rightoralign-left,align-center,align-right— for align the element;text-align-left,text-align-center,text-align-righttext-align-justify— for align element's children;fs-12,fs-14,fs-18— for changing font size;mt-*,mb-*,mr-*,ml-*, where*can be8,16,24,32,48or64— for adding margin;pt-*,pb-*,pr-*,pl-*, where*can be8,16,24,32,48or64— for adding padding;no-*, where*can bemt,mb,mr,ml, m,pt,pb,pr,plorp— for removing some or all margins/paddings;no-wr,no-br— for preventing word wrap;hidden,hidden-*,visible-*, where*can besm,mdorlg— for hiding/showing element on different screen sizes.
Information blocks
In Material Base there are styles for three type of information blocks: hihglight, info and important.
Highlight block title
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Info block title
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Important block title
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
<div class="highlight">
<h4>Highlight block title</h4>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut <a href="#">labore et dolore</a> magna aliqua.</p>
</div>
<div class="info">
<h4>Info block title</h4>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut <a href="#">labore et dolore</a> magna aliqua.</p>
</div>
<div class="important">
<h4>Important block title</h4>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut <a href="#">labore et dolore</a> magna aliqua.</p>
</div>
Also there are styles for three type of Drupal system messages: messages-status, messages-warning and messages-error.
<div class="messages-status">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut <a href="#">labore et dolore</a> magna aliqua.
</div>
<div class="messages-warning">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut <a href="#">labore et dolore</a> magna aliqua.
</div>
<div class="messages-error">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut <a href="#">labore et dolore</a> magna aliqua.
</div>
Collapsible panels
To create collapsible panels two elements needed: first, toggle element with collapsible-toggle class and data-target attribute, and second with collapsible-content class and id attribute. The value of data-target and id attributes should be the same for linked elements.
Panel 1 content.
Panel 2 content.
<div class="collapsible-toggle" data-target="panel-1">
<span>Panel 1 title</span>
</div>
<div class="collapsible-content" id="panel-1">
<p>Panel 1 content.</p>
</div>
<div class="collapsible-toggle" data-target="panel-2">
<span>Panel 2 title</span>
</div>
<div class="collapsible-content" id="panel-2">
<p>Panel 2 content.</p>
</div>
Dropdown menus
To create dropdown menus two elements needed: first, toggle element with menu-dropdown-toggle class and data-target attribute, and second with menu-dropdown class and id attribute. The value of data-target and id attributes should be the same for linked elements.
<div class="menu-dropdown-toggle" data-target="dd-menu-1">
<a class="btn" href="#">Dropdown</a>
</div>
<ul class="menu menu-dropdown" id="dd-menu-1">
<li>
<a href="#">Item 1</a>
</li>
<li>
<a href="#">Item 2</a>
</li>
</ul>
Pager
Material Base provide markup and styles for pager element. By default no additional work needed.
Full pager
<div class="pager">
<ul class="pager-items">
<li class="pager-item item-first"><a href="#"><span>‹‹</span></a></li>
<li class="pager-item item-previous"><a href="#"><span>‹</span></a></li>
<li class="pager-item"><a href="#">1</a></li>
<li class="pager-item"><a href="#">2</a></li>
<li class="pager-item item-current"><span>3</span></li>
<li class="pager-item"><a href="#">4</a></li>
<li class="pager-item"><a href="#">5</a></li>
<li class="pager-item item-ellipsis"><span><span>…</span></span></li>
<li class="pager-item item-next"><a href="#"><span>›</span></a></li>
<li class="pager-item item-last"><a href="#"><span>››</span></a></li>
</ul>
</div>
Mini pager
- ‹
- Page 1
- ›
<div class="pager">
<ul class="pager-items">
<li class="pager-item item-previous"><span><span>‹</span></span></li>
<li class="pager-item item-current"><span><span>Page 1</span></span></li>
<li class="pager-item item-next"><a href="#"><span>›</span></a></li>
</ul>
</div>
Card actions pager
List of something
- ‹
- ›
<div class="card">
<div class="card-item card-title"><h4>List of something</h4></div>
<div class="card-item card-actions divider-top text-align-right">
<div class="pager-summary">1–20 from 84</div> <!-- optional -->
<div class="pager">
<ul class="pager-items">
<li class="pager-item item-previous"><span><span>‹</span></span></li>
<li class="pager-item item-next"><a href="#"><span>›</span></a></li>
</ul>
</div>
</div>
</div>
Drupal specific
In Material Base there are defined styles for standard Drupal elements:
- Breadcrumbs;
- Search forms, including Search API exposed filter;
- Menus;
- Pager;
- Login forms;
- Toolbar, including modules Admin Toolbar (Admin Menu for Drupal 7) and Adminimal Admin Toolbar;
- Tabs;
- System messages;
- Maintenance page.