Всплывающая подсказка представляет собой короткое текстовое сообщение с пояснением, возникающие в результате наведения курсора мышки на элемент страницы. Далее рассмотрим как сделать всплывающую подсказку в html.

Стандартный способ

За показ подсказки отвечает {title}. Этот атрибут можно использовать для показа подсказки к разным объектам, но чаще всего его используют в качестве поясняющего текста к изображениям.

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

В качестве подсказки может использоваться как одно слово или словосочетание, так и сразу несколько предложений. Обычно всплывающая html подсказка выглядит следующим образом:

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

Стандартная всплывающая html подсказка при наведении на текст имеет один существенный недостаток – отсутствие инструментов для стилизации. Чтобы решить эту проблему необходимо использовать другие способы создания всплывающей подсказки.

Способ на чистом css

Для красивого вывода подсказки обычно используется именно этот способ. Он предусматривает заключение картинки в контейнер с идентификатором. Благодаря этому, обеспечивается возможность обращения к данному контейнеру в стилях:

В вышеуказанном примере единственным непонятным моментом может быть. Этот атрибут не выполняет никакой функции. Однако его значение используется в js и css. Таким образом, и этот атрибут может быть полезен. Но сначала необходимо описать стили блок-контейнера.

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

#pdskzk{ position: relative; display: inline-block; }

Блочно-строчное отображение не помешает родительскому блоку (в том числе и контейнеру с со всплывающей подсказкой) растянуться на всю ширину окна. Теперь осталось создать поясняющий текст.

Всплывающие подсказки в css проще всего делать посредством псевдоэлементов:

#pdskzk:hover:after { content: attr(data-name); position: absolute; left: 0; bottom: 0; background: rgba(5,13,156,.55); color: #fff; text-align: center; font-family: cursive; font-size: 14px; padding: 3px 0; width: 100%; }

Несмотря на обилие кода, он очень прост для понимания. Селектор #pdskzk:hover:after необходим для создания псевдоэлемента after в тот момент, когда пользователь ставит курсор на контейнер с изображением. Свойство content: attr(data-name) предназначено для указания текстового значения. Оно соответствует свойству, которое записано в атрибуте data-name у контейнера-обертки изображения.

После этого остается позиционировать объект абсолютно и задать ему необходимые параметры:

  • Цвет;
  • Шрифт и т.д.

Таким образом, получается такая всплывающая подсказка css при наведении на картинку:


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

Плавное появление

Тем не менее, возможности css позволяют использовать плавное появление подсказки. В этом случае не используются псевдоэлементы. Это обусловлено тем, что именно они не позволяют применить опцию плавного появления. Пример реализации плавного появления всплывающей подсказки на css представлен ниже:

Текст подсказки

Стоит заметить, что css-код практически не изменился:

#pdskzk2{ position: relative; display: inline-block; } #pdskzk2 .text { transition: all 0.6s; opacity: 0; position: absolute; left: 0; bottom: 0; background: rgba(5,13,156,.55); color: #fff; text-align: center; font-family: cursive; font-size: 14px; padding: 3px 0; width: 100%; transform: scale(0); } #pdskzk2:hover .text{ opacity: 1; }

Ключевое изменение касается свойства content, которое не используется в этом примере. Оно потеряло актуальность ввиду того, что поддерживается только псевдоэлементами. Еще одно изменение – появление свойства transition. Именно это свойство отвечает за создание плавных переходов. Внимательный читатель наверняка обратил внимание на значение opacity: 0. Оно делает контейнер с подсказкой прозрачным.

Теперь при наведении на родительский блок достаточно вернуть стандартную прозрачность контейнеру с подсказкой. После этого можно проверить работу кода и убедиться в том, что поясняющий текст возникает на экране плавно.

CSS3 позволяет скрыть элемент и другими способами. Например, может использоваться трансформация. Этот метод предусматривает замену полной прозрачности на свойство transform: scale(0). Также необходимо уменьшить размер контейнера до 0. Таким образом, его не будет видно на странице. При наведении на контейнер с изображением нужно указать свойство transform: scale(1). Этот способ позволяет сделать появление всплывающего текстового сообщения не только плавным, но и эффектным.

Другие способы

Всплывающие текстовые сообщения можно создавать и посредством jQuery. Эта библиотека может использоваться как для написания своего кода, так и для создания плагина для всплывающих подсказок на jQuery, который реализует необходимый эффект.

Доброго времени суток, любознательные подписчики и гости блога. Сегодня мы разберем с вами полезный раздел в прототипно-ориентированном сценарном языке, а именно событие при наведении мыши JavaScript.

Я хочу, чтобы вы хорошенько разобрались в таких событиях, как click, mouseup, mousedown, mouseover и других, поняли разницу между ними и научились их использовать для решения поставленных задач. Конечно же после каждого ключевого теоретического материала вы сможете найти программную реализацию примеров. Ну что ж, приступим!

Все сведенья о событиях мышки

Для мыши существует несколько событий, которые полностью охватывают всевозможные действия курсора на странице . Среди них есть те, которые срабатывают при нажатии на объект, наведении на него или движении указателя по открытому окну. Их все можно поделить на две группы: простые и комплексные (составные) события.

Начнем с простого

Для начала познакомимся с простыми событиями. Их всего пять. Для удобства я поместил описание каждого инструмента в таблицу, прикрепленную ниже.

Наименование Описание
mousedown Названный event вызывается, когда одна из кнопок мышки нажата, но пока еще не отпущена.
mouseup А этот срабатывает уже при отпускании зажатой ранее кнопочки.
mouseover Вызывается при наведении курсора на обрабатываемый объект.
mouseout Обрабатывает действие выхода курсора из области элемента.
mousemove Любое движение указателя над определенной областью вызывает текущее событие.

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

Наведите на изображение курсор мыши и оно изменится. А теперь отведите его в сторону и понаблюдайте за изменениями function ChangeOver(x) { x.src= "http://storage2.vsemayki.ru/images/0/0/514/514012/previews/sign_front_white_500.jpg"; }; function ChangeOut(x) { x.src= "http://storage2.vsemayki.ru/images/0/0/514/514102/previews/sign_front_white_500.jpg"; }

Пришло время группировки

Теперь давайте перейдем к комплексным видам. Каждый из таких событий включает в себя несколько простых. При этом все составные части комплексного события не срабатывают одновременно, а выстраиваются в очередь. Поэтому вы иногда могли наблюдать такую ситуацию, что при быстром кликанье по, к примеру, пунктам меню веб-сайта нажатия иногда не срабатывают.

Почему же так? Ответ достаточно прост.

Обработка событий происходит с какой-то максимально допустимой скоростью. И при этом не стоит забывать, что события обрабатываются по очереди. А значит при слишком быстром нажатии на разные элементы цепочка обработки может не выполниться полностью.

Итак, ниже перечислены составные события.

Как вы уже поняли, комплексные события несколько упрощают жизнь разработчиков, включая в себя сразу набор необходимых простых event-ов. Вследствие этого на сегодняшний день никто не может представить обычной обработки кнопок или других элементов без того же click .

Для практического ознакомления с функционированием выше перечисленных событий я модифицировал предыдущее приложение. Проанализируйте результат моей работы.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Пример наведения указателя на элемент страницы

Пример наведения указателя на элемент страницы Нажмите на меня один раз и смайл улыбнется! А теперь нажмите на меня двойным кликом и смайл начнет двигаться! Если хочешь вернуться к начальному состоянию, то нажми на меня правой кнопкой! function Smile() { document.getElementById("pic").src= "http://storage2.vsemayki.ru/images/0/0/514/514012/previews/sign_front_white_500.jpg"; }; function Cry() { document.getElementById("pic").src= "http://storage2.vsemayki.ru/images/0/0/514/514102/previews/sign_front_white_500.jpg"; }; function Move() { document.getElementById("pic").src= "https://otvet.imgsmail.ru/download/197747824_e708b2123d2b2d745d271f15cb144dcc_800.gif"; };

Как видите, все очень просто. Данные элементы легко вызывать в коде и привязывать их к определенным действиям.

Спасибо ув-мым @Blacknife, @Geyan и @dimaua, что потратили своё время на ответ к данному вопросу. Возможно, их решения не уступают в качестве, однако решил остановить свой выбор на JQuery-плагине Tooltipster . Поставленную в вопросе задачу он решает.

Мини-обзор
  • Достоинства - широкие возможности по кастомизации, см. сайт плагина . Кроссбраузерный, не тормозит показ страницы.
  • Недостаток - на этом же офсайте напрочь отсутствуют примеры вида Код - Результат, поэтому придётся убить немного времени на освоение. Впрочем, ряд демо приведён в одной статье на русском .
Код примера

Tooltipster не выбрасывает тултипы за окно, не только когда они простейшие. В демонстрируемом примере появляются отличные друг от друга всплывающие подсказки при наведении курсора и клике на икону с персонализированным оформлением и установлено время, в течение которого будет виден тултип - http://codepen.io/Kristinita/pen/RGzVmK .

$(document).ready(function() { var $SashaElement = $(".SashaTooltip"); $SashaElement.tooltipster({ content: "Может, это ветерок Твои губы колышет", theme: ["tooltipster-punk-customized"], timer: 2000, side: ["bottom", "top", "right", "left"] }); $SashaElement.tooltipster({ content: "Может, это я кричу Тебе, но Ты меня не слышишь", theme: "tooltipster-punk", trigger: "click", multiple: true, timer: 2000, side: ["bottom", "top", "right", "left"] }); }); body { background: gainsboro; margin-top: 7rem; padding-left: 7rem; } .tooltipster-sidetip.tooltipster-punk-customized .tooltipster-box { border-radius: 5px; border: none; border-bottom: 3px solid orange; background: #2a2a2a; }

Демонстрация

Что видим:

  • Если текст всплывающей подсказки не помещается в одну строку, он переносится на следующую.
  • Когда места на стороне света не остаётся, тултип появляется на другой. Отображение настраивается параметром side , в примере я задал ему значения ["bottom", "top", "right", "left"] . Всплывающая подсказка по умолчанию будет снизу, если там нет места - сверху; когда недостаточно пространства как снизу, так и сверху - справа; ну и наконец, если ей некуда деться снизу, сверху и справа, она выведется слева.

За время съёмок ни одна всплывающая подсказка не выскочила за границу. В ещё более усложнённых моих реальных примерах с этим тоже порядок.

Нынче в свете веяний WEB 2.0 стало модным добавлять на сайты всякие "фишки". Реализуются они, как правило посредством JavaScript библиотек. И попросила моя программерская душа сотворить чего нибудь такого вэбдванольногона JavaScript, но без использования какой либо библиотеки, на чистом, так сказать языке. И вот в процессе моего обучения этому удивительному языку родил я на свет такой скрипт: показывает он подсказки в облачке, при наведении на тот, или иной элемент. Аналог JQuery tooltip или tip - не помню точно.

Скрипт реализован автономным модулем, кроме своего имени не добавляет в глобальную область ни каких других переменных, неплохо сжимается компрессором и судя по тестам sIEve - память через него в IE6 не утечёт.

Инструкция: Нужно просто вызвать функцию подсказки, как конструктор, передав ей следующие параметры:

  • Обязательный. Глобальный контекст или в браузере ссылку на объект window.
  • Обязательный. NodeList элементов (например getElementsByTagName("DIV")), или ссылку на элемент, на котором нужно выводить подсказку (например getElementById("tip-div")).
  • Необязательный. Объект с настройками стилей вроде того:
    {background: "yellow", border: "solid 1px green"}
  • Необязательный. Объект с настройками смещения облака по оси X и Y типа того:
    { x: 20, y: -20 } - объект должен содержать эти два свойства
  • Пример использования:

    Window.onload = function() { // Запускаем подсказки: new Tip(window, document.getElementsByTagName("a"), { borderRadius: "10px", background: "yellow", border: "solid 1px green", color: "green", padding: "10px" }, {x: 20, y: -20}); }

    Конечно скрипт подсказки можно усовершенствовать и добавить к облачку "ножку", но мне не хотелось усложнять его, я думаю вы и сами сможете сделать это, если понадобится. Ещё скрипт жёстко ставит обработчики событий mouseover и mouseout - путём присваивания функций соответствующим свойтсвам напрямую. Поэтому всё же остаётся вероятность конфликтов в этом месте, но всё поправимо, как я уже указывал в одном из предыдущих постов можно сделать "композицию" с объектом который . В общем кому потребуется/понравится - пользуйтесь наздоровье.

    Скрипт подсказок листинг (он не такой уж большой. В нём больше комментариев):

    Function Tip(GLOBAL, elements, styles, offset) { // Страховка необязательных аргументов: if (!offset) { offset = {x: 50, y: -10} } if(!styles) { styles = {}; } // Объявляем переменные и зависимости var DOC = GLOBAL.document, length = elements.length, tipDiv, prop, i; // Добавляем html-элемент подсказки: function addTip(element,div,textTip) { // Позиция дожна быть абсолютной: div.style.position = "absolute"; // Перегоняем значения из объекта настроек стилей: for (prop in styles) { if (styles.hasOwnProperty(prop)) { div.style = styles; } } // Добаляем элемент подсказку в дерево DOM element.parentNode.appendChild(div); // Добавляем текст в div подсказки // Здесь сделано именно так, что бы избежать // Утечек памяти в IE6 div.appendChild(textTip); return div; } // Раздаём пирожки (обработчики событий) // @parament element - ссылка на html - элемент. function addHandlers(element) { // Создаём div для подсказки: var div = DOC.createElement("DIV"), // Задаём текст для подсказки - берём его из атрибута title textTip = DOC.createTextNode(element.tempTitle); // Обработчик события наведения мыши: function mouseOver() { tipDiv = addTip(element,div,textTip); // Высчитываем положение облачка: tipDiv.style.top = element.offsetTop + offset.y - tipDiv.offsetHeight + "px"; tipDiv.style.left = element.offsetLeft + offset.x + element.offsetLeft + "px"; } // Обработчик события съезда мыши: function mouseOut() { tipDiv.parentNode.removeChild(tipDiv); tipDiv = null; } // Назначаем обработчики событий: element.onmouseover = mouseOver; element.onmouseout = mouseOut; } // Если elements - это NodeList if (elements.item) { // Проходимся по заданным элементам: for (i = 0; i

    Задача

    Сделать всплывающую подсказку при наведении на картинку, оформление подсказки должно управляться через стили.

    Решение

    Всплывающая подсказка, добавляемая к изображениям через атрибут title тега , является системным элементом, поэтому вид подсказки зависит от используемого браузера, операционной системы и её настроек. Хотя напрямую изменить оформление подсказки нельзя, допустимо пойти обходным путем и имитировать всплывающую подсказку с помощью JavaScript.

    Для начала создадим пустой элемент с идентификатором floatTip и определим его стиль. Обязательными должны быть три стилевых свойства - position со значением absolute , оно задаёт абсолютное позиционирование элемента, display со значением none скрывает элемент и width задаёт ширину подсказки. Остальные свойства выступают по желанию разработчика и предназначены для изменения оформления слоя (пример 1).

    Пример 1. Стиль для всплывающей подсказки

    #floatTip { position: absolute; /* Абсолютное позиционирование */ width: 250px; /* Ширина блока */ display: none; /* Прячем от показа */ border: 1px solid #000; /* Параметры рамки */ padding: 4px; /* Поля вокруг текста */ font-family: sans-serif; /* Рубленый шрифт */ font-size: 9pt; /* Размер шрифта */ color: #333; /* Цвет текста */ background: #ffe5ff; /* Цвет фона */ }

    Сам скрипт состоит из двух функций - moveTip отслеживает движение мыши и в соответствии с координатами курсора меняет положение элемента, и toolTip управляет видимостью элемента и выводит в нём желаемый текст (пример 2).

    Пример 2. Скрипт для вывода слоя

    Document.onmousemove = moveTip; function moveTip(e) { floatTipStyle = document.getElementById("floatTip").style; w = 250; // Ширина подсказки // Для браузера IE6-8 if (document.all) { x = event.clientX + document.body.scrollLeft; y = event.clientY + document.body.scrollTop; // Для остальных браузеров } else { x = e.pageX; // Координата X курсора y = e.pageY; // Координата Y курсора } // Показывать слой справа от курсора if ((x + w + 10) < document.body.clientWidth) { floatTipStyle.left = x + "px"; // Показывать слой слева от курсора } else { floatTipStyle.left = x - w + "px"; } // Положение от верхнего края окна браузера floatTipStyle.top = y + 20 + "px"; } function toolTip(msg) { floatTipStyle = document.getElementById("floatTip").style; if (msg) { // Выводим текст подсказки document.getElementById("floatTip").innerHTML = msg; // Показываем подсказку floatTipStyle.display = "block"; } else { // Прячем подсказку floatTipStyle.display = "none"; } }

    Для удобства и универсальности скрипт следует вынести в отдельный файл и подключать его через атрибут src тега . Окончательный код показан в примере 3.

    Пример 3. Создание всплывающей подсказки

    HTML5 CSS 2.1 IE Cr Op Sa Fx

    Всплывающая подсказка #floatTip { position: absolute; width: 250px; display: none; border: 1px solid #000; padding: 4px; font-family: sans-serif; font-size: 9pt; color: #333; background: #ffe5ff; }

    Объектив: Canon EF 24-105 f/4L IS USM
    Вспышка: Canon Speedlite 580 EX
    Выдержка: 1/125
    Диафрагма: 5.6")" onMouseOut="toolTip()">

    Результат данного примера показан на рис. 1.

    Рис. 1. Всплывающая подсказка, выводимая с помощью JavaScript