Статьи

CSS3 3D Top Shift Menu

В этом уроке я покажу вам, как создать анимированное трехмерное навигационное меню (с изображениями) только с CSS3 (без JavaScript). Мы будем использовать мощные эффекты CSS3, такие как перспектива, изменение размеров, трансформации, градиенты и переходы. Вы можете использовать это меню для профессионального оформления вашего сайта. Обратите внимание, что для того, чтобы увидеть это меню, вам нужно навести курсор мыши на синий элемент в верхней части страницы.


Это наш окончательный результат:

CSS3 3D меню верхнего сдвига

Вот образцы и загружаемый пакет:

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.