The standard font Material Design uses is Roboto. We have included the font files with our framework.
We bundle our framework with the latest iteration of Roboto Google has released. It comes with 5 different font weights you can use: 200, 300, 400, 500, 600.
Here is an image from Google's Roboto Specimen document displaying the different font weights.
In case you don't want to use Roboto on your webpage, fear not. Simply change the font stack by modifying the code below to your liking and add it to your custom css.
html {
font-family: GillSans, Calibri, Trebuchet, sans-serif;
}
We provide some basic styling on header tags. In the example on the right, you can see the difference in sizes between the 6 header tags.
Blockquotes are mainly used to give emphasis to a quote or citation. You can also use these for some extra text hierarchy and emphasis.
This is an example quotation that uses the blockquote tag.
Here is another line to make it look bigger.
<blockquote>
This is an example quotation that uses the blockquote tag.
</blockquote>
One common flaw we've seen in many frameworks is a lack of support for truly responsive text. While elements on the page resize fluidly, text still resizes on a fixed basis. To ameliorate this problem, for text heavy pages, we've created a class that fluidly scales text size and line-height to optimize readability for the user. Line length stays between 45-80 characters and line height scales to be larger on smaller screens.
To see Flow Text in action, slowly resize your browser and watch the size of this text body change! Use the button above to toggle off/on flow-text to see the difference!
To use flow-text on a body of text, simply just add the class flow-text
to a tag, see the code blow.
<p class="flow-text">I am Flow Text</p>
We are using a standard 12 column fluid responsive grid system.The grid helps you layout your page in an ordered, easy fashion
The container class is not strictly part of the grid but is important in laying out content. It allows you to center your page content. The container
class is set to ~70% of the window width. It helps you center and contain your page content. We use the container to contain our body content.
Try the button below to see what the page looks like without containers
Turn off ContainersTo add a container just put your content inside a <div>
tag with a container
class. Here's an example of how your page might be set up.
<body>
<div class="container">
<!-- Page Content goes here -->
</div>
</body>
Take a look at this section to quickly understand how the grid works!
Our standard grid has 12 columns. No matter the size of the browser, each of these columns will always have an equal width.
To get a feel of how the grid is used in HTML. Take a look at this code below which will produce a similar result as the one above.
<div class="row">
<div class="col s1">1</div>
<div class="col s1">2</div>
<div class="col s1">3</div>
<div class="col s1">4</div>
<div class="col s1">5</div>
<div class="col s1">6</div>
<div class="col s1">7</div>
<div class="col s1">8</div>
<div class="col s1">9</div>
<div class="col s1">10</div>
<div class="col s1">11</div>
<div class="col s1">12</div>
</div>
Note: For now, just know that the s1
stands for small-1 which in plain English means "1 column on small screens".
Remember when you are creating your layout that all columns must be contained inside a row and that you must add the col
class to your inner divs to make them into columns
<div class="row">
<div class="col s12">This div is 12-columns wide</div>
<div class="col s6">This div is 6-columns wide</div>
<div class="col s6">This div is 6-columns wide</div>
</div>
To offset, simply add offset-s2
to the class where s
signifies the screen class-prefix (s = small, m = medium, l = large) and the number after is the number of columns you want to offset by.
<div class="row">
<div class="col s12 grid-example"><span class="flow-text">This div is 12-columns wide on all screen sizes</span></div>
<div class="col s6 offset-s6 grid-example"><span class="flow-text">6-columns (offset-by-6)</span></div>
</div>
Here we will show you how to create some commonly used layouts with our grid system. Hopefully these will get you more comfortable with laying out elements. To keep these demos simple, the ones here will not be responsive.
If we want 3 divs that are equal size, we define the divs with a width of 4-columns, 4+4+4 = 12, which nicely adds up to 12. Inside those divs, we can put our content. Take our front page content for example. We've modified it slightly for the sake of this example.
Speeds up development
We did most of the heavy lifting for you to provide a default stylings that incorporate our custom components.
User Experience Focused
By utilizing elements and principles of Material Design, we were able to create a framework that focuses on User Experience.
Easy to work with
We have provided detailed documentation as well as specific code examples to help new users get started.
<div class="row">
<div class="col s4">
<!-- Promo Content 1 goes here -->
</div>
<div class="col s4">
<!-- Promo Content 2 goes here -->
</div>
<div class="col s4">
<!-- Promo Content 3 goes here -->
</div>
</div>
You can see how easy it is to create layouts using the grid system. Just remember to make sure your column numbers add up to 12 for a even layout
<!-- Navbar goes here -->
<!-- Page Layout here -->
<div class="row">
<div class="col s3">
<!-- Grey navigation panel -->
</div>
<div class="col s9">
<!-- Teal page content -->
</div>
</div>
Above we showed you how to layout elements using our grid system. Now we'll show you how to design your layouts so that they look great on all screen sizes.
Mobile Devices <= 600px |
Tablet Devices <= 992px |
Desktop Devices >= 992px |
|
---|---|---|---|
Class Prefix | .s |
.m |
.l |
Container Width | 85% | 85% | 70% |
Number of Columns | 12 | 12 | 12 |
In the previous examples, we only defined the size for small screens using "col s12"
. This is fine if we want a fixed layout since the rules propogate upwards. By just saying s12, we are essentially saying "col s12 m12 l12"
. But by explicitly defining the size we can make our website more responsive.
<div class="row">
<div class="grid-example col s12"><span class="flow-text">I am always full-width (col s12)</span></div>
<div class="grid-example col s12 m6"><span class="flow-text">I am full-width on mobile (col s12 m6)</span></div>
</div>
In this example below, we take the same layout from above, but we make it responsive by defining how many columns the div should take up on each screen size. Try resizing your browser and watch the layout change below.
<!-- Navbar goes here -->
<!-- Page Layout here -->
<div class="row">
<div class="col s12 m4 l3"> <!-- Note that "m4 l3" was added -->
<!-- Grey navigation panel
This content will be:
3-columns-wide on large screens,
4-columns-wide on medium screens,
12-columns-wide on small screens -->
</div>
<div class="col s12 m8 l9"> <!-- Note that "m8 l9" was added -->
<!-- Teal page content
This content will be:
9-columns-wide on large screens,
8-columns-wide on medium screens,
12-columns-wide on small screens -->
</div>
</div>
<div class="row">
<div class="col s12"><p>s12</p></div>
<div class="col s12 m3 l2"><p>s12 m4</p></div>
<div class="col s12 m6 l8"><p>s12 m4</p></div>
<div class="col s12 m3 l2"><p>s12 m4</p></div>
</div>
<div class="row">
<div class="col s12 m6 l3"><p>s12 m6 l3</p></div>
<div class="col s12 m6 l3"><p>s12 m6 l3</p></div>
<div class="col s12 m6 l3"><p>s12 m6 l3</p></div>
<div class="col s12 m6 l3"><p>s12 m6 l3</p></div>
</div>
Forms are the standard way to receive user inputted data. The transitions and smoothness of these elements are very important because of the inherent user interaction associated with forms.
Text fields allow user input. The border should light up simply and clearly indicating which field the user is currently editing.
<div class="row">
<form class="col s12">
<div class="row">
<div class="input-field col s6">
<input id="first_name" type="text" required>
<label for="first_name">First Name</label>
</div>
<div class="input-field col s6">
<input id="last_name" type="text" required>
<label for="last_name">Last Name</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input id="username" type="text" required>
<label for="username">Username</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input id="password" type="password" required>
<label for="password">Password</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input id="email" type="email" required>
<label for="email">Email</label>
</div>
</div>
</form>
</div>
Textareas allow larger expandable user input. The border should light up simply and clearly indicating which field the user is currently editing.
Textareas will auto resize to the text inside.
<div class="row">
<form class="col s12">
<div class="row">
<div class="input-field col s12">
<textarea class="materialize-textarea" required></textarea>
<label>Textarea</label>
</div>
</div>
</form>
</div>
Select allows user input through specified options.
<label>Option</label>
<select>
<option value="" disabled selected>Choose your option</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
<select class="disabled">
<option value="" disabled selected>Choose your option</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
You must initialize the select element as shown below. In addition, you will need a separate call for any dynamically generated select elements your page generates.
$('select').not('.disabled').material_select();
Radio Buttons are used when the user must make only one selection out of a group of items
Add radio buttons to a group by adding the name attribute along with the same corresponding value for each of the radio buttons in the group. Create disabled radio buttons by adding the disabled attribute as shown below.
<form action="#">
<p>
<input name="group1" type="radio" id="test1" />
<label for="test1">Red</label>
</p>
<p>
<input name="group1" type="radio" id="test2" />
<label for="test2">Yellow</label>
</p>
<p>
<input class="with-gap" name="group1" type="radio" id="test3" />
<label for="test3">Green</label>
</p>
<p>
<input name="group1" type="radio" id="test4" disabled="disabled" />
<label for="test4">Brown</label>
</p>
</form>
To create a radio button with a gap, add class="with-gap"
to your input. See the example below.
<p>
<input class="with-gap" name="group3" type="radio" id="test5" checked />
<label for="test5">Red</label>
</p>
Checkboxes
<form action="#">
<p>
<input type="checkbox" id="test5" />
<label for="test5">Red</label>
</p>
<p>
<input type="checkbox" id="test6" checked="checked" />
<label for="test6">Yellow</label>
</p>
<p>
<input type="checkbox" id="test7" checked="checked" disabled="disabled" />
<label for="test7">Green</label>
</p>
<p>
<input type="checkbox" id="test8" disabled="disabled" />
<label for="test8">Brown</label>
</p>
</form>
Add a range slider for values with a wide range. This one is set to be a number between 0 and 100.
<form action="#">
<p class="range-field">
<input type="range" id="test5" min="0" max="100" />
</p>
</form>
We use a modified version of pickadate.js to create a materialized date picker. Test it out below!
<input type="date" class="datepicker">
At this time, not all pickadate.js options are working with our implementation
$('.datepicker').pickadate();
There are 3 main button types described in material design. The raised button is a standard button that signify actions and seek to give depth to a mostly flat page. The floating circular action button is meant for very important functions. Flat buttons are usually used within elements that already have depth like cards or modals.
<a class="waves-effect waves-light btn">Stuff</a>
<a class="waves-effect waves-light btn"><i class="mdi-file-cloud left"></i>button</a>
<a class="waves-effect waves-light btn"><i class="mdi-file-cloud right"></i>button</a>
When you use a button to submit a form, instead of using a input tag, use a button tag with a type submit
<button class="btn waves-effect waves-light" type="submit" name="action">Submit
<i class="mdi-content-send right"></i>
</button>
This button has a larger height for buttons that need more attention.
Button button button
<a class="waves-effect waves-light btn-large">Button</a>
<a class="waves-effect waves-light btn-large"><i class="mdi-file-cloud left"></i>button</a>
<a class="waves-effect waves-light btn-large"><i class="mdi-file-cloud right"></i>button</a>
The navbar is fully contained by an HTML5 Nav tag. Inside a recommended container div, there are 2 main parts of the navbar. A logo or brand link, and the navigations links. You can align these links to the left or right.
To right align your navbar links, just add a right
class to your <ul>
that contains them.
<nav>
<div class="nav-wrapper">
<a href="#" class="brand-logo">Logo</a>
<ul id="nav-mobile" class="right side-nav">
<li><a href="sass.html">Sass</a></li>
<li><a href="components.html">Components</a></li>
<li><a href="javascript.html">JavaScript</a></li>
</ul>
</div>
</nav>
To left align your navbar links, just add a left
class to your <ul>
that contains them.
<nav>
<div class="nav-wrapper">
<a href="#" class="brand-logo right">Logo</a>
<ul id="nav-mobile" class="left side-nav">
<li><a href="sass.html">Sass</a></li>
<li><a href="components.html">Components</a></li>
<li><a href="javascript.html">JavaScript</a></li>
</ul>
</div>
</nav>
You can add icons into links. For icon only links you don't need any additional class. Just pop the i
tag in and it will work.
<nav>
<div class="nav-wrapper">
<div class="col s12">
<a href="#!" class="brand-logo">Logo</a>
<ul class="side-nav">
<li><a href="sass.html"><i class="mdi-action-search"></i></a></li>
<li><a href="components.html"><i class="mdi-action-view-module"></i></a></li>
<li><a href="javascript.html"><i class="mdi-navigation-refresh"></i></a></li>
<li><a href="mobile.html"><i class="mdi-navigation-more-vert"></i></a></li>
</ul>
</div>
</div>
</nav>
For adding an icon to a text link you need to add either a left
or right
class to the icon depending on where you want the icon to be.
<nav>
<div class="nav-wrapper">
<div class="col s12">
<a href="#!" class="brand-logo">Logo</a>
<ul class="side-nav">
<li><a href="sass.html"><i class="mdi-action-search left"></i>Link with Left Icon</a></li>
<li><a href="components.html"><i class="mdi-action-view-module right"></i>Link with Right Icon</a></li>
</ul>
</div>
</div>
</nav>
When your nav bar is resized, you will see that the links on the right turn into a hamburger icon
If you already included the code for the button collapse as we did in the examples above, all you have to do now is place this code in your page's $( document ).ready(function(){})
code. This example below assumes you have not modified the classes in the above example. In the case that you have, just change the jQuery selector in the line below to match it.
$(".button-collapse").sideNav();
Cards are a convenient means of displaying content composed of different types of objects. They’re also well-suited for presenting similar objects whose size or supported actions can vary considerably, like photos with captions of variable length.
I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.
<div class="row">
<div class="col s12 m6">
<div class="card blue-grey darken-1">
<div class="card-content white-text">
<span class="card-title">Card Title</span>
<p>I am a very simple card. I am good at containing small bits of information.
I am convenient because I require little markup to use effectively.</p>
</div>
<div class="card-action">
<a href="#">This is a link</a>
<a href='#'>This is a link</a>
</div>
</div>
</div>
</div>
I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.
Here is the standard card with an image thumbnail.
<div class="row">
<div class="col s12 m7">
<div class="card">
<div class="card-image">
<img src="images/sample-1.jpg">
<span class="card-title">Card Title</span>
</div>
<div class="card-content">
<p>I am a very simple card. I am good at containing small bits of information.
I am convenient because I require little markup to use effectively.</p>
</div>
<div class="card-action">
<a href="#">This is a link</a>
<a href='#'>This is a link</a>
</div>
</div>
</div>
</div>
Here is some more information about this product that is only revealed once clicked on.
Here you can add a card that reveals more information once clicked. Just add the card-reveal
div with a span.card-title
inside to make this work.
<div class="card">
<div class="card-image">
<img src="images/office.jpg">
</div>
<div class="card-content">
<span class="card-title grey-text darken-4">Card Title <i class="mdi-navigation-more-vert right"></i></span>
<p><a href="#">This is a link</a></p>
</div>
<div class="card-reveal">
<span class="card-title grey-text darken-4">Card Title <i class="mdi-navigation-close right"></i></span>
<p>Here is some more information about this product that is only revealed once clicked on.</p>
</div>
</div>
I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.
The Small Card limits the height of the card. We provide this as a utility class for you to easily ensure equal card size.
<div class="row">
<div class="col s12">
<div class="card small">
<div class="card-image">
<img src="images/sample-1.jpg">
<span class="card-title">Card Title</span>
</div>
<div class="card-content">
<p>I am a very simple card. I am good at containing small bits of information.
I am convenient because I require little markup to use effectively.</p>
</div>
<div class="card-action">
<a href="#">This is a link</a>
<a href='#'>This is a link</a>
</div>
</div>
</div>
</div>
For a simpler card with less markup, try using a card panel which just has padding and a shadow effect
<div class="row">
<div class="col s12 m5">
<div class="card-panel teal">
<span class="white-text">I am a very simple card. I am good at containing small bits of information.
I am convenient because I require little markup to use effectively. I am similar to what is called a panel in other frameworks.
</span>
</div>
</div>
</div>
If you have content that will take a long time to load, you should give the user feedback. In this case we have an animated preloader.
<div class="preloader-wrapper big active">
<div class="spinner-layer spinner-blue">
<div class="circle-clipper left">
<div class="circle"></div>
</div><div class="gap-patch">
<div class="circle"></div>
</div><div class="circle-clipper right">
<div class="circle"></div>
</div>
</div>
<div class="spinner-layer spinner-red">
<div class="circle-clipper left">
<div class="circle"></div>
</div><div class="gap-patch">
<div class="circle"></div>
</div><div class="circle-clipper right">
<div class="circle"></div>
</div>
</div>
<div class="spinner-layer spinner-yellow">
<div class="circle-clipper left">
<div class="circle"></div>
</div><div class="gap-patch">
<div class="circle"></div>
</div><div class="circle-clipper right">
<div class="circle"></div>
</div>
</div>
<div class="spinner-layer spinner-green">
<div class="circle-clipper left">
<div class="circle"></div>
</div><div class="gap-patch">
<div class="circle"></div>
</div><div class="circle-clipper right">
<div class="circle"></div>
</div>
</div>
</div>
Collections allow you to group list objects together.
<ul class="collection">
<li class="collection-item">Alvin</li>
<li class="collection-item">Alvin</li>
<li class="collection-item">Alvin</li>
<li class="collection-item">Alvin</li>
</ul>
<div class="collection">
<a href="#!" class="collection-item">Alvin</a>
<a href="#!" class="collection-item active">Alvin</a>
<a href="#!" class="collection-item">Alvin</a>
<a href="#!" class="collection-item">Alvin</a>
</div>
<ul class="collection with-header">
<li class="collection-header"><h4>First Names</h4></li>
<li class="collection-item">Alvin</li>
<li class="collection-item">Alvin</li>
<li class="collection-item">Alvin</li>
<li class="collection-item">Alvin</li>
</ul>
<ul class="collection with-header">
<li class="collection-header"><h4>First Names</h4></li>
<li class="collection-item"><div>Alvin<a href="#!" class="secondary-content"><i class="secondary-content mdi-content-send"></i></a></div></li>
<li class="collection-item"><div>Alvin<a href="#!" class="secondary-content"><i class="mdi-content-send"></i></a></div></li>
<li class="collection-item"><div>Alvin<a href="#!" class="secondary-content"><i class="mdi-content-send"></i></a></div></li>
<li class="collection-item"><div>Alvin<a href="#!" class="secondary-content"><i class="mdi-content-send"></i></a></div></li>
</ul>
Badges can notify you that there are new or unread messages or notifications. Add the new
class to the badge to give it the background.
<ul class="collection">
<a href="#!" class="collection-item">Alan<span class="badge">1</span></a>
<a href="#!" class="collection-item">Alan<span class="new badge">4</span></a>
<a href="#!" class="collection-item">Alan</li>
<a href="#!" class="collection-item">Alan<span class="badge">14</span></a>
</ul>
<ul id="dropdown2" class="dropdown-content">
<li><a href="#!">one<span class="badge">1</span></a></li>
<li><a href="#!">two<span class="new badge">1</span></a></li>
<li><a href="#!">three</a></li>
</ul>
<a class="btn dropdown-button" href="#!" data-activates="dropdown2">Dropdown<i class="mdi-navigation-arrow-drop-down right"></i></a>
Images can be styled in different ways using Materialize
To make images resize responsively to page width, you can add the class responsive-img
to your image tag. It will now have a max-width: 100%
and height:auto
.
<img class="responsive-img" src="cool_pic.jpg">
To make images appear circular, simply add class="circle"
to them
<div class="col s12 m8 offset-m2 l6 offset-l3">
<div class="card-panel grey lighten-5 z-depth-1">
<div class="row">
<div class="col s2">
<img src="images/yuna.jpg" alt="" class="circle responsive-img"> <!-- notice the "circle" class -->
</div>
<div class="col s10">
<span class="black-text">
This is a square image. Add the "circle" class to it to make it appear circular.
</span>
</div>
</div>
</div>
</div>
Tables are a nice way to organize a lot of data. We provide a few utility classes to help you style your table as easily as possible. In addition, to improve mobile experience, all tables on mobile-screen widths are centered automatically.
Tables are borderless by default.
Name | Item Name | Item Price |
---|---|---|
Alvin | Eclair | $0.87 |
Alan | Jellybean | $3.76 |
Jonathan | Lollipop | $7.00 |
<table>
<thead>
<tr>
<th data-field="id">Name</th>
<th data-field="name">Item Name</th>
<th data-field="price">Item Price</th>
</tr>
</thead>
<tbody>
<tr>
<td>Alvin</td>
<td>Eclair</td>
<td>$0.87</td>
</tr>
<tr>
<td>Alan</td>
<td>Jellybean</td>
<td>$3.76</td>
</tr>
<tr>
<td>Jonathan</td>
<td>Lollipop</td>
<td>$7.00</td>
</tr>
</tbody>
</table>
Add class="bordered"
to the table tag for a bordered table
Name | Item Name | Item Price |
---|---|---|
Alvin | Eclair | $0.87 |
Alan | Jellybean | $3.76 |
Jonathan | Lollipop | $7.00 |
Add class="striped"
to the table tag for a striped table
Name | Item Name | Item Price |
---|---|---|
Alvin | Eclair | $0.87 |
Alan | Jellybean | $3.76 |
Jonathan | Lollipop | $7.00 |
Add class="hoverable"
to the table tag for a hoverable table
Name | Item Name | Item Price |
---|---|---|
Alvin | Eclair | $0.87 |
Alan | Jellybean | $3.76 |
Jonathan | Lollipop | $7.00 |
Add class="centered"
to the table tag to center align all the text in the table
Name | Item Name | Item Price |
---|---|---|
Alvin | Eclair | $0.87 |
Alan | Jellybean | $3.76 |
Jonathan | Lollipop | $7.00 |