Gerçek bir title
niteliği biçimlendiremezsiniz
Özellikteki metnin nasıl title
görüntüleneceği tarayıcı tarafından tanımlanır ve tarayıcıdan tarayıcıya değişir. Bir web sayfasının, title
özelliğe göre tarayıcının görüntülediği araç ipucuna herhangi bir stil uygulaması mümkün değildir .
Ancak, diğer özellikleri kullanarak çok benzer bir şey oluşturabilirsiniz.
CSS ve özel bir özellik ile sözde araç ipucu yapabilirsiniz (ör. data-title
)
Bunun için bir data-title
özellik kullanırdım . data-*
öznitelikleri özel verileri DOM öğelerinde / HTML'de depolamak için kullanılan bir yöntemdir. Onlara erişmenin birden fazla yolu vardır . Önemli olarak, CSS tarafından seçilebilirler.
data-title
Nitelikleri olan öğeleri seçmek için CSS kullanabileceğiniz göz önüne alındığında , daha sonra , kullanarak özniteliğin değerini içeren :after
(veya :before
) oluşturmak için CSS kullanabilirsiniz . content
attr()
Stilli araç ipucu örnekleri
Daha büyük ve farklı bir arka plan rengiyle (soru başına):
[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
Daha ayrıntılı stiller ( bu blog yayınından uyarlanmıştır ):
[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
Bilinen Sorunlar
Gerçek bir title
araç ipucundan farklı olarak , yukarıdaki CSS tarafından üretilen araç ipucunun mutlaka sayfada görünmesi garanti edilmez (yani, görünür alanın dışında olabilir). Öte yandan, gerçek bir ipucu için geçerli olmayan geçerli pencerede olması garanti edilir.
Ek olarak, sözde araç ipucu, farenin o öğenin bulunduğu yere göre değil, sözde araç ipucuna sahip öğeye göre konumlandırılır. Sahte araç ipucunun görüntülendiği yere ince ayar yapmak isteyebilirsiniz. Öğeye göre bilinen bir konumda görünmesi, duruma bağlı olarak bir yarar veya dezavantaj olabilir.
Kap olmayan öğeler üzerinde :before
veya kullanamazsınız:after
İyi bir açıklama içinde var bu yanıt "Ben kullanabilir miyim a: önce veya: Bir giriş alanına after sözde elemanı"
Etkili, sizin gibi unsurları doğrudan bu yöntemi kullanamazsınız Bu araçlar <input type="text"/>
, <textarea/>
, <img>
vb Basit bir çözüm, bir kap değil elemanı sarmak için olan <span>
veya <div>
kabın üzerine sözde ipucu var.
<span>
Kapsayıcı olmayan bir öğeyi sararken sözde araç ipucu kullanma örnekleri :
[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/>
Yukarıda bağlı blog yazısı üzerindeki koddan (ki burada ilk kez intihal ettiğim bir cevapta gördüm), bu data-*
özellik yerine bir özellik kullanmak benim için bariz görünüyordu title
. Bunu yapmak , (şimdi silindi) cevabına snostorm tarafından yapılan bir yorumda da önerildi .