Nie możesz stylizować rzeczywistego titleatrybutu
Sposób wyświetlania tekstu w titleatrybucie jest określany przez przeglądarkę i różni się w zależności od przeglądarki. Strona internetowa nie może zastosować żadnego stylu do podpowiedzi wyświetlanej przez przeglądarkę na podstawie titleatrybutu.
Możesz jednak stworzyć coś bardzo podobnego, używając innych atrybutów.
Możesz stworzyć pseudo-etykietkę z CSS i niestandardowym atrybutem (np. data-title)
W tym celu użyłbym data-titleatrybutu. data-*Atrybuty to metoda przechowywania niestandardowych danych w elementach DOM / HTML. Istnieje wiele sposobów dostępu do nich . Co ważne, można je wybrać za pomocą CSS.
Ponieważ możesz używać CSS do wybierania elementów z data-titleatrybutami, możesz następnie użyć CSS do utworzenia :after(lub :before) contentzawierającego wartość atrybutu za pomocąattr() .
Przykłady podpowiedzi w stylu
Większy i z innym kolorem tła (na zapytanie):
[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
Bardziej rozbudowana stylizacja (na podstawie tego postu na blogu ):
[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
Znane problemy
W przeciwieństwie do prawdziwego title podpowiedzi, podpowiedź wygenerowana przez powyższy CSS niekoniecznie jest gwarantowana, aby była widoczna na stronie (tzn. Może znajdować się poza widocznym obszarem). Z drugiej strony gwarantuje się, że znajduje się w bieżącym oknie, co nie ma miejsca w przypadku rzeczywistej podpowiedzi.
Ponadto pseudo-podpowiedź jest umieszczana względem elementu, który ma pseudo-podpowiedź, a nie w stosunku do położenia myszy na tym elemencie. Możesz dostosować, gdzie wyświetlana jest pseudo-etykieta. Pojawienie się w znanym miejscu względem elementu może być zaletą lub wadą, w zależności od sytuacji.
Nie możesz używać elementów, które nie są kontenerami, :beforeani :afterna nich
Istnieje dobre wyjaśnienie w odpowiedzi na pytanie „Czy mogę użyć: przed lub po po pseudoelemencie w polu wejściowym?”
Skutecznie, to oznacza, że nie można zastosować tej metody bezpośrednio na elementach takich jak <input type="text"/>, <textarea/>, <img>itp łatwe rozwiązaniem jest owinąć element, który nie jest to pojemnik w miejscu <span>albo <div>i mają pseudo-podpowiedź na pojemniku.
Przykłady użycia pseudo-etykietki na <span>opakowaniu elementu innego niż kontener:
[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/>
Z kodu w blogu pod linkiem powyżej (który pierwszy raz zobaczyłem w odpowiedzi, która go plagiatowała), wydawało mi się oczywiste, że użyłem data-*atrybutu zamiast titleatrybutu. Takie działanie zostało również zasugerowane w komentarzu snostorm do tej (obecnie usuniętej) odpowiedzi.