No puedes diseñar un real title
atributo
El title
navegador define cómo se muestra el texto en el atributo y varía de un navegador a otro. No es posible que una página web aplique ningún estilo a la información sobre herramientas que muestra el navegador en función del title
atributo.
Sin embargo, puede crear algo muy similar utilizando otros atributos.
Puede hacer una pseudo-información sobre herramientas con CSS y un atributo personalizado (por ejemplo data-title
)
Para esto, usaría un data-title
atributo. data-*
Los atributos son un método para almacenar datos personalizados en elementos DOM / HTML. Hay múltiples formas de acceder a ellos . Es importante destacar que pueden seleccionarse mediante CSS.
Dado que puede usar CSS para seleccionar elementos con data-title
atributos, puede usar CSS para crear :after
(o :before
) content
que contenga el valor del atributo usandoattr()
.
Ejemplos de información sobre herramientas con estilo
Más grande y con un color de fondo diferente (por solicitud de pregunta):
[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 más elaborado (adaptado de esta publicación de 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 conocidos
A diferencia de un real title
herramientas , no se garantiza necesariamente que la información sobre herramientas producida por el CSS anterior sea visible en la página (es decir, podría estar fuera del área visible). Por otro lado, se garantiza que está dentro de la ventana actual, que no es el caso para una información sobre herramientas real.
Además, la pseudo-información sobre herramientas se coloca en relación con el elemento que tiene la pseudo-información sobre herramientas en lugar de en relación con la ubicación del mouse en ese elemento. Es posible que desee ajustar con precisión dónde se muestra la pseudo-información sobre herramientas. Hacer que aparezca en una ubicación conocida en relación con el elemento puede ser un beneficio o un inconveniente, dependiendo de la situación.
No puede usar :before
o :after
en elementos que no sean contenedores
Hay una buena explicación en esta respuesta a "¿Puedo usar un pseudo-elemento: before o: after en un campo de entrada?"
Efectivamente, esto significa que no puede usar este método directamente en elementos como <input type="text"/>
,<textarea/>
, <img>
, etc. La solución fácil es envolver el elemento que no es un recipiente en una <span>
o <div>
y tienen la pseudo-tooltip en el envase.
Ejemplos de uso de una pseudo-información sobre herramientas para <span>
envolver un elemento que no sea contenedor:
[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/>
Por el código en la publicación del blog vinculada anteriormente (que vi por primera vez en una respuesta aquí que lo plagió), me pareció obvio usar un data-*
atributo en lugar del title
atributo. Hacerlo también se sugirió en un comentario de snostorm sobre esa respuesta (ahora eliminada).