Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> CSS

Tooltip fade-in với CSS Animation

Tooltip fade-in mượt mà (Opacity + Transition)

Thay vì `visibility` bật/tắt đột ngột, dùng `opacity` + `transition` để tạo hiệu ứng **fade-in/fade-out** mượt mà. Kết hợp `visibility` để tooltip không chặn click khi ẩn.

Ví dụ hoàn chỉnh (Tooltip bên trái + fade)

<!DOCTYPE html>
<html>
<head>
  <style>
    .mytooltip .mytext {
      visibility: hidden;
      opacity: 0;                    /* Quan trọng cho fade */
      width: 140px;
      background-color: blue;
      color: #fff;
      z-index: 1;
      top: -5px;
      right: 110%;                   /* Bên trái cha */
      text-align: center;
      border-radius: 6px;
      padding: 5px 0;
      position: absolute;
      transition: opacity 0.3s, visibility 0.3s; /* Fade mượt */
    }
    .mytooltip {
      position: relative;
      display: inline-block;
      margin-left: 150px;
    }
    /* Mũi tên trỏ phải */
    .mytooltip .mytext::after {
      content: "";
      position: absolute;
      top: 50%;
      left: 100%;
      margin-top: -5px;
      border-width: 6px;
      border-style: solid;
      border-color: transparent transparent transparent blue;
    }
    .mytooltip:hover .mytext {
      visibility: visible;
      opacity: 1;
    }
  </style>
</head>
<body>
  <div class="mytooltip">
    Keep mouse cursor over me
    <span class="mytext"> My Tooltip text</span>
  </div>
</body>
</html>

Giải thích kỹ thuật Fade

Thuộc tínhVai trò
opacity: 0 → 1Tạo hiệu ứng mờ dần ↔ rõ dần (có thể transition)
visibility: hidden → visibleẨn hoàn toàn khỏi layout + không nhận event khi ẩn
transition: opacity 0.3s, visibility 0.3sOpacity transition mượt, visibility delay 0.3s khớp opacity

Tại sao cần cả opacity VÀ visibility?

  • Chỉ `opacity: 0`: Tooltip vẫn chiếm không gian, vẫn nhận click/hover (vô hình nhưng còn đó).
  • Chỉ `visibility: hidden`: Không thể transition (chuyển đổi đột ngột).
  • **Kết hợp**: Mượt mà khi hiện, thực sự biến mất khi ẩn.

Nâng cao: Animation keyframes thay transition

.mytooltip .mytext {
  /* ... */
  animation: fadeOut 0.2s forwards;
}
.mytooltip:hover .mytext {
  animation: fadeIn 0.3s forwards;
}
@keyframes fadeIn {
  from { opacity: 0; transform: translateX(-10px); }
  to { opacity: 1; transform: translateX(0); }
}
@keyframes fadeOut {
  from { opacity: 1; transform: translateX(0); }
  to { opacity: 0; transform: translateX(-10px); }
}

Lưu ý

Tooltip fade-in cần `z-index` đủ cao. Trên mobile, hover không hoạt động - cần JS toggle class hoặc `ontouchstart=""` hack.