Hot points and on-screen tooltip demo

HTML
<div class="cd-product cd-container"> <div class="cd-product-wrapper"> <img src="http://www.rudebox.org.ua/demo/points-of-interest-css3/img/cd-app-image.png" alt="Preview image"> <ul> <li class="cd-single-point"> <a class="cd-img-replace" href="#0">Больше</a> <div class="cd-more-info cd-top"> <h2>Заголовок</h2> <p> Текстовое описание необходимой информации котрая будет описывать детали вашего проекта, а также объяснять посетителю как пользоваться вашим приложением.</p> <a href="#0" class="cd-close-info cd-img-replace">Закрыть</a> </div> </li> <!-- .cd-single-point --> <li class="cd-single-point"> <a class="cd-img-replace" href="#0">Больше</a> <div class="cd-more-info cd-top"> <h2>Заголовок</h2> <p> Текстовое описание необходимой информации котрая будет описывать детали вашего проекта, а также объяснять посетителю как пользоваться вашим приложением.</p> <a href="#0" class="cd-close-info cd-img-replace">Закрыть</a> </div> </li> <!-- .cd-single-point --> <li class="cd-single-point"> <a class="cd-img-replace" href="#0">Больше</a> <div class="cd-more-info cd-right"> <h2>Заголовок</h2> <p> Текстовое описание необходимой информации котрая будет описывать детали вашего проекта, а также объяснять посетителю как пользоваться вашим приложением.</p> <a href="#0" class="cd-close-info cd-img-replace">Закрыть</a> </div> </li> <!-- .cd-single-point --> <li class="cd-single-point"> <a class="cd-img-replace" href="#0">Больше</a> <div class="cd-more-info cd-left"> <h2>Заголовок</h2> <p> Текстовое описание необходимой информации котрая будет описывать детали вашего проекта, а также объяснять посетителю как пользоваться вашим приложением.</p> <a href="#0" class="cd-close-info cd-img-replace">Закрыть</a> </div> </li> <!-- .cd-single-point --> </ul> </div> <!-- .cd-product-wrapper --> </div> <!-- .cd-product -->
CSS
/* -------------------------------- Primary style -------------------------------- */ html * { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } *, *:after, *:before { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } body { font-size: 100%; font-family: "Roboto", sans-serif; background: #000000 url(header.jpg) no-repeat center top; } a { text-decoration: none; } img { max-width: 100%; } /* -------------------------------- Modules - reusable parts of our design -------------------------------- */ .cd-container { /* this class is used to give a max-width to the element it is applied to, and center it horizontally when it reaches that max-width */ width: 90%; max-width: 1170px; margin: 0 auto; } .cd-container:after { content: ""; display: table; clear: both; } .cd-img-replace { /* replace text with background images */ display: inline-block; overflow: hidden; text-indent: 100%; white-space: nowrap; } /* -------------------------------- Main components -------------------------------- */ header { height: 250px; line-height: 250px; } header h1 { font-size: 30px; font-size: 1.875rem; text-align: center; font-weight: 300; } .cd-product { text-align: center; } .cd-product-wrapper { display: inline-block; position: relative; margin: 0 auto; width: 100%; max-width: 450px; } .cd-product-wrapper > img { display: block; } .cd-single-point { position: absolute; border-radius: 50%; } .cd-single-point > a { position: relative; z-index: 2; display: block; width: 30px; height: 30px; border-radius: inherit; background: #d95353; box-shadow: 0 0 10px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.3); -webkit-transition: background-color 0.2s; -moz-transition: background-color 0.2s; transition: background-color 0.2s; } .cd-single-point > a::after, .cd-single-point > a:before { /* rotating plus icon */ content: ''; position: absolute; left: 50%; top: 50%; bottom: auto; right: auto; -webkit-transform: translateX(-50%) translateY(-50%); -moz-transform: translateX(-50%) translateY(-50%); -ms-transform: translateX(-50%) translateY(-50%); -o-transform: translateX(-50%) translateY(-50%); transform: translateX(-50%) translateY(-50%); background-color: #ffffff; -webkit-transition-property: -webkit-transform; -moz-transition-property: -moz-transform; transition-property: transform; -webkit-transition-duration: 0.2s; -moz-transition-duration: 0.2s; transition-duration: 0.2s; } .cd-single-point > a::after { height: 2px; width: 12px; } .cd-single-point > a::before { height: 12px; width: 2px; } .cd-single-point::after { /* this is used to create the pulse animation */ content: ''; position: absolute; z-index: 1; width: 100%; height: 100%; top: 0; left: 0; border-radius: inherit; background-color: transparent; -webkit-animation: cd-pulse 2s infinite; -moz-animation: cd-pulse 2s infinite; animation: cd-pulse 2s infinite; } .cd-single-point:nth-of-type(1) { bottom: 40%; right: 30%; } .cd-single-point:nth-of-type(2) { bottom: 24%; right: 46%; } .cd-single-point:nth-of-type(3) { top: 28%; left: 20%; } .cd-single-point:nth-of-type(4) { top: 20%; right: 22%; } .cd-single-point.is-open > a { background-color: #475f74; } .cd-single-point.is-open > a::after, .cd-single-point.is-open > a::before { -webkit-transform: translateX(-50%) translateY(-50%) rotate(135deg); -moz-transform: translateX(-50%) translateY(-50%) rotate(135deg); -ms-transform: translateX(-50%) translateY(-50%) rotate(135deg); -o-transform: translateX(-50%) translateY(-50%) rotate(135deg); transform: translateX(-50%) translateY(-50%) rotate(135deg); } .cd-single-point.is-open::after { /* remove pulse effect */ display: none; } .cd-single-point.is-open .cd-more-info { visibility: visible; opacity: 1; -webkit-transform: scale(1); -moz-transform: scale(1); -ms-transform: scale(1); -o-transform: scale(1); transform: scale(1); -webkit-transition: opacity 0.3s 0s, visibility 0s 0s, -webkit-transform 0.3s 0s, top 0.3s 0s, bottom 0.3s 0s, left 0.3s 0s, right 0.3s 0s; -moz-transition: opacity 0.3s 0s, visibility 0s 0s, -moz-transform 0.3s 0s, top 0.3s 0s, bottom 0.3s 0s, left 0.3s 0s, right 0.3s 0s; transition: opacity 0.3s 0s, visibility 0s 0s, transform 0.3s 0s, top 0.3s 0s, bottom 0.3s 0s, left 0.3s 0s, right 0.3s 0s; } .cd-single-point.visited > a { background-color: #475f74; } .cd-single-point.visited::after { /* pulse effect no more active on visited elements */ display: none; } @media only screen and (min-width: 600px) { .cd-single-point.is-open .cd-more-info.cd-left { right: 140%; } .cd-single-point.is-open .cd-more-info.cd-right { left: 140%; } .cd-single-point.is-open .cd-more-info.cd-top { bottom: 140%; } .cd-single-point.is-open .cd-more-info.cd-bottom { top: 140%; } } @-webkit-keyframes cd-pulse { 0% { -webkit-transform: scale(1); box-shadow: inset 0 0 1px 1px rgba(217, 83, 83, 0.8); } 50% { box-shadow: inset 0 0 1px 1px rgba(217, 83, 83, 0.8); } 100% { -webkit-transform: scale(1.6); box-shadow: inset 0 0 1px 1px rgba(217, 83, 83, 0); } } @-moz-keyframes cd-pulse { 0% { -moz-transform: scale(1); box-shadow: inset 0 0 1px 1px rgba(217, 83, 83, 0.8); } 50% { box-shadow: inset 0 0 1px 1px rgba(217, 83, 83, 0.8); } 100% { -moz-transform: scale(1.6); box-shadow: inset 0 0 1px 1px rgba(217, 83, 83, 0); } } @keyframes cd-pulse { 0% { -webkit-transform: scale(1); -moz-transform: scale(1); -ms-transform: scale(1); -o-transform: scale(1); transform: scale(1); box-shadow: inset 0 0 1px 1px rgba(217, 83, 83, 0.8); } 50% { box-shadow: inset 0 0 1px 1px rgba(217, 83, 83, 0.8); } 100% { -webkit-transform: scale(1.6); -moz-transform: scale(1.6); -ms-transform: scale(1.6); -o-transform: scale(1.6); transform: scale(1.6); box-shadow: inset 0 0 1px 1px rgba(217, 83, 83, 0); } } .cd-single-point .cd-more-info { position: fixed; top: 0; left: 0; z-index: 3; width: 100%; height: 100%; overflow-y: auto; -webkit-overflow-scrolling: touch; text-align: left; line-height: 1.5; background-color: rgba(255, 255, 255, 0.95); padding: 2em 1em 1em; visibility: hidden; opacity: 0; -webkit-transform: scale(0.8); -moz-transform: scale(0.8); -ms-transform: scale(0.8); -o-transform: scale(0.8); transform: scale(0.8); -webkit-transition: opacity 0.3s 0s, visibility 0s 0.3s, -webkit-transform 0.3s 0s, top 0.3s 0s, bottom 0.3s 0s, left 0.3s 0s, right 0.3s 0s; -moz-transition: opacity 0.3s 0s, visibility 0s 0.3s, -moz-transform 0.3s 0s, top 0.3s 0s, bottom 0.3s 0s, left 0.3s 0s, right 0.3s 0s; transition: opacity 0.3s 0s, visibility 0s 0.3s, transform 0.3s 0s, top 0.3s 0s, bottom 0.3s 0s, left 0.3s 0s, right 0.3s 0s; } .cd-single-point .cd-more-info::before { /* triangle next to the interest point description - hidden on mobile */ content: ''; position: absolute; height: 0; width: 0; display: none; border: 8px solid transparent; } .cd-single-point .cd-more-info h2 { font-size: 22px; font-size: 1.375rem; margin-bottom: .6em; } .cd-single-point .cd-more-info p { color: #758eb1; } @media only screen and (min-width: 600px) { .cd-single-point .cd-more-info { position: absolute; width: 220px; height: 240px; padding: 1em; overflow-y: visible; line-height: 1.4; border-radius: 0.25em; box-shadow: 0 0 20px rgba(0, 0, 0, 0.5); } .cd-single-point .cd-more-info::before { display: block; } .cd-single-point .cd-more-info.cd-left, .cd-single-point .cd-more-info.cd-right { top: 50%; bottom: auto; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); -o-transform: translateY(-50%); transform: translateY(-50%); } .cd-single-point .cd-more-info.cd-left::before, .cd-single-point .cd-more-info.cd-right::before { top: 50%; bottom: auto; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); -o-transform: translateY(-50%); transform: translateY(-50%); } .cd-single-point .cd-more-info.cd-left { right: 160%; left: auto; } .cd-single-point .cd-more-info.cd-left::before { border-left-color: rgba(255, 255, 255, 0.95); left: 100%; } .cd-single-point .cd-more-info.cd-right { left: 160%; } .cd-single-point .cd-more-info.cd-right::before { border-right-color: rgba(255, 255, 255, 0.95); right: 100%; } .cd-single-point .cd-more-info.cd-top, .cd-single-point .cd-more-info.cd-bottom { left: 50%; right: auto; -webkit-transform: translateX(-50%); -moz-transform: translateX(-50%); -ms-transform: translateX(-50%); -o-transform: translateX(-50%); transform: translateX(-50%); } .cd-single-point .cd-more-info.cd-top::before, .cd-single-point .cd-more-info.cd-bottom::before { left: 50%; right: auto; -webkit-transform: translateX(-50%); -moz-transform: translateX(-50%); -ms-transform: translateX(-50%); -o-transform: translateX(-50%); transform: translateX(-50%); } .cd-single-point .cd-more-info.cd-top { bottom: 160%; top: auto; } .cd-single-point .cd-more-info.cd-top::before { border-top-color: rgba(255, 255, 255, 0.95); top: 100%; } .cd-single-point .cd-more-info.cd-bottom { top: 160%; } .cd-single-point .cd-more-info.cd-bottom::before { border-bottom-color: rgba(255, 255, 255, 0.95); bottom: 100%; } .cd-single-point .cd-more-info h2 { font-size: 20px; font-size: 1.25rem; margin-bottom: 0; } .cd-single-point .cd-more-info p { font-size: 14px; font-size: 0.875rem; } } /* close the interest point description - only on mobile */ .cd-close-info { position: fixed; top: 0; right: 0; height: 44px; width: 44px; } .cd-close-info::after, .cd-close-info:before { content: ''; position: absolute; left: 50%; top: 50%; bottom: auto; right: auto; -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg); -moz-transform: translateX(-50%) translateY(-50%) rotate(45deg); -ms-transform: translateX(-50%) translateY(-50%) rotate(45deg); -o-transform: translateX(-50%) translateY(-50%) rotate(45deg); transform: translateX(-50%) translateY(-50%) rotate(45deg); background-color: #475f74; -webkit-transition-property: -webkit-transform; -moz-transition-property: -moz-transform; transition-property: transform; -webkit-transition-duration: 0.2s; -moz-transition-duration: 0.2s; transition-duration: 0.2s; } .cd-close-info::after { height: 2px; width: 16px; } .cd-close-info::before { height: 16px; width: 2px; } @media only screen and (min-width: 600px) { .cd-close-info { display: none; } }
JAVASCRIPT
jQuery(document).ready(function($){ //open interest point description $('.cd-single-point').children('a').on('click', function(){ var selectedPoint = $(this).parent('li'); if( selectedPoint.hasClass('is-open') ) { selectedPoint.removeClass('is-open').addClass('visited'); } else { selectedPoint.addClass('is-open').siblings('.cd-single-point.is-open').removeClass('is-open').addClass('visited'); } }); //close interest point description $('.cd-close-info').on('click', function(event){ event.preventDefault(); $(this).parents('.cd-single-point').eq(0).removeClass('is-open').addClass('visited'); }); });
Expand for more options Login