Скользящие панели изображений на CSS3

В данном уроке мы разберемся задачей создания прелестных скользящих панелей с изображениями. Будет использоваться только CSS. Идей заключается в  применении фоновых изображений для панелей и анимации при нажатии на метку. В качестве меток будут использоваться радио кнопки.

Примечание: результат нашего урока будет работать в браузерах, которые поддерживают трансформации и анимации CSS.

 

Разметка HTML

Код HTML состоит из трех основных частей: радио кнопки и метки, контейнер с панелями и "срезами" для каждого изображения, и заголовки. Контейнер с классом cr-bgimg имеет раздел для каждой панели, в котором размещаются элементы span для каждого изображения с правильным положением фона:

			<section class="cr-container">

 				<!-- Радио кнопки и метки -->
				<input id="select-img-1" name="radio-set-1" type="radio" class="cr-selector-img-1" checked/>
				<label for="select-img-1" class="cr-label-img-1">1</label>
				
				<input id="select-img-2" name="radio-set-1" type="radio" class="cr-selector-img-2" />
				<label for="select-img-2" class="cr-label-img-2">2</label>
				
				<input id="select-img-3" name="radio-set-1" type="radio" class="cr-selector-img-3" />
				<label for="select-img-3" class="cr-label-img-3">3</label>
				
				<input id="select-img-4" name="radio-set-1" type="radio" class="cr-selector-img-4" />
				<label for="select-img-4" class="cr-label-img-4">4</label>
				
				<div class="clr"></div>	

				<!-- Панели -->
				<div class="cr-bgimg">
					<div>
						<span>Срез 1 - Изображение 1</span>
						<span>Срез 1 - Изображение 2</span>
						<span>Срез 1 - Изображение 3</span>
						<span>Срез 1 - Изображение 4</span>
					</div>
					<div>
						<span>Срез 2 - Изображение 1</span>
						<span>Срез 2 - Изображение 2</span>
						<span>Срез 2 - Изображение 3</span>
						<span>Срез 2 - Изображение 4</span>
					</div>
					<div>
						<span>Срез 3 - Изображение 1</span>
						<span>Срез 3 - Изображение 2</span>
						<span>Срез 3 - Изображение 3</span>
						<span>Срез 3 - Изображение 4</span>
					</div>
					<div>
						<span>Срез 4 - Изображение 1</span>
						<span>Срез 4 - Изображение 2</span>
						<span>Срез 4 - Изображение 3</span>
						<span>Срез 4 - Изображение 4</span>
					</div>
				</div>

				<!-- Заголовки -->
				<div class="cr-titles">
					<h3><span>Прозорливость</span><span>То, о чем вы мечтали</span></h3>
					<h3><span>Приключение</span><span>Там, где все начинается</span></h3>
					<h3><span>Естество</span><span>Незабываемые впечатления</span></h3>
					<h3><span>Безмятежность</span><span>Когда тишина начинает звучать</span></h3>
				</div>
			</section>
        </div>

Элементы h3 для заголовков имеют два элемента span: один для основного заголовка, другой - подзаголовка.

 

CSS

Примечание: в коде CSS опущены префиксы производителей браузеров для большей наглядности.

Задача состоит в том, чтобы скрыть радио кнопки, покрыв из метками. В веб браузере нажатие на метке изменяет состояние соответствующей кнопки. Определив ID для кнопки мы можем использовать атрибут for = idref метки для того, чтобы установить соответствие кнопке.

Затем нужно разместить все фоновые изображения в правильном порядке и выводить соответствующие "срезы" картинки при нажатии на метку.

Сначала определим стили для секции и задаим для нее белую рамку с легкой тенью:

.cr-container{
    width: 600px;
    height: 400px;
    position: relative;
    margin: 0 auto;
    border: 20px solid #fff;
    box-shadow: 1px 1px 3px rgba(0,0,0,0.1);
}

Так как мы будем использовать общий соседний селектор для того, чтобы получить нужный "срез" изображения и заголовок, нужно разместить метки перед контейнерами. Выдвинем их в верхний слой (z-index) и опустим вниз с помощью значения поля равного 350px:

.cr-container label{
    font-style: italic;
    width: 150px;
    height: 30px;
    cursor: pointer;
    color: #fff;
    line-height: 32px;
    font-size: 24px;
    float:left;
    position: relative;
    margin-top: 350px;
    z-index: 1000;
}

Улучим внешний вид добавив небольшой круг. Используем псевдо-элемент располженный по центру позади текста метки:

.cr-container label:before{
    content:'';
    width: 34px;
    height: 34px;
    background: rgba(130,195,217,0.9);
    position: absolute;
    left: 50%;
    margin-left: -17px;
    border-radius: 50%;
    box-shadow: 0px 0px 0px 4px rgba(255,255,255,0.3);
    z-index:-1;
}

Для того, чтобы создать разделитель между панелями, используем небольшой трюк. Создадим еще один псевдо-элемент для метки и растянем его поверх панели. С помощью градиента сделаем линию "пропадающей" к верху:

.cr-container label:after{
    width: 1px;
    height: 400px;
    content: '';
    background: linear-gradient(top, rgba(255,255,255,0) 0%,rgba(255,255,255,1) 100%);
    position: absolute;
    bottom: -20px;
    right: 0px;
}

Последняя панель не должна иметь разделителя, поэтому установим ширину равной 0:

.cr-container label.cr-label-img-4:after{
    width: 0px;
}

Теперь скроем кнопки:

.cr-container input{
    display: none;
}

При нажатии кнопки мыши на метке будет отмечаться соответствующая кнопка. Теперь мы можем указать соответствующие метки с помощь общего соседнего селектора. Также будем изменять цвет "выбранной" метки:

.cr-container input.cr-selector-img-1:checked ~ label.cr-label-img-1,
.cr-container input.cr-selector-img-2:checked ~ label.cr-label-img-2,
.cr-container input.cr-selector-img-3:checked ~ label.cr-label-img-3,
.cr-container input.cr-selector-img-4:checked ~ label.cr-label-img-4{
    color: #68abc2;
}

Также будет изменяться цвет фона и тени круглого псевдо-элемента:

.cr-container input.cr-selector-img-1:checked ~ label.cr-label-img-1:before,
.cr-container input.cr-selector-img-2:checked ~ label.cr-label-img-2:before,
.cr-container input.cr-selector-img-3:checked ~ label.cr-label-img-3:before,
.cr-container input.cr-selector-img-4:checked ~ label.cr-label-img-4:before{
    background: #fff;
    box-shadow: 0px 0px 0px 4px rgba(104,171,194,0.6);
}

Контейнер для панелей изображений будет занимать всю ширину и позиционируется абсолютно. Данный контейнер используется позже, чтобы установить фоновое изображение соответствующее выбранной картинке:

.cr-bgimg{
    width: 600px;
    height: 400px;
    position: absolute;
    left: 0px;
    top: 0px;
    z-index: 1;
    background-repeat: no-repeat;
    background-position: 0 0;
}

Так как мы имеем четыре панели, то ширина каждой будет равна 150 px (600 разделить на 4). Панели будут выравниваться влево, и мы будем скрывать их при выходе за границы элемента:

.cr-bgimg div{
    width: 150px;
    height: 100%;
    position: relative;
    float: left;
    overflow: hidden;
    background-repeat: no-repeat;
}

Каждый элемент span  "среза" будет позиционироваться абсолютно. В начале мы будем скрывать их размещая за пределами элемента:

.cr-bgimg div span{
    position: absolute;
    width: 100%;
    height: 100%;
    top: 0px;
    left: -150px;
    z-index: 2;
    text-indent: -9000px;
}

Теперь разберемся с фоном контейнера изображения и соответствующими "срезами":

.cr-container input.cr-selector-img-1:checked ~ .cr-bgimg,
.cr-bgimg div span:nth-child(1){
    background-image: url(../images/1.jpg);
}
.cr-container input.cr-selector-img-2:checked ~ .cr-bgimg,
.cr-bgimg div span:nth-child(2){
    background-image: url(../images/2.jpg);
}
.cr-container input.cr-selector-img-3:checked ~ .cr-bgimg,
.cr-bgimg div span:nth-child(3){
    background-image: url(../images/3.jpg);
}
.cr-container input.cr-selector-img-4:checked ~ .cr-bgimg,
.cr-bgimg div span:nth-child(4){
    background-image: url(../images/4.jpg);
}

Также нужно задать положение фона в зависимости от панели:

.cr-bgimg div:nth-child(1) span{
    background-position: 0px 0px;
}
.cr-bgimg div:nth-child(2) span{
    background-position: -150px 0px;
}
.cr-bgimg div:nth-child(3) span{
    background-position: -300px 0px;
}
.cr-bgimg div:nth-child(4) span{
    background-position: -450px 0px;
}

Когда мы нажимаем на метку, все "срезы" просто смещаются вправо:

.cr-container input:checked ~ .cr-bgimg div span{
    animation: slideOut 0.6s ease-in-out;
}
@keyframes slideOut{
    0%{
        left: 0px;
    }
    100%{
        left: 150px;
    }
}

"Срезы" соответствующего фона смещаются с -150px до 0px:

.cr-container input.cr-selector-img-1:checked ~ .cr-bgimg div span:nth-child(1),
.cr-container input.cr-selector-img-2:checked ~ .cr-bgimg div span:nth-child(2),
.cr-container input.cr-selector-img-3:checked ~ .cr-bgimg div span:nth-child(3),
.cr-container input.cr-selector-img-4:checked ~ .cr-bgimg div span:nth-child(4)
{
    transition: left 0.5s ease-in-out;
    animation: none;
    left: 0px;
    z-index: 10;
}

Теперь определим стили для элементов h3 заголовка и его span . Заголовок h3 будет иметь трансформацию прозрачности, которая изменяется при выборе соответствующей метки:

.cr-titles h3{
    position: absolute;
    width: 100%;
    text-align: center;
    top: 50%;
    z-index: 10000;
    opacity: 0;
    color: #fff;
    text-shadow: 1px 1px 1px rgba(0,0,0,0.1);
    transition: opacity 0.8s ease-in-out;
}
.cr-titles h3 span:nth-child(1){
    font-family: 'BebasNeueRegular', 'Arial Narrow', Arial, sans-serif;
    font-size: 70px;
    display: block;
    letter-spacing: 7px;
}
.cr-titles h3 span:nth-child(2){
    letter-spacing: 0px;
    display: block;
    background: rgba(104,171,194,0.9);
    font-size: 14px;
    padding: 10px;
    font-style: italic;
    font-family: Cambria, Palatino, "Palatino Linotype", "Palatino LT STD", Georgia, serif;
}
.cr-container input.cr-selector-img-1:checked ~ .cr-titles h3:nth-child(1),
.cr-container input.cr-selector-img-2:checked ~ .cr-titles h3:nth-child(2),
.cr-container input.cr-selector-img-3:checked ~ .cr-titles h3:nth-child(3),
.cr-container input.cr-selector-img-4:checked ~ .cr-titles h3:nth-child(4){
    opacity: 1;
}

Если не нужно использовать трюк с метками на мобильных устройствах, то можно использовать медиа запрос:

@media screen and (max-width: 768px) {
    .cr-container input{
        display: inline;
        width: 24%;
        margin-top: 350px;
        z-index: 1000;
        position: relative;
    }
    .cr-container label{
        display: none;
    }
}

 

Готово!

В качестве анимации можно использовать различные варианты. Смотрите демонстрацию.

Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/ZdbHgvN_WWs/lessons.php

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

Скользящие панели изображений на CSS3 | | 2012-06-19 12:00:20 | | Статьи Web-мастеру | | В данном уроке мы разберемся задачей создания прелестных скользящих панелей с изображениями. Будет использоваться только CSS. Идей заключается в  применении фоновых изображений для панелей и анимации | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: