Шаблон сайта с плавными переходами на CSS3
Пожалуй каждый веб-мастер хочет сделать сайт более уникальным и практичным, это позволит сократить время загрузки, разгрузить сайт. Но как сделать сайт с плавными переходами страниц, то есть, чтобы одна страница перекрывала плавным переходом другую, при этом ресурс являлся одностраничным. В данном уроке мы рассмотрим как создать такой шаблон с плавными переходами. Идея состоит в том, что в шаблоне будет использованы навигационные кнопки радио и одноуровневый элемент, который вызовет переход к соответствующей панели контента.
Данный шаблон можно использовать в качестве целевого, уже готового макета, или просто позаимствовать варианты переходов. И так, давайте приступим.
Шаг 1. HTML
Для начала мы начнем с разметки, Структура будет состоять из основного контейнера с классом st-container, который будет содержать радио-кнопки и ссылки, wrapper с классом st-scroll для панелей. Каждая панель будет иметь некоторые элементы контента:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<div class="container"> <div class="st-container"> <input type="radio" name="radio-set" checked="checked" id="st-control-1"/> <a href="#st-panel-1">Отзывчивость</a> <input type="radio" name="radio-set" id="st-control-2"/> <a href="#st-panel-2">Счастье</a> <input type="radio" name="radio-set" id="st-control-3"/> <a href="#st-panel-3">Спокойствие</a> <input type="radio" name="radio-set" id="st-control-4"/> <a href="#st-panel-4">Позитивность</a> <input type="radio" name="radio-set" id="st-control-5"/> <a href="#st-panel-5">Энтузиазм</a> <div class="st-scroll"> <section class="st-panel" id="st-panel-1"> <div class="st-deco" data-icon="H"></div> <h2>Отзывчивость</h2> <p>Banksy adipisicing eiusmod banh mi sed. Squid stumptown est odd future nisi, commodo mlkshk pop-up adipisicing retro.</p> </section> <section class="st-panel st-color" id="st-panel-2"> <div class="st-deco" data-icon="2"></div> <h2>Счастье</h2> <p>Art party readymade beard labore cosby sweater culpa. Art party whatever incididunt, scenester umami polaroid tofu.</p> </section> <section class="st-panel" id="st-panel-3"> <div class="st-deco" data-icon="B"></div> <h2>Спокойствие</h2> <p>Sint aute occaecat id vice. Post-ironic fap pork belly next level godard, id fanny pack williamsburg forage truffaut.</p> </section> <section class="st-panel st-color" id="st-panel-4"> <div class="st-deco" data-icon="x"></div> <h2>Позитивность</h2> <p>Mixtape fap leggings art party, butcher authentic farm-to-table you probably haven't heard of them do labore cosby sweater.</p> </section> <section class="st-panel" id="st-panel-5"> <div class="st-deco" data-icon="Ç"></div> <h2>Энтузиазм</h2> <p>Fixie ad odd future polaroid dreamcatcher, nesciunt carles bicycle rights accusamus mcsweeney's mumblecore nulla irony.</p> </section> </div><!-- // st-scroll --> </div><!-- // st-container --> |
Мы хотим переместить панель в оболочку, изменяя ее верхнее значение и добавления соответствующих панелей в окне просмотра. Это можно сделать, выбрав одноуровневый элемент проверенного переключателя, div с классом st-scroll предназначен для внутренней панели. Поэтому мы должны сохранить переключатели на том же уровне как st-scroll и поверх ссылок.
Шаг 2. CSS
Следующим шагом будут стили, эта важнейшая часть, по этому следует внимательно рассмотреть правила. Для начала зададим контейнерам абсолютную ширину и высоту в 100% при установке панелей, чтобы расположить относительно. Но у них также будет ширина и высота в 100%.
Так как мы сделаем навигацию контента, анимируя wrapper панели, мы установим свойство overflow со значением hidden:
1 2 3 |
body { overflow: hidden; } |
Теперь рассмотрим стили основного контейнера:
1 2 3 4 5 6 7 8 |
.st-container { position: absolute; width: 100%; height: 100%; top: 0; left: 0; font-family: 'Josefin Slab', 'Myriad Pro', Arial, sans-serif; } |
Теперь поместим навигацию внизу страницы, придав ей фиксированную позицию. Следует обратить внимание, что нам необходимо установить ту же ширину и высоту для обоих блоков ввода и ссылок. При этом, идея состоит в том, чтобы наложить переключатель на ссылках так, чтобы они активировались по щелчку. Также важно, чтобы мы установили z-index для переключателей:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
.st-container > input, .st-container > a { position: fixed; bottom: 0px; width: 20%; cursor: pointer; font-size: 16px; height: 34px; line-height: 34px; } .st-container > input { opacity: 0; z-index: 1000; } .st-container > a { z-index: 10; font-weight: 700; background: #e23a6e; color: #fff; text-align: center; text-shadow: 1px 1px 1px rgba(151,24,64,0.2); } |
Значения указаны в процентах, чтобы расположить ссылки и вводы по ширине экрана, у нас могла бы возникнуть проблема, которая заставит появится некоторым разрывам. Чтобы скрыть их, используем псевдо элемент, который будет находиться под ссылками:
1 2 3 4 5 6 7 8 9 |
.st-container:before { content: ''; position: fixed; width: 100%; height: 34px; background: #e23a6e; z-index: 9; bottom: 0; } |
Ссылки и материалы по-прежнему не расположены, так что давайте дадим им соответствующее левое соотношение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#st-control-1, #st-control-1 + a { left: 0; } #st-control-2, #st-control-2 + a { left: 20%; } #st-control-3, #st-control-3 + a { left: 40%; } #st-control-4, #st-control-4 + a { left: 60%; } #st-control-5, #st-control-5 + a { left: 80%; } |
Мы используем селектор смежных одноуровневых элементов «reach«, который является элементом, связанным с ссылкой. Когда мы нажимаем на переключатель, мы зададим одноуровневому элементу другой цвет фона:
1 2 3 4 |
.st-container > input:checked + a, .st-container > input:checked:hover + a{ background: #821134; } |
Теперь добавим маленький треугольник при помощи псевдо-класса :after:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
.st-container > input:checked + a:after, .st-container > input:checked:hover + a:after{ bottom: 100%; border: solid transparent; content: ''; height: 0; width: 0; position: absolute; pointer-events: none; border-bottom-color: #821134; border-width: 20px; left: 50%; margin-left: -20px; } |
Затем настроим состояние элемента при наведении:
1 2 3 4 5 6 7 |
.st-container > input:hover + a{ background: #AD244F; } .st-container > input:hover + a:after { border-bottom-color: #AD244F; } |
Wrapper для панелей будет иметь относительное расположение, а так же сделаем ширину и высоту 100%. Переход будет для того, чтобы анимировать значение свойства преобразования к соответствующей позиции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
.st-scroll, .st-panel { position: relative; width: 100%; height: 100%; } .st-scroll { top: 0; left: 0; transition: all 0.6s ease-in-out; -webkit-transform: translate3d(0, 0, 0); -webkit-backface-visibility: hidden; } .st-panel{ background: #fff; overflow: hidden; } |
Теперь определим позиции для st-scroll wrapper для каждого проверенного переключателя. Так как мы знаем, что у каждой панели высота 100%, то соответственно знаем точные позиции. Мы будем использовать свойства преобразования, чтобы перевести wrapper панели по оси Y (сверху и снизу):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#st-control-1:checked ~ .st-scroll { transform: translateY(0%); } #st-control-2:checked ~ .st-scroll { transform: translateY(-100%); } #st-control-3:checked ~ .st-scroll { transform: translateY(-200%); } #st-control-4:checked ~ .st-scroll { transform: translateY(-300%); } #st-control-5:checked ~ .st-scroll { transform: translateY(-400%); } |
ля верхнего треугольника со значком мы просто повернем и переведем div с классом st-deco. Мы расположим его в верху экрана, установим вершину в 0 и слева в 50%.
1 2 3 4 5 6 7 8 9 10 |
.st-deco{ width: 200px; height: 200px; position: absolute; top: 0px; left: 50%; margin-left: -100px; background: #fa96b5; transform: translateY(-50%) rotate(45deg); } |
Для значка мы будем использовать Raphaël, установим в значок через @font-face и data-attribute/pseudo-class метод. Контент псевдо элемента :after будет иметь значение значка данных, которое мы установили в HTML для этого элемента.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[data-icon]:after { content: attr(data-icon); font-family: 'RaphaelIcons'; color: #fff; text-shadow: 1px 1px 1px rgba(151,24,64,0.2); position: absolute; width: 200px; height: 200px; line-height: 200px; text-align: center; font-size: 90px; top: 50%; left: 50%; margin: -100px 0 0 -100px; transform: rotate(-45deg) translateY(25%); } |
Заголовок будет помещен в центр экрана с отрицательным верхним полем, чтобы его вытянуть:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
.st-panel h2 { color: #e23a6e; text-shadow: 1px 1px 1px rgba(151,24,64,0.2); position: absolute; font-size: 54px; font-weight: 900; width: 80%; left: 10%; text-align: center; line-height: 50px; margin: -70px 0 0 0; padding: 0; top: 50%; -webkit-backface-visibility: hidden; } |
Чтобы выбрать корректный заголовок, мы будем использовать общий одноуровневый элемент combinator:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#st-control-1:checked ~ .st-scroll #st-panel-1 h2, #st-control-2:checked ~ .st-scroll #st-panel-2 h2, #st-control-3:checked ~ .st-scroll #st-panel-3 h2, #st-control-4:checked ~ .st-scroll #st-panel-4 h2, #st-control-5:checked ~ .st-scroll #st-panel-5 h2{ animation: moveDown 0.6s ease-in-out 0.2s backwards; } @keyframes moveDown{ 0% { transform: translateY(-40px); opacity: 0; } 100% { transform: translateY(0px); opacity: 1; } } |
Теперь рассмотрим стили абзаца, которые будут иметь следующий стиль:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
.st-panel p { position: absolute; text-align: center; font-size: 16px; line-height: 22px; color: #8b8b8b; z-index: 2; padding: 0; width: 50%; left: 25%; top: 50%; margin: 10px 0 0 0; -webkit-backface-visibility: hidden; } |
В то время как заголовок панели переместится вниз, абзац переместится вверх:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#st-control-1:checked ~ .st-scroll #st-panel-1 p, #st-control-2:checked ~ .st-scroll #st-panel-2 p, #st-control-3:checked ~ .st-scroll #st-panel-3 p, #st-control-4:checked ~ .st-scroll #st-panel-4 p, #st-control-5:checked ~ .st-scroll #st-panel-5 p{ animation: moveUp 0.6s ease-in-out 0.2s backwards; } @keyframes moveUp{ 0% { transform: translateY(40px); opacity: 0; } 100% { transform: translateY(0px); opacity: 1; } } |
Теперь добавим класс color и «инвертируем» цвета для панелей и его элементов контента:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
.st-color, .st-deco{ background: #fa96b5; } .st-color [data-icon]:after { color: #fa96b5; } .st-color .st-deco { background: #fff; } .st-color h2 { color: #fff; text-shadow: 1px 1px 1px rgba(0,0,0,0.1); } .st-color p { color: rgba(255,255,255,0.8); } |
Затем добавим некоторые запросы носителей, чтобы управлять позицией и размером шрифта элементов для меньших экранов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
@media screen and (max-width: 520px) { .st-panel h2 { font-size: 42px; } .st-panel p { width: 90%; left: 5%; margin-top: 0; } .st-container > a { font-size: 13px; } } @media screen and (max-width: 360px) { .st-container > a { font-size: 10px; } .st-deco{ width: 120px; height: 120px; margin-left: -60px; } [data-icon]:after { font-size: 60px; transform: rotate(-45deg) translateY(15%); } } |
Для более старых браузеров, которые не поддерживают некоторые селекторы, мы сделаем отступ к классическому целевому переходу. Мы можем сделать это, изменяя часть стиля (simple.css).
1 2 3 4 5 6 |
body { overflow: auto; } .st-container > input{ display: none; } |
Вот и все. Готово!
Материал взят из зарубежного источника. И представлен исключительно в ознакомительных целях.
Читайте также:
Опубликовал Cooper 28.08.2012 в 13:37, в категории Шаблоны. Вы можете следить за комментариями через RSS 2.0. Вы можете перейти в конец записи и оставить комментарий. Пинги запрещены. |