Сегодня мы хотим показать вам, как создать простой эффект размытия для текстовых элементов. Идея заключается в том, что как только мы наводим курсор на набор текстовых блоков, они будут становиться размытыми и уменьшенными.
Кроме элемента, на который непосредственно будет наведен курсор, он, наоборот, увеличится в масштабе. Это позволит создать своего рода эффект «фокуса», при котором всё внимание концентрируется на выделенном объекте.
Для создания эффектов мы будем использовать свойство CSS3 transitions, а также немного jQuery. Так как CSS3 transitions пока еще не поддерживаются всеми браузерами, демо-пример лучше всего смотреть в Safari или Chrome (чтобы увидеть гладкие переходы).
Итак, давайте начнем!
Структура будет представлять собой секцию с несколькими статьями в ней. Каждый пункт будет иметь заголовок и абзац:
<section class="ib-container" id="ib-container"> <article> <header> <h3><a href="#">Заголовок</a></h3> <span>некий текст</span> </header> <p>Краткое описание</p> </article> <article> <!-- ... --> </article> <!-- ... --> </section>
Основной контейнер будет фиксированной ширины и расположен по центру:
.ib-container{ position: relative; width: 800px; margin: 30px auto; }
Тут мы зададим clear:both для элементов (статьи будут плавающие) с помощью псевдо-элементов :before и :after :
.ib-container:before, .ib-container:after { content:""; display:table; } .ib-container:after { clear:both; }
Теперь, давайте зададим стили для каждой статьи. Мы сделаем их плавающими (float:left) и добавим две тени (box-shadow), из которых белая, будет иметь большое расстояние распространения. Кроме того, мы добавим transition для трех свойств: opacity, transform (мы хотим увеличить её), и box-shadow:
.ib-container article{ width: 140px; height: 220px; background: #fff; cursor: pointer; float: left; border: 10px solid #fff; text-align: left; text-transform: none; margin: 15px; z-index: 1; box-shadow: 0px 0px 0px 10px rgba(255,255,255,1), 1px 1px 3px 10px rgba(0,0,0,0.2); transition: opacity 0.4s linear, transform 0.4s ease-in-out, box-shadow 0.4s ease-in-out; }
Для браузеров Webkit мы также добавим -webkit-backface-visibility: hidden, чтобы избежать коротких миганий. (Хотя Вы можете удалить это, если вы предпочитаете видеть четкий текст).
Теперь зададим стили для текстовых элементов:
.ib-container h3 a{ font-size: 16px; font-weight: 400; color: rgba(0, 0, 0, 1); text-shadow: 0px 0px 0px rgba(0, 0, 0, 1); opacity: 0.8; } .ib-container article header span{ font-size: 10px; font-family: "Big Caslon", "Book Antiqua", "Palatino Linotype", Georgia, serif; padding: 10px 0; display: block; color: rgba(255, 210, 82, 1); text-shadow: 0px 0px 0px rgba(255, 210, 82, 1); text-transform: uppercase; opacity: 0.8; } .ib-container article p{ font-family: Verdana, sans-serif; font-size: 10px; line-height: 13px; color: rgba(51, 51, 51, 1); text-shadow: 0px 0px 0px rgba(51, 51, 51, 1); opacity: 0.8; }
А теперь мы добавим transition для трех свойств opacity, text-shadow и color:
.ib-container h3 a, .ib-container article header span, .ib-container article p{ transition: opacity 0.2s linear, text-shadow 0.5s ease-in-out, color 0.5s ease-in-out; }
Класс blur будет применяться ко всем элементам, расположенным на одном уровне с пунктом, над которым находится курсор мыши. Мы также хотим уменьшить их и добавим большие белые тени, чтобы сделать блоки размытыми. Также уменьшим прозрачность немного:
.ib-container article.blur{ box-shadow: 0px 0px 20px 10px rgba(255,255,255,1); transform: scale(0.9); opacity: 0.7; }
Для того, чтобы текстовые элементы выглядели размыто, мы сделаем цвет прозрачным, установив значение прозначности в RGBA равное 0, и мы увеличим размытие text-shadow:
.ib-container article.blur h3 a{ text-shadow: 0px 0px 10px rgba(0, 0, 0, 0.9); color: rgba(0, 0, 0, 0); opacity: 0.5; } .ib-container article.blur header span{ text-shadow: 0px 0px 10px rgba(255, 210, 82, 0.9); color: rgba(255, 210, 82, 0); opacity: 0.5; } .ib-container article.blur p{ text-shadow: 0px 0px 10px rgba(51, 51, 51, 0.9); color: rgba(51, 51, 51, 0); opacity: 0.5; }
Теперь активный пункт будет слегка увеличен. Мы также установим большое значение z-index, чтобы гарантировать что этот пункт будет всегда поверх остальных, когда мы наводим курсор мыши на него:
.ib-container article.active{ transform: scale(1.05); box-shadow: 0px 0px 0px 10px rgba(255,255,255,1), 1px 11px 15px 10px rgba(0,0,0,0.4); z-index: 100; opacity: 1; }
И последнее, но не менее важное, мы установим непрозрачность текстовых элементов равную 1:
.ib-container article.active h3 a, .ib-container article.active header span, .ib-container article.active p{ opacity; 1; }
Это все, что касается стилей! Давайте теперь посмотрим на JavaScript.
Итак, когда мы наводим курсор мыши на статью, мы установим для всех других статей класс blur, а текущий элемент получит класс active:
var $container = $('#ib-container'), $articles = $container.children('article'), timeout; $articles.on( 'mouseenter', function( event ) { var $article = $(this); clearTimeout( timeout ); timeout = setTimeout( function() { if ($article.hasClass('active')) return false; $articles.not($article).removeClass('active').addClass('blur'); $article.removeClass('blur').addClass('active'); }, 75); }); $container.on('mouseleave', function(event) { clearTimeout( timeout ); $articles.removeClass('active blur'); });
Это все! Надеюсь, вам понравился этот урок, и он будет Вам полезен!
© 2008 - 2024 Webmasters.BY Все права защищены
Новый комментарий