tooltip template

by James Connolly

HTML

<div class="tooltip-map">

  <!-- 1 -->
  <div class="tooltip" style="left: 20px; top: 20px;">
    <div class="tooltip-inner">

      <div class="tooltip-icon">
        <span> view details</span>
      </div>
      
      <div class="tooltip-content">
        <ul>
          <li>List Item</li>
          <li>List Item</li>
          <li>List Item</li>
        </ul>
      </div>

    </div>
  </div>
  
  <!-- 2 -->
  <div class="tooltip" style="left: 25%; top: 25%;">
    <div class="tooltip-inner">

      <div class="tooltip-icon">
        <span> view details</span>
      </div>
      
      <div class="tooltip-content">
        <ul>
          <li>List Item</li>
          <li>List Item</li>
          <li>List Item</li>
        </ul>
      </div>

    </div>
  </div>

</div>

SCSS

body {
  margin: 0;
  padding: 0;
}

// relative area you can place tooltips
.tooltip-map {
  background: pink;
  height: 100vh;
  position: relative;
  
  &.active-tooltip {
    .tooltip {
      opacity: 0;
      visibility: visible;
      
      &.inview {
        opacity: 0;
        visibility: visible;
        background: purple;
      }
    }
  }
}

.tooltip {
  position: absolute;
  z-index: 10;
  background: orange;

  // tooltip inner (needed for absolute positioning of content)
  .tooltip-inner {
    position: relative;
    
  }

  // tooltip icon
  .tooltip-icon {
    width: 40px;
    height: 40px;
    border-radius: 500px;
    border: 2px solid #fff;
    background: blue;
    color: #fff;
    text-align: center;
    cursor: pointer;
    transition: box-shadow 0.5s ease-in, transform 0.7s cubic-bezier(0.86, 0, 0.07, 1);
    z-index: 2;
    position: relative;

    span {
      font-size: 0;
    }

    &::before,
    &::after {
      content: "";
      display: block;
      border-radius: 500px;
      background: #fff;
      position: absolute;
      left: 50%;
      top: 50%;
    }

    &::before {
      width: 2px;
      height: 14px;
      margin-left: -1px;
      margin-top: -7px;
    }

    &::after {
      width: 14px;
      height: 2px;
      margin-left: -7px;
      margin-top: -1px;
    }
    
    &:hover {
      box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
      transform: rotate(135deg) scale(1.1);
    }
  }

  // tooltip content
  .tooltip-content {
    width: 200px;
    padding: 25px;
    background: #fff;
    z-index: 1;
    position: absolute;
    left: 10px;
    top: 10px;
  }
  
  
}

JavaScript

(function($) {

  $('.tooltip').click(function() {
  	$('tooltip-map').addClass('active-tooltip');
  	$(this).addClass('inview');
  });

  $('.modal-close').click(function() {
  	$('body').removeClass('modal-inview');
    $('.modal').removeClass('open');
  });

})(jQuery);