Ви не можете створити фактичний title
атрибут
Як відображається текст в title
атрибуті, визначається браузером і змінюється від браузера до браузера. Неможливо на веб-сторінці застосувати будь-який стиль до підказки, яку відображає браузер на основі title
атрибута.
Однак ви можете створити щось дуже схоже, використовуючи інші атрибути.
Ви можете зробити псевдоінструмент із CSS та спеціальним атрибутом (наприклад data-title
)
Для цього я використовував би data-title
атрибут. data-*
атрибути - це спосіб зберігати власні дані в елементах DOM / HTML. Існує кілька способів доступу до них . Важливо, що їх можна вибрати CSS.
Зважаючи на те, що ви можете використовувати CSS для вибору елементів з data-title
атрибутами, ви можете використовувати CSS для створення :after
(або :before
), content
що містить значення атрибута за допомогою attr()
.
Приклади стилізованих підказок
Більший і з іншим кольором тла (на запитання запитання):
[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
Більш досконалий стиль (адаптований з цієї публікації в блозі ):
[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
Відомі проблеми
На відміну від реальної title
підказки, підказка, створена вищевказаним CSS, не обов'язково гарантується, що вона буде відображатися на сторінці (тобто вона може бути поза видимою областю). З іншого боку, це гарантовано знаходиться у поточному вікні, що не стосується фактичної підказки.
Крім того, псевдо-підказка розташована відносно елемента, який має псевдоінструмент, а не щодо місця, де миша знаходиться на цьому елементі. Ви можете налаштувати, де відображається псевдоінформація. Виявлення його у відомому місці щодо елемента може бути вигодою або недоліком, залежно від ситуації.
Ви не можете використовувати :before
або :after
на елементах, які не є контейнерами
У цій відповіді є хороше пояснення "Чи можу я використовувати: перед або: після псевдоелемента у полі введення?"
Фактично, це означає , що ви не можете використовувати цей метод безпосередньо на елементах , як <input type="text"/>
, <textarea/>
, <img>
і т.д. Просте рішення , щоб обернути елемент це не контейнер в <span>
або <div>
і є псевдо-підказка на контейнері.
Приклади використання псевдоінструмента для <span>
обгортання неконтейнерного елемента:
[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/>
З коду в посилання на блозі, зв'язаному вище (який я вперше побачив у відповіді тут, що його плагіатував), мені здалося очевидним використання data-*
атрибута замість title
атрибута. Це також було запропоновано у коментарі snostorm на цю (тепер видалену) відповідь.