Você não pode estilizar um title
atributo real
Como o texto no title
atributo é exibido é definido pelo navegador e varia de navegador para navegador. Não é possível que uma página da web aplique nenhum estilo à dica de ferramenta exibida pelo navegador com base no title
atributo.
No entanto, você pode criar algo muito semelhante usando outros atributos.
Você pode fazer uma pseudo-dica de ferramenta com CSS e um atributo personalizado (por exemplo data-title
)
Para isso, eu usaria um data-title
atributo. data-*
atributos são um método para armazenar dados personalizados em elementos DOM / HTML. Existem várias maneiras de acessá-los . Importante, eles podem ser selecionados por CSS.
Como você pode usar o CSS para selecionar elementos com data-title
atributos, poderá usar o CSS para criar :after
(ou :before
) content
que contenha o valor do atributo em uso attr()
.
Exemplos de dicas de ferramentas com estilo
Maior e com uma cor de fundo diferente (por solicitação da pergunta):
[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
Estilo mais elaborado (adaptado desta postagem do blog ):
[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
Problemas conhecidos
Diferentemente de uma title
dica de ferramenta real , a dica de ferramenta produzida pelo CSS acima não é necessariamente garantida para estar visível na página (ou seja, pode estar fora da área visível). Por outro lado, é garantido que esteja dentro da janela atual, o que não é o caso de uma dica de ferramenta real.
Além disso, a pseudo-dica de ferramenta é posicionada em relação ao elemento que possui a pseudo-dica de ferramenta em vez de em relação ao local onde o mouse está nesse elemento. Você pode ajustar onde a pseudo-dica de ferramenta é exibida. Fazer com que ele apareça em um local conhecido em relação ao elemento pode ser um benefício ou uma desvantagem, dependendo da situação.
Você não pode usar :before
ou :after
em elementos que não são contêineres
Há uma boa explicação nesta resposta para "Posso usar o pseudoelemento a: before ou: after em um campo de entrada?"
Efetivamente, isto significa que você não pode usar esse método diretamente em elementos como <input type="text"/>
, <textarea/>
, <img>
, etc. A solução mais fácil é para embrulhar o elemento que não é um recipiente em um <span>
ou <div>
e ter a pseudo-dica de ferramenta no recipiente.
Exemplos de uso de uma pseudo-dica de ferramenta em um <span>
agrupamento de um elemento não contêiner:
[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/>
A partir do código do post do link acima (que eu vi pela primeira vez em uma resposta aqui que a plagiou), parecia óbvio para mim usar um data-*
atributo em vez do title
atributo. Isso também foi sugerido em um comentário do snostorm sobre a resposta (agora excluída).