Note:
Depending on you Bootstrap version (prior to 3.3 or not), you may need a different answer.
Pay attention to the notes.
When I activate tooltips (hover over the cell) or popovers in this code, size of table is increasing. How can I avoid this?
Here emptyRow - function to generate tr with 100
<html>
<head>
<title></title>
<script type="text/javascript" language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<link type="text/css" rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">
<script type="text/javascript" language="javascript" src="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.2.1/bootstrap.min.js"></script>
<style>
#matrix td {
width: 10px;
height: 10px;
border: 1px solid gray;
padding: 0px;
}
</style>
<script>
function emptyRow() {
str = '<tr>'
for (j = 0; j < 100; j++) {
str += '<td rel="tooltip" data-original-title="text"></td>'
}
str += '</tr>'
return str
}
$(document).ready(function () {
$("#matrix tr:last").after(emptyRow())
$("[rel=tooltip]").tooltip();
});
</script>
</head>
<body style="margin-top: 40px;">
<table id="matrix">
<tr>
</tr>
</table>
</body>
</html>
thank in advice!
If you are using datatable for table then it will be use full
If you want to avoid to break the table when applying a tooltip to a
<td>
element, you could use the following code:You html could look like this:
This even works with dynamically loaded content. For example in use with datatables
Simple Solution
In the
.tooltip()
call, set thecontainer
option tobody
:Alternatively you can do the same by using the
data-container
attribute:Why does this work?
This solves the problem because by default, the tooltip has
display: block
and the element is inserted in the place it was called from. Due to thedisplay: block
, it affects the page flow in some cases, i.e pushing other elements down.By setting the container to the body element, the tooltip is appended to the body instead of where it was called from, so it doesn't affect other elements because there is nothing to "push down".
If you're using bootstrap directives for AngularJS, use tooltip-append-to-body attribute.
You need to create an element inside a
td
and apply a tooltip to it, like this, because a tooltip itself is a div, and when it is placed after atd
element it brakes table layout.This problem was introduced with the latest release of Bootstrap. There are ongoing discussions about fixes on GitHub here. Hopefully the next version includes the fixed files.
I would like to add some precision to the accepted answer, I decided to use the answer format for readibility.
Right now, wrapping your tooltip in a div is the solution, but it will need some modifications if you want your whole
<td>
to show the tooltip (because of Bootstrap CSS). A simple way to do it is to transfert<td>
's padding to wrapper :HTML
JS (jQuery)