Разные блоки с разных направлений

В данном уроке мы сделаем эффект вывода различных информационных блоков при наведении курсора мыши на изображение с разных сторон. Для реализации решения будет использоваться только CSS.

Начнем разметки:

    <div class=multi-hover>
    	<span>Born Iman Abdulmajid, 1955</span>
    	<span>First appearance: <cite>Vogue</cite>, 1976</span>
    	<span>Also known as: Iman</span>
    	<span>Actress in: <cite>Star Trek VI</cite></span>
    	<img src=iman-abdulmajid.jpg alt="Iman Abdulmajid">
    </div> 

Элементы span могут содержать любой код. В примере используется текст, нот также можно размещать элементы интерфейса ли изображения.

Устанавливаем позиционирование для элементов divrelative, а для элементов spanabsolute:

    div.multi-hover { position: relative; }
    div.multi-hover img { width: 100%; }
    div.multi-hover span { position: absolute; width: 100%; height: 100%;
    text-align: center; box-sizing: border-box; font-size: 2em;
    transition: .3s linear; color: white; padding: 20%; }

(Внимание: нужно добавить префиксы браузеров к свойству transition для кросс-браузерной работы кода).

Теперь перемещаем элементы span так, чтобы они располагались на внутренней грани элемента div. Для этого используем проценты. Одновременно устанавливаем для каждого свой цвет фона. Для решения задачи используем селектор nth-child:

    div.multi-hover span:nth-child(1) { top: 0; left: 90%;
    background: hsla(0,70%,50%,0.6);  } /* right */
    div.multi-hover span:nth-child(2) { top: -90%; left: 0;
    background: hsla(90,70%,50%,0.6); } /* top */
    div.multi-hover span:nth-child(3) { top: 0; left: -90%;
    background: hsla(180,70%,50%,0.6); } /* left */
    div.multi-hover span:nth-child(4) { top: 90%; left: 0;
    background: hsla(270,70%,50%,0.6); } /* bottom */ 

Рисунок выше показывает схемы расположения элементов span  вокруг центрального изображения.

Теперь необходимо "обрезать" элемнет div так, чтобы только внутренние грани каждого элемента span были доступны над изображением:

div.multi-hover { position: relative; overflow: hidden; }

Остается только спрятать элементы span (с помощью opacity) и заставить их появляться (и накрывать весь элемент div) при наведении курсора. Используем вариацию селектора nth-child:

    div.multi-hover span:hover { opacity: 1; }
    div.multi-hover span:nth-child(odd):hover { left: 0; }
    div.multi-hover span:nth-child(even):hover { top: 0; } 

Несколько замечаний:

  • Очень быстрые перемещения курсора мыши из внешних областей внутрь изображения может пропускать срабатывание трансформации, так как курсора слишком быстро проходит область элемента span. Эффект можно сгладить увеличением внутренней части элемента span, чтобы увеличить область чувствительности. Минусы такого решения рассматриваются ниже.

  • Более низкие значения процентного размера (например,  ±70%) улучшают чувствительность к движениям мыши, но имеют недостаток: увеличивается вероятность запуска двух трансформаций сразу (зона перекрытия элементов span в углах увеличивается).

  • Для пользователей мобильных устройств такая техника эффект не пригодна: очевидно, что ожидать от пользователя скользящего движения над границей изображения глупо. Можно воспользоваться медиа запросом для увеличения внутренней части до ±40% на мобильных устройствах, чтобы расширить зоны для восприятия нажатия.


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

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

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



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

Разные блоки с разных направлений | | 2013-02-20 12:59:29 | | Статьи Web-мастеру | | В данном уроке мы сделаем эффект вывода различных информационных блоков при наведении курсора мыши на изображение с разных сторон. Для реализации решения будет использоваться только CSS.Начнем | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: