Сегодня мы хотим показать вам, как создать эффект lightbox, используя только CSS. Идея заключается в создании нескольких миниатюр, при клике по которым показывается соответствующее большое изображение. Используя CSS переходы и анимацию, мы можем сделать появление большого изображения различными симпатичными способами.
С помощью псевдо-класса :target, мы сможем показывать изображения и переходить по ним.
Обратите внимание, что эти примеры будут работать только в браузерах, которые поддерживают псевдо класс :target.
Итак, давайте сделаем это!
HTML-разметка
Сначала создадим набор миниатюр, каждая из которых имеет название, которое будет отображаться при наведении курсора. При нажатии на миниатюру, мы будем показывать большую версию изображения в блоке с классом lb-overlay, который изначально будет спрятан. Итак, мы будем использовать неупорядоченный список, где каждый элемент списка будет содержать миниатюру и блок с соответствующим большим изображением:
<ulclass="lb-album"> <li> <ahref="#image-1"> <imgsrc="images/thumbs/1.jpg"alt="image01"> <span>Pointe</span> </a> <divclass="lb-overlay"id="image-1"> <imgsrc="images/full/1.jpg"alt="image01"/> <div> <h3>pointe <span>/point/</h3> <p>Dance performed on the tips of the toes</p> <ahref="#image-10"class="lb-prev">Предыдущий</a> <ahref="#image-2"class="lb-next">Следующий</a> </div> <ahref="#page"class="lb-close">x Закрыть</a> </div> </li> <li> <!-- ... --> </li> </ul>
Якорь в миниатюрах, например, href="#image-1" будет указывать на элемент с id image-1, который представляет собой div классом lb-overlay. Для того, чтобы переходить по изображениям, мы добавим две ссылки, которые указывают на предыдущее и следующее (большое) изображение.
Для того, чтобы "закрыть" lightbox, мы будем просто кликать на ссылку с классом lb-close, которая указывает на элемент с ID page, который является, в нашем примере, тегом body.
Обратите внимание, что мы используем навигацию только в последнем демо-примере.
Теперь давайте обратимся к стилям.
CSS
Я буду опускать префиксы различных браузеров для некоторых новых свойств, чтобы не перегружать статью. Но их можно, конечно, найти в исходных файлах.
Ниже представлены стили нашего основного слоя, неупорядоченного списка и миниатюр:
.lb-album{ width:900px; margin:0auto; font-family:'BebasNeueRegular','Arial Narrow', Arial,sans-serif; } .lb-album li{ float:left; margin:5px; position:relative; } .lb-album li > a, .lb-album li > a img{ display:block; } .lb-album li > a{ width:150px; height:150px; position:relative; padding:10px; background:#f1d2c2;
box-shadow:1px1px2px#fff,1px1px2px rgba(158,111,86,0.3)inset;
border-radius:4px; }
Название каждой миниатюры будут невидимым и мы будем добавлять переход для непрозрачности, которая станет равной 1, когда мы наведем курсор мыши на якорь миниатюры. Мы будем использовать гладкий радиальный градиент в качестве фона:
.lb-album li > a span{ position:absolute; width:150px; height:150px; top:10px; left:10px; text-align:center; line-height:150px; color: rgba(27,54,81,0.8); text-shadow:0px1px1px rgba(255,255,255,0.6); font-size:24px;
opacity:0; background:
radial-gradient( center,
ellipse cover,
rgba(255,255,255,0.56)0%,
rgba(241,210,194,1)100% );
transition: opacity 0.3s linear; } .lb-album li > a:hover span{
opacity:1; }
Слоя наложения будет иметь такой же радиальный градиент, также мы установим свойство position равное fixed, с нулевой высотой и шириной:
Изображение будет иметь максимальную высоту 100%. Мы также добавим переход для создания полупрозрачности. Как только мы "откроем" большое изображение, прозрачность будет анимирована. Позже мы увидим, как мы можем использовать анимацию для изображения.
Когда мы нажимаем на якорь миниатюры, он будет указывать на соответствующее большое изображение, которое находится в блоке с классом lb-overlay. Таким образом, с целью нахождения этого элемента мы можем использовать псевдо-класс :target. Мы добавим padding для lb-overlay и "растянем" его, установив ширину и высоту auto (это на самом деле не обязательно) и установим right и bottom равные 0px. Помните, что мы уже установили top и left раньше.
Как вы увидите, каждый браузер работает совершенно по-разному, когда речь идет о переходах/анимации. Регулируя длительность, временные функции и задержки, вы сможете сделать эффекты более гладкими, т.е. вы можете изменить время анимации для Firefox только изменив -moz-свойства.