Thành công!
TRUCBLOG JOURNAL GÓC ĐỌC • GÓC VIẾT
Bài viết / Góc chia sẻ

Tạo Tooltip Hiện Đại Tự Động Đổi Màu Theo Giao Diện Blog

Đỗ Trực tháng 11 26, 2019 2 phút đọc 1 bình luận … Lượt xem

Tooltip là một chú thích xuất hiện khi rê chuột lên 1 đối tượng nào đó như văn bản, hình ảnh, liên kết và các phần tử giao diện khác. ... Mục đích của tooltip là nói cho người dùng biết đối tượng này dùng để làm gì hoặc hiển thị thêm thông tin của đối tượng được rê chuột vào.


Các thủ thuật tạo Tooltip cũ thường có hai điểm yếu: phụ thuộc vào thư viện jQuery nặng nề và bị "chết" màu nền (thường là màu đen hoặc xám). Nếu blog của bạn có chế độ Dark Mode hoặc bạn thay đổi màu chủ đạo, Tooltip cũ sẽ trở nên lạc lõng.

Hôm nay, mình sẽ chia sẻ một giải pháp hoàn toàn khác biệt được tối ưu riêng cho blog của bạn. Phiên bản này dùng thẻ <a> thân thiện. Đặc biệt, mã Javascript sẽ tự động "hút" màu của liên kết để làm màu nền cho Tooltip, giúp chú thích luôn đồng bộ hoàn hảo với bất kỳ giao diện nào bạn đang sử dụng.

Các tính năng :

  • Auto-Theme Color: Tooltip tự động lấy mã màu của văn bản/liên kết đang được trỏ chuột vào để làm màu nền, kết hợp chữ trắng tương phản.

  • Zero jQuery: Viết bằng Vanilla JS thuần túy, không làm giảm điểm Google PageSpeed Insights.

  • Chuẩn UX/UI Di Động: Tự động tính toán tránh tràn màn hình và hỗ trợ chạm (touch) cực nhạy trên điện thoại.

  • Thân thiện với thẻ <a>: Dễ dàng thao tác ngay trong trình soạn thảo, không lo bị nhảy trang.

Cách thực hiện

Bước 1: Chèn CSS

Vào trang quản trị Blogger > Chủ đề > Chỉnh sửa HTML. Nhấn Ctrl + F tìm thẻ ]]></b:skin> (hoặc </style>) và dán đoạn mã sau vào ngay phía trên:


/* CSS TOOLTIP TỰ ĐỘNG ĐỔI MÀU (TRỰC BLOG TỐI ƯU) */
/* KHAI BÁO BIẾN MÀU MẶC ĐỊNH (CHẾ ĐỘ SÁNG) */
:root {
--tooltip-bg: #334155;
--tooltip-text: #ffffff;
}


/* ĐẢO MÀU TỰ ĐỘNG CHO CHẾ ĐỘ TỐI (DARK MODE) */
@media (prefers-color-scheme: dark) {
:root {
--tooltip-bg: #e2e8f0; /* Nền sáng lên để nổi bật trên nền web đen */
--tooltip-text: #0f172a; /* Chữ chuyển thành màu tối */
}
}


/* Tích hợp cho các blog dùng nút gạt thủ công */
.dark, .dark-mode, [data-theme="dark"] {
--tooltip-bg: #e2e8f0;
--tooltip-text: #0f172a;
}


/* CẬP NHẬT LẠI KHUNG TOOLTIP */
.truc-tooltip-pro {
position: absolute;
background-color: var(--tooltip-bg) !important;
color: var(--tooltip-text) !important;
padding: 8px 14px;
border-radius: 8px;
font-size: 14px;
max-width: 280px;
text-align: center;
z-index: 99999;
pointer-events: none;
opacity: 0;
transform: translateY(10px);
transition: opacity 0.3s ease, transform 0.3s ease, background-color 0.3s, color 0.3s;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.2);
word-wrap: break-word;
}


.truc-tooltip-pro.show {
opacity: 1;
transform: translateY(0);
}


/* CẬP NHẬT MŨI TÊN CHỈ HƯỚNG */
.truc-tooltip-pro::after {
content: '';
position: absolute;
bottom: -6px;
left: 50%;
transform: translateX(-50%);
border-width: 6px 6px 0;
border-style: solid;
border-color: var(--tooltip-bg) transparent transparent transparent !important;
}


.truc-tooltip-pro.bottom::after {
top: -6px;
bottom: auto;
border-width: 0 6px 6px;
border-color: transparent transparent var(--tooltip-bg) transparent !important;
}

Bước 2: Cài Đặt Mã Vanilla JS Xử Lý Thuật Toán Trượt & Nhận Diện Màu

Kéo xuống cuối trang mẫu HTML, tìm thẻ đóng </body> và dán đoạn mã này vào ngay phía trên nó:


<script> // <![CDATA[ document.addEventListener("DOMContentLoaded", function() { const tipTargets = document.querySelectorAll('a[rel~="tooltip"]'); tipTargets.forEach(target => { const tipContent = target.getAttribute('title'); if (!tipContent) return; // Đẩy nội dung vào biến data và xóa title để trình duyệt không hiện chú thích mặc định target.setAttribute('data-tip', tipContent); target.removeAttribute('title'); let tipBox; const showTip = () => { if (document.querySelector('.truc-tooltip-pro')) return; tipBox = document.createElement('div'); tipBox.className = 'truc-tooltip-pro'; tipBox.innerHTML = target.getAttribute('data-tip'); // THUẬT TOÁN HÚT MÀU: Lấy màu text của thẻ a đang hover để làm màu nền tooltip const targetColor = window.getComputedStyle(target).color; tipBox.style.setProperty('--tip-bg', targetColor); document.body.appendChild(tipBox); const targetRect = target.getBoundingClientRect(); const tipRect = tipBox.getBoundingClientRect(); let topPos = targetRect.top + window.scrollY - tipRect.height - 12; let leftPos = targetRect.left + window.scrollX + (targetRect.width / 2) - (tipRect.width / 2); // Chống tràn màn hình điện thoại if (leftPos < 10) leftPos = 10; if (leftPos + tipRect.width > window.innerWidth - 10) { leftPos = window.innerWidth - tipRect.width - 10; } if (topPos < window.scrollY + 10) { topPos = targetRect.bottom + window.scrollY + 12; tipBox.classList.add('bottom'); // Đảo mũi tên lên trên } tipBox.style.left = leftPos + 'px'; tipBox.style.top = topPos + 'px'; // Tạo độ trễ nhỏ để CSS Transition hoạt động mượt requestAnimationFrame(() => tipBox.classList.add('show')); }; const hideTip = () => { if (tipBox) { tipBox.classList.remove('show'); setTimeout(() => { if (tipBox && tipBox.parentNode) { tipBox.parentNode.removeChild(tipBox); } tipBox = null; }, 300); } }; // Chuột trên máy tính target.addEventListener('mouseenter', showTip); target.addEventListener('mouseleave', hideTip); // Chạm trên màn hình điện thoại target.addEventListener('touchstart', showTip, {passive: true}); target.addEventListener('touchend', () => setTimeout(hideTip, 2500)); }); }); // ]]> </script>




Bước 3: Cách Áp Dụng Chuyên Nghiệp Trong Bài Đăng

Khi soạn bài viết, bạn chuyển sang chế độ HTML và sử dụng cấu trúc thẻ <a> như sau. Lưu ý thuộc tính href="javascript:void(0);" giúp thẻ hoạt động như một vùng chứa chú thích mà không làm trình duyệt tải lại trang khi vô tình nhấp chuột.

Kiểu 1: Chú thích chữ thuần túy


<a href="javascript:void(0);" title="Màu nền của box này sẽ tự lấy theo màu chữ hiện tại" rel="tooltip">Chú thích thông thường</a>

Kiểu 2: Chú thích chứa định dạng HTML (In đậm, nghiêng)

<a href="javascript:void(0);" rel="tooltip" title="Nội dung này chứa chữ <strong>in đậm</strong> và <em>in nghiêng</em> rất rõ ràng.">Chú thích có định dạng</a>

Kiểu 3: Tích hợp Tooltip lên Link điều hướng thực tế 

Bạn cứ gắn link vào thuộc tính href như bình thường, tính năng chú thích vẫn tự động xuất hiện. 

<a href="https://trucblogs.blogspot.com/" rel="tooltip" title="Nhấp vào để truy cập Trang chủ">Trực Blog</a>

DEMO

Trực Blog

Lưu mẫu lại và ra bài viết kiểm tra. Bất kể link trong theme của bạn màu xanh lục, đỏ thẫm hay cam, Tooltip sẽ tự động nhận diện và biến hóa màu sắc đồng bộ ngay lập tức!

Chia sẻ bài viết:
Ảnh đại diện tác giả

Đỗ Trực Tác giả / Admin

Chia sẻ kiến thức lập trình, phát triển web, công nghệ và các thủ thuật thực tế. Cảm ơn bạn đã ghé thăm Truc Blog.

Thảo Luận & Nhận Xét (1)

Công cụ bình luận nâng cao:
Nội quy bình luận của blog

Hãy cùng giữ phần thảo luận thân thiện, hữu ích và an toàn cho mọi người.

  1. Trao đổi lịch sự, tôn trọng người khác; góp ý vào nội dung, không công kích cá nhân.
  2. Bình luận đúng chủ đề bài viết; tránh spam, quảng cáo lặp lại hoặc đường dẫn đáng ngờ.
  3. Không đăng mật khẩu, số giấy tờ, thông tin liên hệ riêng tư hay dữ liệu nhạy cảm.
  4. Khi chia sẻ mã nguồn, hãy dùng công cụ mã hóa code để giữ nguyên ký tự và dễ đọc.
  5. Chỉ chia sẻ hình ảnh, video và tài liệu mà bạn có quyền sử dụng; không đăng nội dung vi phạm pháp luật.
  6. Quản trị viên có thể ẩn hoặc xóa nội dung spam, xúc phạm, không an toàn hoặc không phù hợp.
Biểu tượng cảm xúc nổi bậtChạm để sao chép
Công cụ Mã hóa HTML & Chèn Code vào Bình luận
* Nhấn Chèn Ảnh/Video, dán liên kết công khai rồi sao chép URL vào bình luận. Sau khi bình luận được đăng, mẫu sẽ tự hiển thị ảnh trực tiếp, video MP4/WebM hoặc video YouTube nếu URL thuộc định dạng được hỗ trợ. Blogger không cho tải tệp trực tiếp lên bình luận.

Nhận xét