bootstrap “підказка” та “popover” додають додатковий розмір у таблиці


82

Примітка:
Залежно від вашої версії Bootstrap (до 3.3 чи ні), вам може знадобитися інша відповідь.
Зверніть увагу на примітки.

Коли я активую підказки (наведіть курсор на клітинку) або popovers у цьому коді, розмір таблиці збільшується. Як я можу цього уникнути?

Тут emptyRow - функція для створення tr зі 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>

дякую за пораду!


Який саме додатковий розмір ви маєте на увазі? js генерує 100 комірок в один рядок під попередньо визначеним порожнім рядком. Я створив скрипку
Devellar

@Devellar, розмір збільшується під час активації підказки (наведіть курсор на клітинку)
mishka

@MikhaillErofeev У мене теж та сама проблема, якщо ви її вирішите, будь ласка, скажіть мені
Рнк Джангір

@RonakJangir, див. Відповідь нижче
mishka

@MikhaillErofeev Я просто хочу додати підказку на td, тому ця відповідь для мене не корисна. Щодо
Rnk Jangir

Відповіді:


90

Примітка: Рішення для Bootstrap 3.0 ~ 3.2

Вам потрібно створити елемент всередині tdі застосувати підказку до нього, як це , тому що сам по собі підказка є ДІВ, і коли він буде поміщений після tdелемента його розташування гальма таблиці.

Ця проблема з’явилася в останньому випуску Bootstrap. Тут тривають дискусії щодо виправлень на GitHub . Сподіваємось, наступна версія включає виправлені файли.


57
З посилання GitHub: Рішення, починаючи з v2.3.x, полягає в тому, щоб встановити опцію контейнера підказки / поповеру до тіла. Наприклад: $ (...). Tooltip ({container: 'body'}); Або за допомогою атрибута data- * у HTML: data-container = "body"
Доменік

5
@Domenic Це повинна бути відповідь, а потім позначена як правильне рішення. Просто працює.
Тімм

1
будь ласка, додайте це як відповідь, набагато простіше для майбутніх розробників
cmario

90

Примітка: Рішення для Bootstrap 3.3+

Просте рішення

Під час .tooltip()дзвінка встановіть для containerпараметра body:

$(function () {
  $('[data-toggle="tooltip"]').tooltip({
    container : 'body'
  });
});

Ви також можете зробити те ж саме, використовуючи data-containerатрибут:

<p data-toggle="tooltip" data-placement="left" data-container="body" title="hi">some text</p>

Чому це працює?

Це вирішує проблему, оскільки за замовчуванням підказка має display: blockі елемент вставляється туди, звідки його викликали. Внаслідокdisplay: block це в деяких випадках це впливає на потік сторінки, тобто штовхає інші елементи вниз.

Встановивши контейнер для елемента body, підказка додається до тіла замість того, звідки його викликали, тому це не впливає на інші елементи, оскільки немає чого "натискати".


3
Дякую! Працював ідеально.
Емі Паттерсон

Дякую!! Параметр data-toggle = "tooltip" спрацював, але не контейнер: опція 'body' ..
Р. Пн

Велике спасибі, це врятувало мої години :)
Viky293

1
Це не працює, якщо ваша таблиця знаходиться в модальному режимі, оскільки підказка з’являється десь на сторінці (можливо, я все ще не знайшов її). Caveat Emptor. Прийнята відповідь все одно працює, просто оберніть вміст td у div та застосуйте до нього підказку.
Hippyjim

17

Примітка: Рішення для Bootstrap 3.3+

Якщо ви хочете уникнути розбиття таблиці при застосуванні підказки до <td>елемента, ви можете використати такий код:

    $(function () {
        $("body").tooltip({
            selector: '[data-toggle="tooltip"]',
            container: 'body'
        });
    })

Ви html може виглядати так:

<td data-toggle="tooltip" title="Your tooltip data">
    Table Cell Content
</td>

Це працює навіть із динамічно завантаженим вмістом. Наприклад, у використанні з таблицями даних


1
Дякую! Нарешті я можу використовувати підказку з таблицями даних
sebasira

9

Я хотів би додати певної точності прийнятій відповіді, я вирішив використовувати формат відповіді для читання.

Примітка: Рішення для Bootstrap 3.0 ~ 3.2

Зараз вирішення проблеми полягає в обгортанні підказки у div , але це потребує деяких модифікацій, якщо ви хочете, щоб весь <td>підказка відображалася (через CSS Bootstrap). Простий спосіб зробити це - перевести<td> прокладку в обгортку:

HTML

<table class="table table-hover table-bordered table-striped">
    <tr>
        <td>
            <div class="show-tooltip" title="Tooltip content">Cell content</div>
        </td>
    </tr>
</table>

JS (jQuery)

$('.show-tooltip').each(function(e) {
    var p = $(this).parent();
    if(p.is('td')) {
        /* if your tooltip is on a <td>, transfer <td>'s padding to wrapper */
        $(this).css('padding', p.css('padding'));
        p.css('padding', '0 0');
    }
    $(this).tooltip({
        toggle: 'toolip',
        placement: 'bottom'
    });
});

якщо ви хочете, щоб весь <td> показав підказку, просто застосуйте підказку безпосередньо до елемента td
shock_gone_wild

@shock_gone_wild Справа не в цьому. Застосування підказки до будь-якого <td>елемента призведе до порушення цілої таблиці, як зазначено у вихідному питанні, та кожної відповіді. Ось чому ми всі вирішили додати до нього ще один елемент. Тим не менш, я не знаю новинок Bootstrap 4, і ця помилка, можливо, була виправлена.
zessx

ні, це не призведе до розбиття таблиці, якщо ви додасте контейнер: 'body'. Дивіться мою відповідь тут.stackoverflow.com/a/34882401/3927116
shock_gone_wild

1
containerБуло введено в 2014 році, через 2 роки після цього питання. Дякуємо за ваш коментар, я внесу кілька редагувань, щоб висвітлити цю опцію та уточнити, що ця помилка не пов'язана з останніми версіями Bootstrap.
zessx

1
я щойно додав це, тому що високо оцінена відповідь вже використовує опцію контейнера. І для майбутніх читачів ця інформація може бути дуже корисною;)
shock_gone_wild

1

Ви повинні ініціалізувати Tooltip всередині DataTable функції fnDrawCallback

"fnDrawCallback": function (data, type, full, meta) { $('[data-toggle="tooltip"]').tooltip({ placement: 'right', title: 'heyo', container: 'body', html: true }); },

І визначте стовпець, як показано нижче

 {
      targets: 2,
      'render': function (data, type, full, meta) {
       var htmlBuilder = "<b>" + data + "</b><hr/><p>Description: <br/>" + full["longDescrioption"] + "</p>";
      return "<a href='#' class='Name'>" + (data.length > 50 ? data.substr(0, 50) + '…' : data) + "</a>" +
      "<sup data-toggle='tooltip' data-original-title=" + htmlBuilder + ">"+
      "<i class='ic-open-in-new ic' style='font-size:12px;margintop:-3px;'></i></sup>";
    }
 },

Голос за частину fnDrawCallback і є єдиним місцем, де ініціалізація підказки BS із форматуванням HTML працює з таблицею даних, у якій увімкнено підкачку.
Дрю

1

Якщо ви використовуєте таблицю даних для таблиці, вона буде використана повною

$('#TableId').DataTable({
                "drawCallback": function (settings) {
                    debugger;
                    $('[data-toggle="tooltip"]').tooltip({
                        container: 'body'
                    });

                }
            });

0

Якщо ви використовуєте директиви завантаження для AngularJS, використовуйте атрибут tooltip-append-to-body.

<td ng-repeat="column in row.columns" uib-tooltip="{{ ctrl.viewModel.leanings.tooltip }}" tooltip-append-to-body="true"></td>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.