<ul class="tooltip__wrapper mt-50">
    <li class="tooltip__target" data-tooltip-text="テキスト1"><img src="https://picsum.photos/id/1/300/300"></li>
    <li class="tooltip__target" data-tooltip-text="テキスト2"><img src="https://picsum.photos/id/10/300/300"></li>
    <li class="tooltip__target" data-tooltip-text="テキスト3"><img src="https://picsum.photos/id/348/300/300"></li>
</ul>
<div class="tooltip"></div>
  • Content:
    .tooltip {
      position: absolute;
      padding: 8px 16px;
      background: #333;
      color: #fff;
      border-radius: 4px;
      opacity: 0;
      transition: opacity 0.3s;
      z-index: 1;
    }
    
    .tooltip::after {
      position: absolute;
      content: '';
      width: 0;
      border: 8px solid transparent;
      border-top-color: #333;
      top: 100%;
      left: 50%;
      transform: translateX(-50%);
    }
    
    .tooltip__wrapper {
      display: flex;
      width: 100%;
      max-width: 600px;
      margin: 0 auto;
      justify-content: space-between;
    }
    
    .tooltip__target {
      width: calc((100% - 24px) / 3);
      border-radius: 50%;
      overflow: hidden;
    }
    
    .tooltip__target > img {
      width: 100%;
    }
    
  • URL: /components/raw/tooltip/tooltip.css
  • Filesystem Path: src\components\08-tooltip\tooltip.css
  • Size: 662 Bytes
  • Content:
    .tooltip {
      position: absolute;
      padding: $space_sm $space_lg;
      background: $color_main;
      color: $color_opposite;
      border-radius: $radius_sm;
      opacity: 0;
      transition: opacity $speed_fast;
      z-index: 1;
      &::after {
        position: absolute;
        content: '';
        width: 0;
        border: 8px solid transparent;
        border-top-color: $color_main;
        top: 100%;
        left: 50%;
        transform: translateX(-50%);
      }
      &__wrapper {
        display: flex;
        width: 100%;
        max-width: 600px;
        margin: 0 auto;
        justify-content: space-between;
      }
      &__target {
        width: calc((100% - #{$space_md * 2}) / 3);
        border-radius: 50%;
        overflow: hidden;
        & > img {
          width: 100%;
        }
      }
    }
    
  • URL: /components/raw/tooltip/tooltip.scss
  • Filesystem Path: src\components\08-tooltip\tooltip.scss
  • Size: 736 Bytes
  • Content:
    (function() {
      const body = document.body;
      const targets = document.querySelectorAll('.tooltip__target');
      if(!targets) {return;}
      // tooltip要素の作成
      const tooltipEl = document.createElement('div');
      tooltipEl.classList.add('tooltip');
      // 要素とtooltipの間隔
      const tooltipTopOffset = 16;
      let tooltipShowFlag = false;
      transitionSet();
    
      targets.forEach(target => {
        target.addEventListener('mouseenter', () => {
          tooltipShowFlag = true;
          tooltipShow(target);
        });
        target.addEventListener('mouseleave', () => {
          tooltipShowFlag = false;
          tooltipHide();
        });
      });
    
      function tooltipShow(el) {
        // bodyに挿入
        body.appendChild(tooltipEl);
        // hoverした要素からtooltipの各値を設定(※bodyに挿入してからでないとtooltipの高さが取れない)
        tooltipEl.innerText = el.dataset.tooltipText;
        let clientRect = el.getBoundingClientRect();
        tooltipEl.style.top = `${window.pageYOffset + clientRect.top - tooltipEl.clientHeight - tooltipTopOffset}px`;
        tooltipEl.style.left = `${window.pageXOffset + (clientRect.left + clientRect.right) / 2 - tooltipEl.clientWidth / 2}px`;
    
        setTimeout(() => {
          tooltipEl.style.opacity = 1;
        });
      }
    
      function tooltipHide() {
        tooltipEl.style.opacity = 0;
      }
    
      function transitionSet() {
        tooltipEl.addEventListener('transitionend', () => {
          if(!tooltipShowFlag) {
            // tooltipの各値をクリア
            tooltipEl.style.opacity = '';
            tooltipEl.style.top = '';
            tooltipEl.style.left = '';
            tooltipEl.innerText = '';
            tooltipEl.remove();
          }
        });
      }
    }());
    
  • URL: /components/raw/tooltip/tooltip.js
  • Filesystem Path: src\components\08-tooltip\tooltip.js
  • Size: 1.7 KB