Переходы между разделами страницы с использованием CSS3
В последнее время увеличивается количество одностраничных сайтов. которые используют JavaScript для формирования различных эффектов для переходов между разделами. В данном уроке мы рассмотрим как построить такой шаблон, но будем использовать средства CSS для формирования перехода между разделами.
Разметка HTML
Код HTML содержит пять основных разделов: заголовок и четыре секции с содержанием. Каждая секция содержания будет иметь ID и класс panel. Также мы добавим еще один раздел с классом content внутрь секции. Первая секция #home будет иметь класс content без дополнительного раздела:
Code
<!-- Главная -->
<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="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>
<!-- /Контакт -->
В заголовке будет размещаться описание и навигация:
Code
<!-- Загловок с навигацией -->
<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>
<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
Сначала зададим стили для заголовка и навигации. Нужно сохранять их положение в одной точке, хотя все остальное будет двигаться.
Code
#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;
}
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;
}
Для того, чтобы изменить цвет текущего элемента навигации будем использовать псевдо-класс :target с общим селектором соседей, чтобы получить соответствующий пункт:
Code
#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;
}
#portfolio:target ~ #header #navigation #link-portfolio,
#about:target ~ #header #navigation #link-about,
#contact:target ~ #header #navigation #link-contact{
background: #000;
color: #fff;
}
Готово!
-
FalleN -
2829 -
1 -
212
Но только нужно ставить наверное на те модули которые обновляться должны не раньше через пару тройку минут
С Уважением, Андрей...