Bạn không thể tạo kiểu cho một title
thuộc tính thực tế
Cách văn bản trong title
thuộc tính được hiển thị được xác định bởi trình duyệt và thay đổi tùy theo trình duyệt. Trang web không thể áp dụng bất kỳ kiểu nào cho chú giải công cụ mà trình duyệt hiển thị dựa trên title
thuộc tính.
Tuy nhiên, bạn có thể tạo một cái gì đó rất giống nhau bằng cách sử dụng các thuộc tính khác.
Bạn có thể tạo một công cụ giả bằng CSS và thuộc tính tùy chỉnh (ví dụ data-title
)
Đối với điều này, tôi sẽ sử dụng một data-title
thuộc tính. data-*
các thuộc tính là một phương thức để lưu trữ dữ liệu tùy chỉnh trong các thành phần DOM / HTML. Có nhiều cách để truy cập chúng . Điều quan trọng, chúng có thể được chọn bằng CSS.
Cho rằng bạn có thể sử dụng CSS để chọn các thành phần có data-title
thuộc tính, sau đó bạn có thể sử dụng CSS để tạo :after
(hoặc :before
) content
có chứa giá trị của thuộc tính bằng cách sử dụng attr()
.
Ví dụ về tooltip
Lớn hơn và với màu nền khác nhau (theo yêu cầu của câu hỏi):
[data-title]:hover:after {
opacity: 1;
transition: all 0.1s ease 0.5s;
visibility: visible;
}
[data-title]:after {
content: attr(data-title);
background-color: #00FF00;
color: #111;
font-size: 150%;
position: absolute;
padding: 1px 5px 2px 5px;
bottom: -1.6em;
left: 100%;
white-space: nowrap;
box-shadow: 1px 1px 3px #222222;
opacity: 0;
border: 1px solid #111111;
z-index: 99999;
visibility: hidden;
}
[data-title] {
position: relative;
}
<a href="example.com" data-title="My site"> Link </a> with styled tooltip (bigger and with a different background color, as requested in the question)<br/>
<a href="example.com" title="My site"> Link </a> with normal tooltip
Kiểu dáng phức tạp hơn (chuyển thể từ bài đăng trên blog này ):
[data-title]:hover:after {
opacity: 1;
transition: all 0.1s ease 0.5s;
visibility: visible;
}
[data-title]:after {
content: attr(data-title);
position: absolute;
bottom: -1.6em;
left: 100%;
padding: 4px 4px 4px 8px;
color: #222;
white-space: nowrap;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
-moz-box-shadow: 0px 0px 4px #222;
-webkit-box-shadow: 0px 0px 4px #222;
box-shadow: 0px 0px 4px #222;
background-image: -moz-linear-gradient(top, #f8f8f8, #cccccc);
background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #f8f8f8),color-stop(1, #cccccc));
background-image: -webkit-linear-gradient(top, #f8f8f8, #cccccc);
background-image: -moz-linear-gradient(top, #f8f8f8, #cccccc);
background-image: -ms-linear-gradient(top, #f8f8f8, #cccccc);
background-image: -o-linear-gradient(top, #f8f8f8, #cccccc);
opacity: 0;
z-index: 99999;
visibility: hidden;
}
[data-title] {
position: relative;
}
<a href="example.com" data-title="My site"> Link </a> with styled tooltip<br/>
<a href="example.com" title="My site"> Link </a> with normal tooltip
Vấn đề đã biết
Không giống như một title
chú giải công cụ thực sự , chú giải công cụ được tạo bởi CSS ở trên không nhất thiết phải được đảm bảo hiển thị trên trang (tức là nó có thể nằm ngoài vùng nhìn thấy). Mặt khác, nó được đảm bảo nằm trong cửa sổ hiện tại, đây không phải là trường hợp của một tooltip thực tế.
Ngoài ra, pseudo-tooltip được định vị tương đối với phần tử có pseudo-tooltip chứ không liên quan đến vị trí của chuột trên phần tử đó. Bạn có thể muốn tinh chỉnh nơi hiển thị pseudo-tooltip. Có nó xuất hiện ở một vị trí đã biết liên quan đến yếu tố có thể là một lợi ích hoặc nhược điểm, tùy thuộc vào tình huống.
Bạn không thể sử dụng :before
hoặc :after
trên các yếu tố không phải là container
Có một lời giải thích tốt trong câu trả lời này cho "Tôi có thể sử dụng: trước hoặc: sau phần tử giả trên trường đầu vào không?"
Một cách hiệu quả, phương tiện này mà bạn không thể sử dụng phương pháp này trực tiếp trên các yếu tố như <input type="text"/>
, <textarea/>
, <img>
vv Các giải pháp dễ dàng là để bọc các yếu tố đó không phải là một thùng chứa trong một <span>
hoặc <div>
và có pseudo-tooltip trên thùng sơn.
Ví dụ về việc sử dụng một tooltip giả trên một <span>
gói phần tử không chứa:
[data-title]:hover:after {
opacity: 1;
transition: all 0.1s ease 0.5s;
visibility: visible;
}
[data-title]:after {
content: attr(data-title);
background-color: #00FF00;
color: #111;
font-size: 150%;
position: absolute;
padding: 1px 5px 2px 5px;
bottom: -1.6em;
left: 100%;
white-space: nowrap;
box-shadow: 1px 1px 3px #222222;
opacity: 0;
border: 1px solid #111111;
z-index: 99999;
visibility: hidden;
}
[data-title] {
position: relative;
}
.pseudo-tooltip-wrapper {
/*This causes the wrapping element to be the same size as what it contains.*/
display: inline-block;
}
Text input with a pseudo-tooltip:<br/>
<span class="pseudo-tooltip-wrapper" data-title="input type="text""><input type='text'></span><br/><br/><br/>
Textarea with a pseudo-tooltip:<br/>
<span class="pseudo-tooltip-wrapper" data-title="this is a textarea"><textarea data-title="this is a textarea"></textarea></span><br/>
Từ mã trên bài đăng blog được liên kết ở trên (mà lần đầu tiên tôi thấy trong một câu trả lời ở đây đã đạo văn nó), tôi thấy rõ ràng là sử dụng một data-*
thuộc tính thay vì title
thuộc tính. Làm như vậy cũng được đề xuất trong một bình luận bằng cách snostorm về câu trả lời (hiện đã bị xóa).