Как изменить ширину и высоту всплывающих подсказок Twitter Bootstrap?

163

Я создал всплывающую подсказку с помощью Twitter Bootstrap.

Подсказка отображается с тремя строками. Однако я хотел бы отобразить всплывающую подсказку только с одной строкой.

Как изменить ширину всплывающей подсказки? Это относится к Twitter Bootstrap или к подсказкам?

onejigtwojig
источник
1
Можете ли вы принять ответ? Это поможет и другим.
MERose

Ответы:

211

Просто переопределите bootstrap.css

Значение по умолчанию в BS2: max-width: 200px; Таким образом, вы можете увеличить его с тем, что соответствует вашим потребностям.

.tooltip-inner {
    max-width: 350px;
    /* If max-width does not work, try using width instead */
    width: 350px; 
}
Валентин Деспа
источник
13
max-widthне работает для меня, но widthработает. Протестировано на Chrome и IE9. Любая подсказка?
Росди Касим
2
В моем случае настройка max-width и width работала хорошо, поскольку .tooltip-inner был меньше, чем max-width (200px), хотя в нем было много текстов.
Нобу
Просто добавьте! Важным, вот так, он будет работать с максимальной шириной: 350 пикселей! Важно;
Сохаил Анвар
1
Для тех, кто все еще имеет проблемы max-widthи не видит ответ @ knobli ниже, пожалуйста, используйте data-container="body"в своем HTML-элементе.
kips15
Модификация CSS должна быть последним средством. Jquery предоставляет функциональность для изменения внешнего вида всплывающей подсказки, так почему бы не использовать ее?
E10
42

На BS3

.tooltip-inner {
    min-width: 150px; /* the minimum width */
}
Shina
источник
28

Я понимаю, что это очень старый вопрос, но если я попаду сюда, то и другие. Итак, я решил, что взвешиваю.

Если вы хотите, чтобы всплывающая подсказка реагировала только на одну строку, независимо от объема добавляемого в нее содержимого, ширина должна быть гибкой. Однако Bootstrap инициирует всплывающую подсказку на ширину, поэтому вам нужно как минимум объявить, какой будет эта ширина, и сделать ее гибкой, начиная с этого размера. Вот что я рекомендую:

.tooltip-inner {
    min-width: 100px;
    max-width: 100%; 
}

min-widthОбъявляет начальный размер. В отличие от максимальной ширины, как и некоторые другие, она объявляет ширину остановки . Согласно вашему вопросу, вы не должны объявлять окончательную ширину, иначе содержание всплывающей подсказки в конечном итоге будет перенесено в этот момент. Вместо этого вы используете бесконечную ширину или гибкую ширину. max-width: 100%;будет гарантировать, что после всплывающей подсказки шириной 100 пикселей она будет расти и адаптироваться к вашему контенту независимо от того, сколько у вас в нем контента.

Держите в уме Подсказки не предназначены для перевозки большого количества контента. Это может выглядеть странно, если у вас есть длинная строка по всему экрану. И это определенно повлияет на ваши отзывчивые взгляды, особенно на смартфон (ширина 320 пикселей).

Я бы порекомендовал два решения для этого:

  1. Держите содержание всплывающей подсказки минимальным, чтобы его ширина не превышала 320 пикселей. И даже если вы сделаете это, вы должны помнить, если у вас есть всплывающая подсказка в правой части экрана и сdata-placement:right , содержимое всплывающей подсказки не будет отображаться на смартфонах (поэтому изначально программа начальной загрузки разработала их так, чтобы они реагировали на ее содержимое и позволяли ей заворачивать)
  2. Если вы склонны к использованию этой однострочной концепции всплывающей подсказки, то закройте свои шесть, используя @mediaзапрос, чтобы сбросить всплывающую подсказку в соответствии с видом смартфона. Как это:

Моя демонстрация ЗДЕСЬ демонстрирует гибкость и отзывчивость подсказок в зависимости от размера контента и размера дисплея устройства.

@media (max-width: 320px) {
    .tooltip-inner {
         min-width: initial;
         width: 320px;
    }
}
LOTUSMS
источник
23

Вы должны перезаписать свойства, используя свой собственный CSS. вот так:

div.tooltip-inner {
    text-align: center;
    -webkit-border-radius: 0px;
    -moz-border-radius: 0px;
    border-radius: 0px;
    margin-bottom: 6px;
    background-color: #505050;
    font-size: 14px;
}

селектор выбирает div, в котором находится всплывающая подсказка (подсказка добавляется в javascript и обычно не принадлежит ни одному контейнеру.

nglinh
источник
2
Просто любопытно, есть ли какая-то конкретная причина, по которой вы определили переопределяющий стиль как 'div [class = "tooltip-inner"] ", а не как" div.tooltip-inner "?
slawek
6
Я написал этот код, когда я был совсем
новичком
21

Определите максимальную ширину с "важным!" и использовать data-container = "body"

Файл CSS

.tooltip-inner {
    max-width: 500px !important;
}

HTML-тег

<a data-container="body" title="Looooooooooooooooooooooooooooooooooooooong Message" href="#" class="tooltiplink" data-toggle="tooltip" data-placement="bottom" data-html="true"><i class="glyphicon glyphicon-info-sign"></i></a>

JS скрипт

$('.tooltiplink').tooltip();
knobli
источник
18
data-container="body"один сделал это для меня. Спасибо!
Ижаки,
17

Чтобы решить проблему ширины, используйте следующий код.

$('input[rel="txtTooltip"]').tooltip({
    container: 'body'
});

пример: http://eureka.ykyuen.info/2014/10/08/bootstrap-3-tooltip-width/

戈 晓伟
источник
4
Лучший ответ на мой взгляд, потому что он не включает в себя изменение начальной загрузки CSS.
Тим Скарборо
1
Это лучший ответ для меня, но это не отвечает на вопрос
Бенгальский
Это лучшее решение, я думаю. Он использует конфигурацию всплывающей подсказки вместо переопределения начальной загрузки CSS.
Сезар Леон
Это самый лучший ответ от FAAAR. Jquery предоставляет функциональность для выполнения всевозможных действий в подсказке, так почему бы не использовать ее? Модификация CSS должна быть последним средством.
E10
10

Другое решение; создайте новый класс (например, всплывающую подсказку) в CSS:

.tooltip-wide + .tooltip > .tooltip-inner {
     max-width: 100%;
}

Используйте этот класс для элементов, где вы хотите широкие всплывающие подсказки:

<div class="tooltip-wide" data-toggle="tooltip" title="I am a long tooltip">Long tooltip</div>

Всплывающая подсказка Bootstrap генерирует разметку под элементом, содержащим всплывающую подсказку, поэтому HTML-код выглядит примерно так после генерации разметки:

<div class="tooltip-wide" data-toggle="tooltip" title="I am a long tooltip">Long tooltip</div>
<div class="tooltip" role="tooltip">
    <div class="tooltip-arrow"></div>
    <div class="tooltip-inner">I am a long tooltip</div>
</div>

CSS использует это для доступа к смежному элементу (+) к .tooltip-wide, а оттуда переходит к .tooltip-inner перед применением атрибута max-width. Это повлияет только на элементы, использующие класс .tooltip-wide, все остальные подсказки останутся неизменными.

Являются
источник
2
Отличное решение, потому что вы можете выбрать, какие подсказки вы хотите использовать.
Уилл Шенбергер
1
В начальной загрузке 4 подсказка добавляется к телу. Тем не менее, с data-template="<div class='tooltip' role='tooltip'><div class='arrow'></div><div class='tooltip-inner tooltip-wide'></div></div>"и .tooltip-wide { max-width: 100%; min-width: 80%; }можно заставить его работать.
Маттео Ферла
Это первый реальный пример использования шаблонов с подсказками BS4. Хорошая демонстрация и простота добавления пользовательских классов.
Klewis
8

Вы можете редактировать класс .tooltip-inner css в bootstrap.css. Максимальная ширина по умолчанию составляет 200 пикселей. Вы можете изменить максимальную ширину до желаемого размера.

onejigtwojig
источник
Это здорово, чтобы отрегулировать ширину! Спасибо! Это вместе с ответом выше является полным решением!
ATSiem
6
Как сказал @nglinh: «Это не очень рекомендуется». Вы не хотите отслеживать все ваши хаки при обновлении начальной загрузки.
Валентин Деспа
7

после некоторых экспериментов это сработало лучше для меня:

.tooltip-inner {
    max-width: 350px; /* set this to your maximum fitting width */
    width: inherit; /* will take up least amount of space */ 
}
Xerus
источник
6

Просто max-widthизмените значение по умолчанию на то, что соответствует вашим потребностям.

.tooltip-inner {
  max-width: 350px;
}

Когда максимальная ширина не работает (вариант 1)

Если max-width не работает, вы можете использовать вместо этого заданную ширину. Это нормально, но ваши всплывающие подсказки больше не будут изменять размер, чтобы соответствовать тексту. Если вам это не нравится, перейдите к варианту 2.

.tooltip-inner {
  width: 350px;
}

Правильно иметь дело с небольшими контейнерами (вариант 2)

Поскольку Bootstrap добавляет всплывающую подсказку в качестве родственного элемента цели, она ограничена содержащим элементом. Если содержащий элемент меньше, чем ваш max-width, то max-widthне будет работать.

Итак, когда max-widthне работает, вам просто нужно изменить container:

<div class="some-small-element">
  <a data-container="body" href="#" title="Your boxed-in tooltip text">
</div>

Совет от профессионала: контейнер может быть любым селектором, что хорошо, когда вы хотите переопределить стили только в нескольких подсказках.

Энсон
источник
4

Установите класс для основной подсказки div и для внутренней подсказки

div.tooltip {
    width: 270px;
}

div.tooltip-inner {
    max-width: 280px;
}
юниор
источник
Разве это не должно быть минимальной ширины?
Риппо
4

Пожалуйста, обратитесь ниже пост. Ответ cmcculloh работал для меня. https://stackoverflow.com/posts/31683500/edit

Как указано в документации , самый простой способ убедиться, что подсказка не переносится, - это использовать

.tooltip-inner {
    max-width: none;
    white-space: nowrap;
}

При этом вам не нужно беспокоиться о значениях измерений или о чем-либо подобном. Основная проблема в том, что если у вас есть очень длинная строка текста, она просто исчезнет с экрана (как вы можете видеть в примере JSBin ).

Раджасекар Калисамы
источник
2

BS3:

.tooltip-inner { width:400px; max-width: 400px; }
Тиль Гесс
источник
2

На Bootstrap 4, и если вы не хотите изменять ширину всех всплывающих подсказок, вы можете использовать определенный шаблон для нужной подсказки:

<a href="https://stackoverflow.com/link" class="btn btn-info"
   data-toggle="tooltip"
   data-placement="bottom"
   data-template="<div class='tooltip' role='tooltip'><div class='arrow'></div><div class='tooltip-inner' style='max-width: 400px;'></div></div>"
   title="This is a long message displayed on 400px width tooltip !"
>
    My button label
</a>
Винсент Деко
источник
1

Попробуйте этот код,

.tooltip-inner {
     max-width:350px !important;
}
Рагас ламир
источник
1

У меня была та же самая проблема, однако все популярные ответы - измениться .tooltip-inner{width}для моей задачи не смогли сделать работу правильно. Что касается других (то есть более коротких) всплывающих подсказок, то фиксированная ширина была слишком большой. Мне было лень писать отдельные html-шаблоны / классы для zilions всплывающих подсказок, поэтому я просто заменил все пробелы между словами &nbsp;в каждой текстовой строке.

Игнас
источник
1

Мне нужно было отрегулировать ширину некоторых подсказок. Но не общая обстановка. Итак, я закончил делать это:

CSS

.large-tooltip .tooltip-inner {
    max-width: 300px;
}
@media screen and (max-width: 300px) {
  .large-tooltip .tooltip-inner {
    max-width: 100%;
  }
}

JQuery

$('[data-toggle="tooltip"]')
    .tooltip()
    .on('shown.bs.tooltip', function(e) {
        /**
         * If the item that triggered the event has class 'large-tooltip'
         * then also add it to the currently open tooltip
         */
        if ($(this).hasClass('large-tooltip')) {
            $('body').find('.tooltip[role="tooltip"].show').addClass('large-tooltip');
        }
    });

Html

<img src="/theimage.jpg" class="large-tooltip" data-toggle="tooltip" data-html="true" title="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." />
Julesezaar
источник
0

Установка максимальной ширины класса tooltip-inner у меня не сработала , я использую bootstrap 3.2

Некоторые, как установка максимальной ширины работает только если вы устанавливаете ширину родительского класса (.tooltip).

Но тогда все всплывающие подсказки будут соответствовать указанному вами размеру. Итак, вот мое решение:

добавить ширину к родительскому классу:

.tooltip {
  width:400px;
}

Затем вы добавляете max-width и меняете отображение на inline-block, чтобы оно не занимало все пространство

.tooltip-inner {
  max-width: @tooltip-max-width;
  display:inline-block;
}
Даниил
источник
Это создает хаос с выравниванием всплывающей подсказки.
Бен
0

Мой, где все переменные длины и установленная максимальная ширина не будут работать для меня, поэтому установка моего CSS на 100% работает как шарм.

.tooltip-inner {
    max-width: 100%;
}
Shaun
источник
0

С Bootstrap 4 я использую

.tooltip-inner {
    margin-left: 50%;
    max-width: 50%;
    width: 50%;
    min-width: 300px;
}
Wishmaster
источник
-1

в начальной загрузке 3.0.3 вы можете сделать это, изменив класс popover

.popover {
    min-width: 200px;
    max-width: 400px;
}
Ekim
источник
3
Класс .popover не применяется к подсказкам.
Адриан Тайсселинг