CSS Grid is a web frontend grid system to divide elements into columns and rows, so no extra work of using positioning properties (top, right, left, bottom) is needed.
usage
#html
<html lang="en">
<head>
<meta charset=utf-8>
<title>Demo Responsive CSS Grid Site</title>
<link rel="stylesheet" href="/main.css">
</head>
<!-- Main body of the site where we have the container -->
<!-- this div contain all elements that will be visible on the screen -->
<div class="container">
<nav>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
<main><h2>A Demo Site showcasing CSS Grid</h2>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Itaque pariatur possimus alias quod ratione incidunt dicta assumenda repudiandae optio eveniet, quisquam fuga! Nam eaque fuga similique quia, esse non libero?</p>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Illo libero doloremque, eum quis laudantium hic iste ab sed ipsum veniam, quam dolor rem cupiditate corrupti aliquam repudiandae officia soluta impedit!</p>
</main>
<div class="sidebar img"><h2>Find Me on Social Media</h2>
<p><a href="https://twitter.com/charliecodes">Twitter</a></p>
<p><a href="https://www.linkedin.com/in/charleseteure/">LinkedIn</a></p>
</div>
<div class="about"><h2>About </h2>
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Deserunt voluptatem reprehenderit non. Magni sit alias quia, vel quidem autem quos optio quam at porro aliquid necessitatibus aut et eos nulla.</p>
</div>
<div class="contact"><h2>Contact</h2>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Animi consequuntur magnam ipsum, commodi quam, non dolorem numquam veritatis, qui nam voluptas asperiores neque magni. Placeat, natus reprehenderit. Fugit, voluptatum commodi.</p>
</div>
<footer>Built with <3 by <a href="https://twitter.com/charliecodes">Charles Freeborn</a></footer>
</div>
</html>
# css
body{
background: #F1F0EE;
margin: 0;
}
.container {
/* first, create a grid container */
display: grid;
/* define the amount and size of each column. Here we define 4 columns with equal fractions */
grid-template-columns: repeat(4, 1fr);
/* create horizontal tracks as rows and here we create 4 rows with different sizes */
grid-template-rows: 0.2fr 1.5fr 1.2fr 0.8fr;
/* define where each element will be in the grid. We achieve this with grid-template-areas */
grid-template-areas:
"nav nav nav nav"
"main main main main"
"about about about sidebar"
"contact contact contact sidebar"
"footer footer footer footer";
/* we can set gaps - gutters between the rows and columns*/
gap: 0.5rem;
height: 100vh;
font-weight: 800;
font-size: 12px;
color: #004d40;
text-align: center;
}
/* Styling the Nav starts here */
nav{
background-color: #3770F6;
grid-area: nav;
}
nav ul{
list-style: none;
font-size: 16px;
font-weight: bolder;
float: left;
}
li{
display: inline-block;
}
li a{
color: #ffffff;
}
/* Styling the Nav ends here */
a:hover{
color: #FF7F50;
}
main {
grid-area: main;
}
main h2 {
font-weight: bolder;
}
main p{
text-align: left;
}
.sidebar {
background: #D3D4D7;
grid-area: sidebar;
}
.about {
background: #D7D6D3;
grid-area: about;
}
.contact {
background: #BDBCBB;
grid-area: contact;
}
footer {
background-color: #3770F6;
grid-area: footer;
color: #ffffff;
}
footer a {
color: #ffffff;
}
a {
text-align: center;
display: block;
font-family: inherit;
text-decoration: none;
font-weight: bold;
margin: 1rem;
}
/* For */
@media only screen and (max-width: 550px) {
.container {
grid-template-columns: 1fr;
grid-template-rows: 0.4fr 0.4fr 2.2fr 1.2fr 1.2fr 1.2fr 1fr;
grid-template-areas:
"nav"
"sidebar"
"main"
"about"
"contact"
"footer";
}
}