Подсказка динамического размера только css - PullRequest
0 голосов
/ 05 мая 2019

Я думаю, что я близко, но я изо всех сил пытаюсь заставить всплывающую подсказку работать точно так, как я хочу. У меня есть динамически построенная таблица HTML, и я хочу иметь всплывающие подсказки для содержимого TD. Это должно быть чисто CSS (не на основе JavaScript или событий) для производительности. Я бы хотел, чтобы всплывающая подсказка появлялась выше и в центре ТД при наведении курсора и под стрелкой внизу. У меня это работает, но моя проблема в том, что содержание всплывающей подсказки иногда может состоять из нескольких строк, что увеличивает высоту подсказки. Когда это происходит, всплывающая подсказка все еще находится в центре TD, но больше не над ним, она перемещается вниз. Как я могу иметь всплывающую подсказку, которая всегда будет выше TD на одну и ту же величину независимо от высоты. Пожалуйста, помогите.

Пример HTML td:

<td>
    <div class="tooltip">
       <span>My Tooltip Text</span>
       Text in the TD
    </div>
</td>

мой css:

.tooltip span
{
    display: none;
    color: #000;
    text-decoration: none;
}

.tooltip:hover span
{
    display: block;
    position: absolute;
    background-color: #292929;
    margin: -2.8em -1em;
    color: white;
    padding: 0.5rem 1rem;
    border-radius: 4px;
    white-space: pre-line;
    font-size: 1rem;
    font-weight: 400;
    line-height: 1.5;
    text-align: left;
}

.tooltip:hover span::after
{
    top: 100%;
    left: 50%;
    border: solid transparent;
    content: '';
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
    border-top: 8px solid #292929;
    border-right: 8px solid transparent;
    border-left: 8px solid transparent;
    border-width: 10px;
    margin-left: -40px;
}

1 Ответ

1 голос
/ 05 мая 2019

например

@keyframes pulse {
  0% {
    opacity: .5;
    transform: translate(-50%, -100%) scale(.5); 
  }
  50%{
   opacity: 1;
   transform: translate(-50%, -100%) scale(1.2);
  }
  100% {
     transform: translate(-50%, -100%) scale(1);
  }
}

.tooltip span
{
    color: #000;
    text-decoration: none;
    transform: translate(-50%, -100%) scale(.5); 
    position: absolute;
    background-color: #292929;
    color: white;
    padding: 0.5rem 1rem;
    border-radius: 4px;
    font-size: 1rem;
    font-weight: 400;
    text-align: center;
    box-shadow: 0 0 4px 2px rgba(0,0,0,.2);
    width: max-content;
    max-width: 200px;
    top:0;
    left:50%;
    margin-top: -18px;
    visibility: hidden;
    opacity: 0;
}
.tooltip:hover{
  position: relative;
}
.tooltip:hover span
{
    opacity: 1;
    visibility: visible;
    transform: translate(-50%, -100%) scale(1);
    animation: pulse 1s;
}

.tooltip:hover span::after
{
    top: 100%;
    left: 50%;
    transform: translateX(-50%);
    border: solid transparent;
    content: '';
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
    border-top: 8px solid #292929;
    border-right: 8px solid transparent;
    border-left: 8px solid transparent;
    border-width: 10px;
}
<br>
<br>

<br>
<br>

<table border="1">
  <tr>
    <td>Hello</td>
    <td>
      <div class="tooltip">
         <span>My Tooltip Text</span>
         Cool text
      </div>
    </td>
    <td>
       <div class="tooltip">
         <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit</span>
         Long text
      </div>
    </td>
  </tr>
</table>
...