Переходы между разделами страницы с использованием CSS3

В последнее время увеличивается количество одностраничных сайтов. которые используют JavaScript для формирования различных эффектов для переходов между разделами. В данном уроке мы рассмотрим как построить такой шаблон, но будем использовать средства CSS для формирования перехода между разделами.

Разметка HTML
Код HTML содержит пять основных разделов: заголовок и четыре секции с содержанием. Каждая секция содержания будет иметь ID и класс panel. Также мы добавим еще один раздел с классом content внутрь секции. Первая секция #home будет иметь класс content без дополнительного раздела:

<!-- Главная -->
<div id="home" class="content">
    <h2>Главная</h2>
    <p>Содержание</p>
    <!-- ... -->
</div>
<!-- /Главная -->
  
<!-- Портфолио-->
<div id="portfolio" class="panel">
    <div class="content">
        <h2>Портфолио</h2>
        <p>Содержание</p>
        <!-- ... -->
    </div>
</div>
<!-- /Портфолио -->
  
<!-- Описание -->
<div id="about" class="panel">
    <div class="content">
        <h2>Описание</h2>
        <p>Содержание</p>
        <!-- ... -->
    </div>
</div>
<!-- /Описание -->
  
<!-- Контакт -->
<div id="contact" class="panel">
    <div class="content">
        <h2>Контакт</h2>
        <p>Содержание</p>
        <!-- ... -->
    </div>
</div>
<!-- /Контакт -->

В заголовке будет размещаться описание и навигация:
<!-- Загловок с навигацией -->
<div id="header">
    <h1>Переходы между страницами на CSS3</h1>
    <ul id="navigation">
        <li><a id="link-home" href="#home">Главная</a></li>
        <li><a id="link-portfolio" href="#portfolio">Портфолио</a></li>
        <li><a id="link-about" href="#about">Описание</a></li>
        <li><a id="link-contact" href="#contact">Контакт</a></li>
    </ul>
</div>

Причина, по которой такая "неупорядоченная" структура размещается в конце, заключается в том, что навигация становится доступной с помощью общего селектора соседей (~) и можно устанавливать свой цвет для каждого пункта.

Основная идея заключается в использовании псевдо-класса :target для того, чтобы организовать переход к текущей секции. В описанном примере используется выскальзывание панелей сверху. В демонстрации построено еще два разных эффекта перехода.

CSS
Сначала зададим стили для заголовка и навигации. Нужно сохранять их положение в одной точке, хотя все остальное будет двигаться.
#header{
    position: absolute;
    z-index: 2000;
    width: 235px;
    top: 50px;
}
#header h1{
    font-size: 30px;
    font-weight: 400;
    text-transform: uppercase;
    color: rgba(255,255,255,0.9);
    text-shadow: 0px 1px 1px rgba(0,0,0,0.3);
    padding: 20px;
    background: #000;
}
#navigation {
    margin-top: 20px;
    width: 235px;
    display:block;
    list-style:none;
    z-index:3;
}
#navigation a{
    color: #444;
    display: block;
    background: #fff;
    background: rgba(255,255,255,0.9);
    line-height: 50px;
    padding: 0px 20px;
    text-transform: uppercase;
    margin-bottom: 6px;
    box-shadow: 1px 1px 2px rgba(0,0,0,0.2);
    font-size: 14px;
}
#navigation a:hover {
    background: #ddd;
}

Все секции, кроме #home, имеют класс panel. Здесь будет использоваться переход, когда элемент получает класс “targeted”. Трюк заключается в использовании отрицательного значения для поля в классе “normal” и отказ от поля в псевдо-классе :target. Добавлением перехода мы заставляем панель выскальзывать сверху, когда ее выбирают:
.panel{
    min-width: 100%;
    height: 98%;
    overflow-y: auto;
    overflow-x: hidden;
    margin-top: -150%;
    position: absolute;
    background: #000;
    box-shadow: 0px 4px 7px rgba(0,0,0,0.6);
    z-index: 2;
    -webkit-transition: all .8s ease-in-out;
    -moz-transition: all .8s ease-in-out;
    -o-transition: all .8s ease-in-out;
    transition: all .8s ease-in-out;
}
.panel:target{
    margin-top: 0%;
    background-color: #ffcb00;
}

Теперь определим стиль класса content:
.content{
    right: 40px;
    left: 280px;
    top: 0px;
    position: absolute;
    padding-bottom: 30px;
}
.content h2{
    font-size: 110px;
    padding: 10px 0px 20px 0px;
    margin-top: 52px;
    color: #fff;
    color: rgba(255,255,255,0.9);
    text-shadow: 0px 1px 1px rgba(0,0,0,0.3);
}
.content p{
    font-size: 18px;
    padding: 10px;
    line-height: 24px;
    color: #fff;
    display: inline-block;
    background: black;
    padding: 10px;
    margin: 3px 0px;
}

Для того, чтобы изменить цвет текущего элемента навигации будем использовать псевдо-класс :target с общим селектором соседей, чтобы получить соответствующий пункт:
#home:target ~ #header #navigation #link-home,
#portfolio:target ~ #header #navigation #link-portfolio,
#about:target ~ #header #navigation #link-about,
#contact:target ~ #header #navigation #link-contact{
    background: #000;
    color: #fff;
}

Готово!
Теги:
Переходы, CSS3
Добавлено: 27 Апреля 2018 06:20:23 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...