How can I use a carriage return in a HTML tooltip?
Asked Answered
P

32

392

I'm currently adding verbose tooltips to our site, and I'd like (without having to resort to a whizz-bang jQuery plugin, I know there are many!) to use carriage returns to format the tooltip.

To add the tip I'm using the title attribute. I've looked around the usual sites and using the basic template of:

<a title='Tool?Tip?On?New?Line'>link with tip</a>

I've tried replacing the ? with:

  • <br />
  • &013; / &#13;
  • \r\n
  • Environment.NewLine (I'm using C#)

None of the above works. Is it possible?

Parol answered 11/12, 2008 at 10:11 Comment(1)
It's quite tricky, but there might be a workaround. Change all the spaces in your title into non-breaking space &nbsp;. Then put spaces where you want the line breaks. You may also need to add a bunch of &nbsp; characters before your space (line break).Harmon
E
326

It’s simple: just press Enter!

<a href="#" title='Tool
Tip
On
New
Line'>link with tip</a>
Extrauterine answered 11/12, 2008 at 10:24 Comment(9)
@Halcyon, just to clarify for other readers, the above three codes don't seem to be HTML. They look more like C-derived language string escape sequences.Rosati
@Rosati I don't understand what you mean by that. \x0A (byte) is the character-code that corresponds with a newline. Same for \u000A (unicode). \n is also newline.Damian
@Halcyon, I tried inserting those escape sequences into a title attribute in Firefox and Chrome, and they were just presented literally in the tooltip. Afterwards, i realised you were probably using that syntax as a way of communicating which characters (not escape sequences) should be used. My comment is for saving other people time by warning them to not try to put your escape sequences in their HTML so they don't waste time like I did.Rosati
In Chrome (42), the text below the first line has a different, (and for me) less-readable font.Esculent
Not sure if relevant to the comments above, but I've found that while \n and \r do in fact work, if PHP is involved they will only work within strings presented inside of " " and not inside of ' '.Shy
@Shy They don't work in HTML, they just work specifically in PHP's double quotes because that's a feature of PHP's double quotes.Vitric
So are we agreed there is no way to implement in html except a physical new line split in the string?Gelatinize
did things progress regarding compatibility of Firefox Browser yet? (I can't test it right now)Spoliation
This is the solution which works in Svelte, both in {...} and "..." attribute values.Jasun
S
360

The latest specification allows line feed characters, so a simple line break inside the attribute or entity &#10; (note that characters # and ; are required) are OK.

Saloop answered 11/12, 2008 at 10:33 Comment(6)
it's not supported by Chrome but for Firefox fine!Dutiful
I tried both &#10; and &#13;. &#13; would not honor intended "line breaks" in chrome version 50.0.2661.94 (64-bit). &#10; is working well in current versions of chrome, firefox and opera (all for 64-bit Ubuntu) and internet explorer version 11.0 and some change on windows.Intransitive
This is particularly useful for me because I was trying to do that on Wordpress post editor.Densimeter
&#10; works beautifully in IE, Firefox, and Chrome. Thanks!Concoction
For chrome &#013; ....... Example: title="title1 &#13;title2 &#13;title3"Britteny
for me \n\n has worked in all browsers to create one line breakKindhearted
E
326

It’s simple: just press Enter!

<a href="#" title='Tool
Tip
On
New
Line'>link with tip</a>
Extrauterine answered 11/12, 2008 at 10:24 Comment(9)
@Halcyon, just to clarify for other readers, the above three codes don't seem to be HTML. They look more like C-derived language string escape sequences.Rosati
@Rosati I don't understand what you mean by that. \x0A (byte) is the character-code that corresponds with a newline. Same for \u000A (unicode). \n is also newline.Damian
@Halcyon, I tried inserting those escape sequences into a title attribute in Firefox and Chrome, and they were just presented literally in the tooltip. Afterwards, i realised you were probably using that syntax as a way of communicating which characters (not escape sequences) should be used. My comment is for saving other people time by warning them to not try to put your escape sequences in their HTML so they don't waste time like I did.Rosati
In Chrome (42), the text below the first line has a different, (and for me) less-readable font.Esculent
Not sure if relevant to the comments above, but I've found that while \n and \r do in fact work, if PHP is involved they will only work within strings presented inside of " " and not inside of ' '.Shy
@Shy They don't work in HTML, they just work specifically in PHP's double quotes because that's a feature of PHP's double quotes.Vitric
So are we agreed there is no way to implement in html except a physical new line split in the string?Gelatinize
did things progress regarding compatibility of Firefox Browser yet? (I can't test it right now)Spoliation
This is the solution which works in Svelte, both in {...} and "..." attribute values.Jasun
G
94

Try character 10. Until January 2015 it wouldn't work in Firefox.

The text is displayed (if at all) in a browser dependent manner. Small tooltips work on most browsers. Long tooltips and line breaking work in IE and Safari (use &#10; or &#13; for a new newline). Firefox and Opera do not support newlines. Firefox does not support long tooltips.

http://modp.com/wiki/htmltitletooltips

Firefox now supports using &#13; to insert a line break in an HTML title attribute. See the snippet example below.

<a href="#" title="Line 1&#13;Line 2&#13;Line 3">Hover for multi-line title</a>
Gingergingerbread answered 11/12, 2008 at 10:15 Comment(5)
+1. If you decide to use a jQuery plugin, for optimal accessibility it should read its content from the title attribute and substitute some arbitrary invisible character for a line-break at runtime.Kerrikerrie
+1. Interesting stuff. There's still the issue of some UAs trimming the title when it pops up - FF2 as I recall but that's less of an issue these days.Hereat
As of January 2015 Firefox does support using &#13; in a title attribute to insert a line break.Unaccustomed
I could not get line breaks to work in IE11 in a SVG element <title>. Has anybody had more success with that? Tried the above/below mention char codes, none seem to work.Mcsweeney
What other browsers than Firefox did it work in?Superpower
D
69

Tested this in IE, Chrome, Safari, Firefox (latest versions 2012-11-27):
&#13;

Works in all of them...

Dregs answered 27/11, 2012 at 13:34 Comment(7)
First method (breaking lines in code) seems simpler, but does not stand to auto-formatters js-code programs.Miliaria
@Camilo Martin, newline and linefeed are the same across platforms. &#10; is the unix linefeed just as it's the windows linefeed. Similarly, &#13; is the newline for both platforms. The spec specifies the linefeed (LF) char which is of course &#10; on both (all?) platforms.Enterprise
@Enterprise Not sure if I understand you - the correct thing to use seems the unix LF (which is kinda standard linefeed across protocols and tools), CR was only used by old Macs (and other obscure platforms) and seems out of place.Placoid
I apologize for my confusing word choice. What I called a linefeed (#10) is really a newline, although often referred to as LF. What I called a newline (#13) is really a carriage return. In any case, my point was that those values are the same across all platforms. The fact that windows (using both of these characters to end a line) and mac (using the "wrong" character to end a line) should be irrelevant in regards to which HTML entity is to be used in a title attribute. The spec says &#10;, although apparently &#13; works in many circumstances as well.Enterprise
If anyone else needs a refresher on these character codes, like I did, see [this thread] (https://mcmap.net/q/53734/-difference-between-n-and-r/1298086).Enterprise
plain &#13; does not work for chrome on Linux. The sequence &#13;&#10; does, however.Piscina
No luck with IE11 with &#13;Longsighted
S
64

Also worth mentioning, if you are setting the title attribute with JavaScript like this:

divElement.setAttribute("title", "Line one&#10;Line two");

It won't work. You have to replace that ASCII decimal 10 with a ASCII hexadecimal A in the way it's escaped with JavaScript. Like this:

divElement.setAttribute("title", "Line one\x0ALine two");

Screed answered 3/11, 2012 at 1:15 Comment(2)
@MaxNanasy Agreed, and they equivalent (\n means char code 10 anyway)Tivoli
Thank you! It works! My use case involved string interpolation in AngularJSBacterin
P
32

As of Firefox 12 they now support line breaks using the line feed HTML entity: &#10;

<span title="First line&#10;Second line">Test</span>

This works in IE and is the correct according to the HTML5 spec for the title attribute.

Packaging answered 25/4, 2012 at 15:53 Comment(0)
U
18

As a contribution to the &#013; solution, we can also use &#009 for tabs if you ever need to do something like this.

<button title="My to-do list:&#013;&#009;-Item 2&#013;&#009;-Item 3&#013;&#009;-Item 4&#013;&#009;&#009;-Subitem 1">TEST</button>

Demo

enter image description here

Unaffected answered 20/9, 2016 at 11:57 Comment(0)
F
17

If you are using jQuery:

$(td).attr("title", "One \n Two \n Three");

will work.

It was tested in Internet Explorer 9: working.

Fieldsman answered 18/10, 2012 at 14:54 Comment(1)
Worked in MVC 3 Example: @Html.DropDownList("RegId", null, "Select Region", new { title = "Select a region from the drop-down menu, \nwhich is required to get a list of valid contract names", @class = "form-control", onchange = "getContractNames(this)", style = "width: 200px;" })Enshrine
H
17

On Chrome 79, &#13; does not work anymore.

I was successful with:

&#13;&#10;

This works in all major browsers.

Halflength answered 8/1, 2020 at 22:36 Comment(0)
A
10

&#13; will work on all majors browsers (IE included)

Adjoin answered 11/12, 2008 at 10:17 Comment(0)
M
8

&#xD; <----- This is the text needed to insert a carriage return.

Mimimimic answered 26/3, 2010 at 12:17 Comment(0)
H
8

Here's a demo: http://jsfiddle.net/rzea/vsp6840b/3/

HTML used:

<a href="#" title="First Line&#013;Second Line">Multiline Tooltip</a>
<br>
<br>
<a href="#" title="List:
  • List item here
  • Another list item here
  • Aaaand another list item, lol">Unordered list tooltip</a>
Haystack answered 3/11, 2014 at 15:10 Comment(0)
P
8

We had a requirement where we needed to test all of these, and here is what I wish to share:

document.getElementById("tooltip").setAttribute("title", "Tool\x0ATip\x0AOn\x0ANew\x0ALine")
<p title='Tool
Tip
On
New
Line'>Tooltip with <pre>
  new
  line</pre> Works in all browsers</p>
<hr/>

<p title="Tool&#13;Tip&#13;On&#13;New&#13;Line">Tooltip with <code>&amp;#13;</code> Not works Firefox browsers</p>
<hr/>

<p title='Tool&#10;Tip&#10;On&#10;New&#10;Line'>Tooltip with <code>&amp;#10;</code> Works in some browsers</p>
<hr/>

<p title='Tool&#x0aTip&#x0aOn&#x0aNew&#x0aLine'>Tooltip with <code>&amp;#xD;</code> May work in some browsers</p>
<hr/>

<p id='tooltip'>Tooltip with <code>document.getElementById("tooltip").setAttribute("title", "Tool\x0ATip\x0AOn\x0ANew\x0ALine")</code> May work in some browsers</p>
<hr/>


<p title="List:
  • List item here
  • Another list item here
  • Aaaand another list item, lol">Tooltip with <code>• </code>Unordered list tooltip</p>
<hr/>


<p title='Tool\nTip\nOn\nNew\nLine'>Tooltip with <code>\n</code> May not work in modern browsers</p>
<hr/>

<p title='Tool\tTip\tOn\tNew\tLine'>Tooltip with <code>\t</code> May not work in modern browsers</p>
<hr/>

<p title='Tool&#013;Tip&#013;On&#013;New&#013;Line'>Tooltip with <code>&amp;#013;</code> Works in most browsers</p>
<hr/>

Fiddle

Passus answered 23/9, 2016 at 10:7 Comment(0)
T
7

This &#013; should work if you just use a simple title attribute.

On Bootstrap popovers, just use data-html="true" and use HTML in the data-content attribute.

<div title="Hello &#013;World">hover here</div>
Three answered 17/4, 2018 at 10:42 Comment(0)
H
6

I don't believe it is. Firefox 2 trims long link titles anyway and they should really only be used to convey a small amount of help text. If you need more explanation text I would suggest that it belongs in a paragraph associated with the link. You could then add the tooltip JavaScript code to hide those paragraphs and show them as tooltips on hover. That's your best bet for getting it to work cross-browser IMO.

Hereat answered 11/12, 2008 at 10:23 Comment(0)
D
6

On Chrome 16, and possibly earlier versions, you can use "\n". As a side note, "\t" also works.

Disband answered 25/10, 2011 at 23:56 Comment(0)
D
6

Just use this:

<a title='Tool&#x0aTip&#x0aOn&#x0aNew&#x0aLine'>link with tip</a>

You can add new line on title by using this &#x0a.

Dissipate answered 27/3, 2014 at 10:2 Comment(0)
D
6

As for whom &#10; didn't work for, you have to style the element on which lines are visible in as: white-space: pre-line;

It is referenced from GuitarWorker's answer to Add line break within tooltips.

Doiron answered 4/7, 2016 at 13:23 Comment(1)
This style needs to be applied to what? The title? like a[title]?Passus
B
5

Just use JavaScript. Then it is compatible with most and older browsers.

Use the escape sequence \n for newline.

document.getElementById("ElementID").title = 'First Line text \n Second line text'
Badderlocks answered 20/6, 2016 at 16:58 Comment(2)
What version of Chrome? It works for me and I am using Chrome.Badderlocks
Actually I am using the lastest version of Chrome, however, since I was working on SVG Elements, it did not work, not it is OK.Aparicio
P
3

According to this article on the W3C website:

CDATA is a sequence of characters from the document character set and may include character entities. User agents should interpret attribute values as follows:

  • Replace character entities with characters,
  • Ignore line feeds,
  • Replace each carriage return or tab with a single space.

This means that (at least) CR and LF won't work inside the title attribute. I suggest that you use a tooltip plugin. Most of these plugins allow arbitrary HTML to be displayed as an element's tooltip.

Picklock answered 24/8, 2011 at 5:29 Comment(2)
Yeah, I know that it's not official. You are wrong, hwoever. It doesn't mean they won't be displayed. It means the W3C spec doesn't state how they should be displayed... . The point of the post wasn't to suggest they could be used to replace more functional plugins.... it was more of a case of during degradation can anythign else be used.Parol
@ip: I am wrong in that that updated w3c recommendations suggest that browsers split the content around the LF character. However browsers will implement this behavior eventually.Picklock
Q
3

Much nicer looking tooltips can be created manually and can include HTML formatting.

<!DOCTYPE html>
<html>
<style>
.tooltip {
    position: relative;
    display: inline-block;
    border-bottom: 1px dotted black;
}

.tooltip .tooltiptext {
    visibility: hidden;
    width: 120px;
    background-color: #555;
    color: #fff;
    text-align: center;
    border-radius: 6px;
    padding: 5px 0;
    position: absolute;
    z-index: 1;
    bottom: 125%;
    left: 50%;
    margin-left: -60px;
    opacity: 0;
    transition: opacity 0.3s;
}

.tooltip .tooltiptext::after {
    content: "";
    position: absolute;
    top: 100%;
    left: 50%;
    margin-left: -5px;
    border-width: 5px;
    border-style: solid;
    border-color: #555 transparent transparent transparent;
}

.tooltip:hover .tooltiptext {
    visibility: visible;
    opacity: 1;
}
</style>
<body style="text-align:center;">

<h2>Tooltip</h2>
<p>Move the mouse <a href="#" title="some text
more&#13;&#10;and then some">over</a> the text below:</p>

<div class="tooltip">Hover over me
<span class="tooltiptext">Tooltip text
some <b>more</b><br/>
<i>and</i> more</span>
</div>

<div class="tooltip">Each tooltip is independent
<span class="tooltiptext">Other tooltip text
some more<br/>
and more</span>
</div>

</body>
</html>

This is taken from the W3Schools post on this. Experiment with the above code here.

Quasar answered 20/6, 2018 at 15:48 Comment(0)
S
2

Razor syntax

In the case of ASP.NET MVC, you can just store the title as a variable, as \r\n, and it'll work.

@{
    var logTooltip = "Sunday\r\nMonday\r\netc.";
}

<h3 title="@logTooltip">Logs</h3>
Sejant answered 14/7, 2017 at 12:50 Comment(0)
W
2

There are multiple ways to do this. &#13 or &#010; depending on the browser. But the following example works for me on my Google Chrome and Firefox.

<a href="javascript:;" title="Tooltip Line One &#10;Tooltip Line Two &#10;Tooltip Line Three">Tooltip</a>
Wallenstein answered 15/2, 2022 at 13:13 Comment(0)
D
1

I was directed to this page while searching for a solution to display breakline in Bootstrap tooltips. Bootstrap tooltips are displayed when data-toggle="tooltip" is added to a HTML tag.

Finally, I found out that a data-html="true" should be added to the tag, and doing so the HTML inside your title will be rendered. Then use <br> to breakline. Checkout the samples below:

Before (not showing any breakline):

<i class="bi bi-x-circle" data-toggle="tooltip" data-placement="top" title="test1 <br> test2"></i>

After (showing breakline):

<i class="bi bi-x-circle" data-toggle="tooltip" data-html="true" data-placement="top" title="test1 <br> test2"></i>

- Tip for Laravel and Blade programmers: You can convert \n to <br> with nl2br("string") function.

- The solutions above have been tested in Google Chrome 98.

Downright answered 26/2, 2022 at 8:33 Comment(0)
T
1

Using \x0A worked for me to get newline in title/tooltip on mouse hover.

FILENAME: news.php

<span onmouseover="getInfo(this,'06-APR-22')" data-html="true">Day</span>

FILENAME: news.php

<script>
function getInfo(x, dateVal) {       
      var html = $.ajax({
            type: "POST",
            url: "report/get-info.php",
            data: {             
                'dateVal': dateVal,
            },              
            success: function(response) {
                x.setAttribute('title', response );
            }
        });
}
</script>

FILENAME: get-info.php

<?php
$tmp  = $_POST['dateVal'];   
$dateVal = date("m/d/Y", strtotime($tmp));

$querySelectCode = "SELECT INFO_ID, INFO_NAME FROM INFORMATION
                    WHERE TRUNC(DP.DATE_TIME) = TO_DATE('$dateVal','MM/DD/YYYY') ";    
$stmtSelectcode = oci_parse($dbConn, $querySelectCode);
if ( ! oci_execute($stmtSelectcode) ){
    $err = oci_error($stmtSelectcode);
    trigger_error('Query failed: ' . $err['message'], E_USER_ERROR);
}
$INFO_ID = array();
while(oci_fetch($stmtSelectcode)){
    $INFO_ID[]   =  oci_result($stmtSelectcode, 'INFO_ID');
    $INFO_NAME[]     =  oci_result($stmtSelectcode, 'INFO_NAME');        
}
for($index=0 ; $index < count($INFO_ID) ; $index++)
{
    echo   $INFO_NAME[$index ] . "\x0A" ;        
}
?>
Tobolsk answered 11/4, 2022 at 2:45 Comment(0)
F
0

It is a hack, but it works - (tested on Google Chrome and mobile)

Just add non-breaking space, &nbsp;, till it breaks - you might have to limit the tooltip size depending on the amount of content but for small text messages this works:

&nbsp;&nbsp; etc

I tried everything above and this is the only thing that worked for me.

Focalize answered 28/4, 2017 at 19:1 Comment(0)
L
0

I have tried with &#10; to display the title text on a new line and it’s working like a charm.

Lymanlymann answered 6/11, 2019 at 6:9 Comment(0)
M
0

I am on Firefox 68.7.0 ESR and the &#013; doesn't work. Breaking the lines via <CR> did work, so I am going with that since it simple and forward.

I.e.,

<option title="Constraint PSC/SCS/Activity
Definition Constraint Checker
Database Start Notifier">CnCk
Millihenry answered 30/4, 2020 at 22:43 Comment(0)
G
0

The "just press enter" solution didn't work here, so the good old vanilla JavaScript seems a pretty efficient and clean way.

function customTitle(event, textHeader, text){
    let eventOrigin = event.target || event.srcElement;
    eventOrigin.title = textHeader + '\n\n' + text;
}

And on element onmouseover:

onmouseover="customTitle(event, 'Some Caput', 'Some more or less complete description');"

Voilà! It works on Google Chrome and Firefox (which does not exclude others; I just didn't check it).

Gasometry answered 19/3, 2021 at 1:31 Comment(0)
I
0

If you are trying to do this in a React project where you are rendering in the below format:

title={`First line of text ${varOne} &#13; Second line of text ${varTwo} &#13; Third line of text ${varThree}`}

Then &#13;, &#10; and similar solutions don't work. They will actually render as text.

Instead actually creating the text as required is a better option. An example for better understanding:

title={`First line of text ${varOne}
Second line of text ${varTwo}
Third line of text ${varThree}`}

Make sure to remove tabs/space indentations before "Second line of text" and "Third line of text". Otherwise they will render as well.

It was tested on Google Chrome 96 and Firefox 95.0b12 (Developer Edition, because, well why not). It should work on most modern browsers as well.

Impudence answered 6/12, 2021 at 9:55 Comment(0)
C
0

Just sharing small bug I saw:

In Chrome 103 with this html:

<!DOCTYPE html>
<html>
<body>
  <select title="Line 1 :&#13;&#13;Line 2">
    <option value="0">test</option>
  </select>
</body>
</html>

I see this:

tittle chrome

On screenshot - two weird characters after "Line 1 :" text, first line.

Fix to this: (I have no idea which is correct/valid but all of them works as fix (in Chrome 103))

  • Adding space(character) after Line 1 : before first &#13; fix it
  • Changing first &#13; to &#10; full line title="Line 1 :&#10;&#13;Line 2"
  • Adding &nbsp; after Line 1 : before first &#13;
  • Also changing &#13; to "Carriage Return symbol" will fix it
Chasten answered 25/6, 2022 at 12:12 Comment(0)
P
-2

Use data-html="true" and apply <br>.

Percentage answered 5/9, 2018 at 12:3 Comment(1)
This isn't part of the spec. Must be some random tooltip pluginLotetgaronne

© 2022 - 2024 — McMap. All rights reserved.