В этом уроке я покажу вам, как создать анимированное трехмерное навигационное меню (с изображениями) только с CSS3 (без JavaScript). Мы будем использовать мощные эффекты CSS3, такие как перспектива, изменение размеров, трансформации, градиенты и переходы. Вы можете использовать это меню для профессионального оформления вашего сайта. Обратите внимание, что для того, чтобы увидеть это меню, вам нужно навести курсор мыши на синий элемент в верхней части страницы.
Это наш окончательный результат:
Вот образцы и загружаемый пакет:
Live Demo
скачать в упаковке
Шаг 1. HTML
Первым шагом является определение разметки HTML.
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>CSS3 3D top shift menu | Script Tutorials</title>
<link href="css/layout.css" rel="stylesheet" type="text/css" />
<link href="css/menu.css" rel="stylesheet" type="text/css" />
</head>
<body class="menu_body">
<!-- The main menu element -->
<div class="menu">
<ul>
<li><a href="#"><img src="images/1.png" /></a></li>
<li><a href="#"><img src="images/2.png" /></a></li>
<li><a href="#"><img src="images/3.png" /></a></li>
<li><a href="#"><img src="images/4.png" /></a></li>
<li><a href="#"><img src="images/5.png" /></a></li>
<li><a href="#"><img src="images/6.png" /></a></li>
<li><a href="#"><img src="images/7.png" /></a></li>
</ul>
</div>
<div class="page_content">
<div class="shade"></div>
<div class="box">
<div class="header">Box header</div>
<div class="body">
Any dummy text
</div>
<div class="footer">Box footer</div>
</div>
<div class="box">
<div class="header">Box header</div>
<div class="body">
Any dummy text
</div>
<div class="footer">Box footer</div>
</div>
</div>
</body>
</html>
В теле документа у нас есть элемент menu и page_content. Основная идея — разделить страницу на два семантических раздела. Главное меню состоит из неупорядоченных элементов списка UL-LI. Каждый элемент имеет свое изображение.
Страница содержит элемент shade (который по умолчанию невидим) и остальной код (я подготовил два поля дизайна здесь). Каждая коробка содержит — заголовок, тело и нижний колонтитул.
Шаг 2. CSS
Хочу заметить, что текущее меню должно хорошо работать в большинстве современных веб-браузеров (кроме IE). Лучшие результаты в Firefox и Chrome.
Теперь давайте начнем стилизацию меню навигации! Сначала мы напишем правила для элемента BODY документа:
CSS / menu.css
.menu_body {
/* CSS3 perspective */
-webkit-perspective: 1500px;
-moz-perspective: 1500px;
-ms-perspective: 1500px;
-o-perspective: 1500px;
perspective: 1500px;
}
Это добавляет перспективу на нашу страницу. Теперь нам нужно написать базовые правила для нашего меню и даже для раздела контента:
.menu, .page_content {
/* CSS3 box-sizing, transition and transform */
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
box-sizing: border-box;
-webkit-transition: -webkit-transform 0.5s ease;
-moz-transition: -moz-transform 0.5s ease;
-ms-transition: -ms-transform 0.5s ease;
-o-transition: -o-transform 0.5s ease;
transition: transform 0.5s ease;
}
/* the main menu element (which appears from the top) */
.menu {
background-color: #002edb;
display: block;
position: fixed;
width: 100%;
height: 148px;
z-index: 1;
/* CSS3 transform */
-webkit-transform: rotateX(-45deg) translateY(-95%);
-moz-transform: rotateX(-45deg) translateY(-95%);
-ms-transform: rotateX(-45deg) translateY(-95%);
-o-transform: rotateX(-45deg) translateY(-95%);
transform: rotateX(-45deg) translateY(-95%);
}
/* change background color and rotate the main menu element on hover */
.menu:hover {
background-color: #4169ff;
/* CSS3 transform */
-webkit-transform: rotateX(0deg);
-moz-transform: rotateX(0deg);
-ms-transform: rotateX(0deg);
-o-transform: rotateX(0deg);
transform: rotateX(0deg);
}
/* rest page content */
.page_content {
padding: 20px 0 0;
}
Обратите внимание, что мы используем свойства rotateX и translateY, чтобы показать и скрыть главное меню. Теперь мы должны подготовить правила для нашего неупорядоченного списка с изображениями:
/* the main menu - UL-LI properties */
.menu ul {
display: block;
margin: 0 auto;
overflow: hidden;
position: relative;
width: 1036px;
}
.menu ul li {
float: left;
list-style: none outside none;
margin: 10px;
/* CSS3 transition */
-webkit-transition: all 0.5s ease;
-moz-transition: all 0.5s ease;
-ms-transition: all 0.5s ease;
-o-transition: all 0.5s ease;
transition: all 0.5s ease;
}
.menu ul li:hover {
background-color: #7e00d6;
/* CSS3 border-radius */
-webkit-border-radius: 64px;
-moz-border-radius: 64px;
-ms-border-radius: 64px;
-o-border-radius: 64px;
border-radius: 64px;
}
We use easy transition for our images – we change color and set the radius for them. When we keep our mouse over the menu – we should make the page a little bit darker (we are going to use the shade element – gradient):
/* page's shade element (invisible by default) */
.page_content .shade {
display: block;
height: 100%;
left: 0;
opacity: 0;
position: absolute;
top: 0;
visibility: hidden;
width: 100%;
z-index: 1000;
/* CSS3 linear-gradient */
background: -moz-linear-gradient(top, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.65) 100%);
background: -webkit-gradient(linear, top top, bottom top, color-stop(0%,rgba(0,0,0,0.15)), color-stop(100%,rgba(0,0,0,0.65)));
background: -webkit-linear-gradient(top, rgba(0,0,0,0.15) 0%,rgba(0,0,0,0.65) 100%);
background: -ms-linear-gradient(top, rgba(0,0,0,0.15) 0%,rgba(0,0,0,0.65) 100%);
background: -o-linear-gradient(top, rgba(0,0,0,0.15) 0%,rgba(0,0,0,0.65) 100%);
background: linear-gradient(to bottom, rgba(0,0,0,0.15) 0%,rgba(0,0,0,0.65) 100%);
/* CSS3 transition */
-webkit-transition: all 0.5s ease;
-moz-transition: all 0.5s ease;
-ms-transition: all 0.5s ease;
-o-transition: all 0.5s ease;
transition: all 0.5s ease;
}
And finally, we should enable our Shade and also we should rotate our page_content element when we hover the menu:
/* when we hover on menu - turn page_content down */
.menu:hover ~ .page_content {
/* CSS3 transform */
-webkit-transform: rotateX(-45deg) translateY(80px);
-moz-transform: rotateX(-45deg) translateY(80px);
-ms-transform: rotateX(-45deg) translateY(80px);
-o-transform: rotateX(-45deg) translateY(80px);
transform: rotateX(-45deg) translateY(80px);
}
/* when we hover on menu - display the shade */
.menu:hover ~ .page_content .shade {
opacity: 1;
visibility: visible;
}
In the long run our animated 3D CSS3 menu is complete!
Live Demo
download in package
Conclusion
Have you liked this tutorial? If so – make sure to share it with your friends and share your thoughts in the comment section below.
