Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.02.2019, 11:14
Интересующийся
Отправить личное сообщение для Wic_ Посмотреть профиль Найти все сообщения от Wic_
 
Регистрация: 25.01.2019
Сообщений: 13

Показ всплывающей подсказки в div
Использую готовый скрипт для подсказок. В таблице без проблем работает вот в таком виде:

Но мне нужно это все на дивах сверстать. Пробую так:
Но при нажатии на кнопку, span'a справки не видно, т.к. он внутри div'a. z-index прописан в CSS. Помогите поправить верстку!
Как реализована справка (где то скачал):
<style type="text/css">
.helptip {
    float:right;
    padding: 1px 7px;
    margin: 0px;
    background: #eee;
    border: 1px solid #ddd;
    cursor: pointer;
    border-radius: 5px;
    position: relative; /* Важно!
    Размещать абсолютное позиционирование внутри
    относительно данного тега */
    width: auto;
}
.helptip:hover {
    background: #fff;
}
.helptip div{
    padding: 8px;
    margin: 5px;
    background: #FBFBF9;
    border-radius: 5px;
    border: 1px solid #CBCBBD;
    position: absolute; /* Важно!
    Абсолютное позиционирование */
    display: none; /* Важно! Скрыть */
    left: -150px;
    bottom: 15px;
    z-index: 99; /* Важно!
    Всплывающие подсказки всегда выше
    нижеследующих элементов */
    min-width: 300px;
    box-shadow: 0 0 5px rgba(0,0,0,0.3);
    cursor: default;
}
.helptip span {
    padding: 8px;
    margin: 5px;
    background: #FBFBF9;
    border-radius: 5px;
    border: 1px solid #CBCBBD;
    position: absolute; /* Важно!
    Абсолютное позиционирование */
    display: none; /* Важно! Скрыть */
    left: -400px;
    bottom: 15px;
    z-index: 99; /* Важно!
    Всплывающие подсказки всегда выше
    нижеследующих элементов */
    min-width: 400px;
    box-shadow: 0 0 5px rgba(0,0,0,0.3);
    cursor: default;
}
.helptip div:hover,
.helptip span:hover {
    background: #fff;
}
.box {
  display: flex;
}
</style>
<script>
function helptip(t) {
    // Разрешаем закрытие подсказок
    // Создаем постоянную переменную этой функции для этих целей
    // Условимся: если ноль, то можно закрывать, а если единица, то нельзя
    helptip.v = 0;
    // Берем последний дочерний тег
    var b = t.children[(t.children.length-1)];
    // Если открыт, то закрываем
    if (b.style.display=="block") helptipx();
    else {
        // Закрываем все
        helptipx();
        // Открываем текущий
        b.style.display = "block";
        // Запрещаем закрытие подсказки вызванного последующими событиями
        helptip.v = 1;
    }
}
// Функция закрывает все подсказки
function helptipx() {
    // Если было нажатие для открытия подсказки, то закрывать нельзя
    // Поэтому проверяем:
    if (helptip.v==1) {
        // Разрешаем закрытие в будущем
        helptip.v = 0;
        // И выходим
        return;
    }
    // Выбираем все теги с классом .helptip
    var s = document.querySelectorAll(".helptip");
    // и перебираем их циклом
    for (var i=0; i < s.length; i++) {
        // Скрываем последний дочерний тег
        s[i].children[(s[i].children.length-1)].style.display = "none";
    }
}
</script>
<div>
    <div style="width: 100%;">
        <div style="float: left; width: 60%; height: 30px;">content</div>
        <div style="float: left; width: 30%; height: 30px;">content</div>
        <div style="float: right; width: 10%; height: 30px;"><div class="helptip" onclick="helptip(this)" title="Нажмите для того, чтобы получить справку" style="display: inline-block;"><strong>?</strong> <span title="Нажмите, чтобы закрыть справку">Справка.</span></div></div>
    </div>
</div> 
<p><strong>А в таблице все работает</strong></p>
<table width=100%>
  <tbody>
   	<tr>
             <td width="60%">content</td>
             <td width="30%">content</td>
             <td width="10%"><div class="helptip" onclick="helptip(this)" title="Нажмите для того, чтобы получить справку" style="display: inline-block;"><strong>?</strong> <span title="Нажмите, чтобы закрыть справку">Справка.</span></div></div></td>
        </tr>
 </tbody>
</table>

Последний раз редактировалось Wic_, 07.02.2019 в 11:20.
Ответить с цитированием
  #2 (permalink)  
Старый 06.02.2019, 12:22
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

А так можно?
<section>
	<div style="width: 60%;">content №1</div>
	<div style="width: 30%;">content №1</div>
	<button class="helptip" title="Нажмите для того, чтобы получить справку">?</button>
	<span title="Нажмите, чтобы закрыть справку">Справка №1.</span>
</section>
<section>
	<div style="width: 60%;">content №2</div>
	<div style="width: 30%;">content №2</div>
	<button class="helptip" title="Нажмите для того, чтобы получить справку">?</button>
	<span title="Нажмите, чтобы закрыть справку">Справка №2.</span>
</section>

<style>
	
section {
	display: flex;
	position: relative;
	margin: 1em 0;
}
	
.helptip {
    padding: 1px 7px;
    margin: 0;
	margin-left: auto;
    background: #eee;
    border: 1px solid #ddd;
    cursor: pointer;
    border-radius: 5px;
}
.helptip:hover {
    background: #fff;
}
.helptip + span {
    padding: 8px;
    margin: 5px;
    background: #FBFBF9;
    border-radius: 5px;
    border: 1px solid #CBCBBD;
    position: absolute;
    display: none;
    z-index: 99; /* Важно!
    Всплывающие подсказки всегда выше
    нижеследующих элементов */
	right: 0;
    min-width: 300px;
    box-shadow: 0 0 5px rgba(0,0,0,0.3);
    cursor: default;
}
	
.helptip:focus + span {
	display: initial;
}
</style>
Ответить с цитированием
  #3 (permalink)  
Старый 06.02.2019, 14:32
Интересующийся
Отправить личное сообщение для Wic_ Посмотреть профиль Найти все сообщения от Wic_
 
Регистрация: 25.01.2019
Сообщений: 13

Спасибо! Но этот вариант оставлю как последний случай. <section> IE8 не видит (в том числе и встроенный браузер NetBeans). А я чуть ли после каждой строки запускаю проект, опыта маловато...
P.S. Другие JS подсказки смотрел, не работают они в диве. А общий блок для строки мне обязательно нужен, т.к. некоторые строки необходимо скрывать/показывать. Может другую логику верстки подскажете?

Последний раз редактировалось Wic_, 06.02.2019 в 20:59.
Ответить с цитированием
  #4 (permalink)  
Старый 07.02.2019, 07:54
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от Wic_
Может другую логику верстки подскажете?
Ты пример тестовый сделай. А то какие-то куски раздельные выкладываешь...
Ответить с цитированием
  #5 (permalink)  
Старый 07.02.2019, 09:09
Интересующийся
Отправить личное сообщение для Wic_ Посмотреть профиль Найти все сообщения от Wic_
 
Регистрация: 25.01.2019
Сообщений: 13

Разобрался с оформлением тестового примера, он в первом посте.
Ответить с цитированием
  #6 (permalink)  
Старый 07.02.2019, 10:20
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Wic_
Разобрался с оформлением тестового примера, он в первом посте.
Так на 100 строке написано, что нужно скрывать overflow: hidden;, уберите это и оно будет как в таблице!

Сообщение от Wic_
<section> IE8 не видит
Для этой музейной ценности нужно указать в <head> следующее...
<script>document.createElement("section");</script>
<style>
section { display: block; }
</style>

Последний раз редактировалось Malleys, 07.02.2019 в 10:27.
Ответить с цитированием
  #7 (permalink)  
Старый 07.02.2019, 11:27
Интересующийся
Отправить личное сообщение для Wic_ Посмотреть профиль Найти все сообщения от Wic_
 
Регистрация: 25.01.2019
Сообщений: 13

Спасибо. Меня подвело копирование чужого кода и невнимательность. Подскажите, нужно чтобы последний div был фиксированным, а первые два - резиновыми. Вот такой способ нормальный (про calc в IE8 знаю)?
<div style="width: 100%;">
        <div style="float: left; width:calc(65% - 15px); height: 30px;">content</div>
        <div style="float: left; width:calc(5% - 15px); height: 30px;">content</div>
        <div style="float: right; width: 15px; height: 30px;"><strong>?</strong></div>
</div>

Последний раз редактировалось Wic_, 07.02.2019 в 11:57.
Ответить с цитированием
  #8 (permalink)  
Старый 07.02.2019, 14:06
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от Wic_
Подскажите, нужно чтобы последний div был фиксированным, а первые два - резиновыми. Вот такой способ нормальный (про calc в IE8 знаю)?
Ты описываешь стандартное поведение таблицы из 3-х колонок...
Ответить с цитированием
  #9 (permalink)  
Старый 07.02.2019, 14:23
Интересующийся
Отправить личное сообщение для Wic_ Посмотреть профиль Найти все сообщения от Wic_
 
Регистрация: 25.01.2019
Сообщений: 13

Да, но проще через JS скрыть/показать div чем строку в таблице.
Ответить с цитированием
  #10 (permalink)  
Старый 07.02.2019, 14:27
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от Wic_
проще через JS скрыть/показать div чем строку в таблице
Отнюдь...

<style type='text/css'>
.off {
	display: none;
}
</style>
<table>
<tr>
	<td>0</td>
</tr>
<tr class='off'>
	<td>1</td>
</tr>
<tr>
	<td>2</td>
</tr>
</table>

Дешево и кроссбраузерно...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Позиционирование всплывающей подсказки Янковиц Элементы интерфейса 21 07.04.2017 19:41
Цитата - скрытие / показ div DarknesS Общие вопросы Javascript 1 01.06.2016 11:51
Реализация всплывающей подсказки shurik_shink Элементы интерфейса 7 16.12.2015 12:42
скрипт всплывающей подсказки kent666 Events/DOM/Window 0 03.11.2011 17:59
показ div по времени TTongorovortoto Элементы интерфейса 2 21.04.2011 22:20