2016-07-11 2 views
0

Я построил этот совет CSS инструмент:Auto-position CSS Tooltip в соответствии с элементом?

DEMO

CSS:

.help { 
    position: relative 
} 

.help .help-text { 
    display: none; 
    background-color: #FDFCEF; 
    border: 1px solid #E8E5C1; 
    border-radius: 4px; 
    color: #333; 
    font-size: 12px; 
    font-weight: 400; 
    padding: 5px; 
    white-space: normal; 
    position: absolute; 
    z-index: 1000; 
    box-shadow: 0 1px 3px 3px rgba(0, 0, 0, .05); 
    transition: all .3s ease; 
    -webkit-transition: all .3s ease; 
    -moz-transition: all .3s ease; 
    -ms-transition: all .3s ease; 
    -o-transition: all .3s ease; 
    margin-left: 60px; 
    margin-top: 12px; 
    line-height: 1.2 
} 

.help .help-text:after, 
.help .help-text:before { 
    bottom: 100%; 
    left: 50%; 
    left: 13%; 
    border: solid transparent; 
    content: " "; 
    height: 0; 
    width: 0; 
    position: absolute; 
    pointer-events: none 
} 

.help .help-text:after { 
    border-color: transparent transparent #FDFCEF; 
    border-width: 8px; 
    margin-left: -8px 
} 

.help .help-text:before { 
    border-color: transition transition #E8E5C1; 
    border-width: 10px; 
    margin-left: -10px 
} 

.help:hover .help-text { 
    display: block 
} 

.help-text { 
    width: 185px 
} 

.help-icon { 
    padding-left: 3px; 
    color: #789cbf; 
    font-size: .9em!important; 
    vertical-align: 0!important; 
    cursor: help 
} 

.other { 
    display: inline 
} 

p.inline { 
    display: inline-block 
} 

.inline { 
    display: inline-block 
} 

.box { 
    font-size: .65em; 
    color: #FFF; 
    background-color: #00cc4f; 
    font-weight: 700; 
    width: 97px; 
    height: 18px; 
    padding-top: 3px; 
    margin-top: 5px; 
    padding-bottom: 4px; 
    text-align: center; 
    font-family: 'Open Sans', sans-serif; 
    cursor: help 
} 

HTML:

<table border="1"> 
    <col style="width:128px;" /> 
    <col style="width:216px;" /> 
    <col style="width:280px;" /> 
      <thead> 
     <tr> 
     <th>4</th> 
     <th>5</th> 
     <th>6</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
     <td> 
      <p class="inline">Sample A</p><span class="help"><span class="fa fa-question-circle fa-lg help-icon"></span><div class="help-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.</div></span> 

       <span class="help"><div class="box">SAMPLE BOX</div><div class="help-text">im ad minim veniam. bore et dolore magna aliqua. Ut enim ad minim veniam.</div></span> 


      <div>aaa</div>             
      <div class="other">Sample B</div><span class="help"><span class="fa fa-question-circle fa-lg help-icon"></span><div class="help-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam. bore et dolore magna aliqua. Ut enim ad minim veniam.</div></span>      
     </td> 
     <td> 
     </td> 
     <td><ul> 
       <li class="inline">Another Sample: C</li> 
       <span class="help"> 
       <span class="fa fa-question-circle fa-lg help-icon"></span> 
       <div class="help-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam. bore et dolore magna aliqua. Ut enim ad minim veniam.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.</div> 
       </span> 
       <li class="inline">Yet Another Great Sample - D:</li> 
       <span class="help"> 
       <span class="fa fa-question-circle fa-lg help-icon"></span> 
       <div class="help-text">r sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam. bore et dolore magna aliqua. Ut enim ad minim veniam.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dol ssssssssssssssss</div> 
       </span>  
       </ul> 
     </td> 
     </tr>  
    </tbody> 
    </table> 

Как вы можете видеть, для каждого образца позиционирование выходит разные ,

Я хочу, чтобы он располагался в соответствии с элементом, содержащим наконечник.

Кроме того, является ли этот код хорошей практикой? хорошо ли это работает и на планшете? или мне нужно какое-то изменение?

Кроме того, лучше ли использовать подсказку на основе java-скрипта? Если это так, что ближе всего к моему текущему?

+0

Это то, что вы ищете: https: //jsfiddle.net/LGSon/x02exd59/1/ – LGSon

+0

Ваш HTML недопустим. UL может иметь только LI в качестве детей. –

+0

@LGSon, Да, это похоже на то, что мне нужно. Спасибо. Это хорошая практика? Является ли он совместимым с кросс-браузером? – rockyraw

ответ

1

Измените ваш margin-left: 60px; margin-top: 12px; на left: -15px; top: calc(100% + 5px);

Я также исправлена ​​ошибка синтаксиса, имеющий span как прямого потомка ul

.help { 
 
    position: relative 
 
} 
 

 
.help .help-text { 
 
    display: none; 
 
    background-color: #FDFCEF; 
 
    border: 1px solid #E8E5C1; 
 
    border-radius: 4px; 
 
    color: #333; 
 
    font-size: 12px; 
 
    font-weight: 400; 
 
    padding: 5px; 
 
    white-space: normal; 
 
    position: absolute; 
 
    z-index: 1000; 
 
    box-shadow: 0 1px 3px 3px rgba(0, 0, 0, .05); 
 
    transition: all .3s ease; 
 
    -webkit-transition: all .3s ease; 
 
    -moz-transition: all .3s ease; 
 
    -ms-transition: all .3s ease; 
 
    -o-transition: all .3s ease; 
 
    left: -15px; 
 
    top: calc(100% + 5px); 
 
    line-height: 1.2 
 
} 
 

 
.help .help-text:after, 
 
.help .help-text:before { 
 
    bottom: 100%; 
 
    left: 50%; 
 
    left: 13%; 
 
    border: solid transparent; 
 
    content: " "; 
 
    height: 0; 
 
    width: 0; 
 
    position: absolute; 
 
    pointer-events: none 
 
} 
 

 
.help .help-text:after { 
 
    border-color: transparent transparent #FDFCEF; 
 
    border-width: 8px; 
 
    margin-left: -8px 
 
} 
 

 
.help .help-text:before { 
 
    border-color: transition transition #E8E5C1; 
 
    border-width: 10px; 
 
    margin-left: -10px 
 
} 
 

 
.help:hover .help-text { 
 
    display: block 
 
} 
 

 
.help-text { 
 
    width: 185px 
 
} 
 

 
.help-icon { 
 
    padding-left: 3px; 
 
    color: #789cbf; 
 
    font-size: .9em!important; 
 
    vertical-align: 0!important; 
 
    cursor: help 
 
} 
 

 
.other { 
 
    display: inline 
 
} 
 

 
p.inline { 
 
    display: inline-block 
 
} 
 

 
.inline { 
 
    display: inline-block 
 
} 
 

 
.box { 
 
    font-size: .65em; 
 
    color: #FFF; 
 
    background-color: #00cc4f; 
 
    font-weight: 700; 
 
    width: 97px; 
 
    height: 18px; 
 
    padding-top: 3px; 
 
    margin-top: 5px; 
 
    padding-bottom: 4px; 
 
    text-align: center; 
 
    font-family: 'Open Sans', sans-serif; 
 
    cursor: help 
 
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"/> 
 
     <table border="1"> 
 
     <col style="width:128px;" /> 
 
     <col style="width:216px;" /> 
 
     <col style="width:280px;" /> 
 
       <thead> 
 
      <tr> 
 
      <th>4</th> 
 
      <th>5</th> 
 
      <th>6</th> 
 
      </tr> 
 
     </thead> 
 
     <tbody> 
 
      <tr> 
 
      <td> 
 
       <p class="inline">Sample A</p><span class="help"><span class="fa fa-question-circle fa-lg help-icon"></span><div class="help-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.</div></span> 
 
       
 
        <span class="help"><div class="box">SAMPLE BOX</div><div class="help-text">im ad minim veniam. bore et dolore magna aliqua. Ut enim ad minim veniam.</div></span> 
 
        
 
        
 
       <div>aaa</div>             
 
       <div class="other">Sample B</div><span class="help"><span class="fa fa-question-circle fa-lg help-icon"></span><div class="help-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam. bore et dolore magna aliqua. Ut enim ad minim veniam.</div></span>      
 
      </td> 
 
      <td> 
 
      </td> 
 
      <td><ul> 
 
        <li class="inline">Another Sample: C 
 
        <span class="help"> 
 
        <span class="fa fa-question-circle fa-lg help-icon"></span> 
 
        <div class="help-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam. bore et dolore magna aliqua. Ut enim ad minim veniam.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.</div> 
 
        </span></li> 
 
        <li class="inline">Yet Another Great Sample - D: 
 
        <span class="help"> 
 
        <span class="fa fa-question-circle fa-lg help-icon"></span> 
 
        <div class="help-text">r sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam. bore et dolore magna aliqua. Ut enim ad minim veniam.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dol ssssssssssssssss</div> 
 
        </span></li> 
 
        </ul> 
 
      </td> 
 
      </tr>  
 
     </tbody> 
 
     </table>

+0

Спасибо. Не связанный с вашим кодом, я заметил, что, поскольку я решил отображать поп-бокс влево, на планшетах он будет отключен. Поэтому я изменю 'left'' help-text: before' до '55%' (вместо '13%'), и в вашем коде я соответственно изменю 'left' .help .help-text на' -100px '(вместо' -15px'. Мне просто интересно, почему я должен использовать такое большое отрицательное число, чтобы заставить его работать? Есть ли более эффективная практика? – rockyraw

+0

@rockyraw Лучшая практика: Да и Нет ... Использование ' position: absolute' дает вам возможность позиционировать его именно там, где вы хотите, а наоборот, при ударе по краю браузера его можно отключить от просмотра. Чтобы исправить это, пользователю не нужно будет прокручивать, можно добавить скрипт на элементы, имеющие текст справки, которые корректируют левое значение, если оно выходит из поля зрения ... Большое отрицательное число: всплывающая подсказка должна перемещать так много влево, чтобы «стрелка» указывала на знак «?» – LGSon

0

Set .help-текст внутри .fa-question-circle. Таким образом, текст справки будет помещен относительно его родительского элемента. Тогда вам просто нужно изменить margin-left на -20px, и все готово.

<div class="fa fa-question-circle fa-lg help-icon"> 
    <span class="help-text">r sit amet, </span> 
</div> 

here рабочая скрипка. первые две подсказки неизменны, остальные два фиксированы.

0

Это, кажется, что вы хотите: https://jsfiddle.net/x02exd59/3/.

Сначала я сделал некоторые изменения HTML. Ваш абсолютный позиционный элемент (текст подсказки) будет отображаться относительно его родителя. Это означает, что если мы сделаем глификон его родителем, он отобразится на основе того, где находится значок.

Во-вторых, я проверил CSS, чтобы убедиться, что у глификона была позиция: relative; и информационный текст имел позицию: absolute ;.

В-третьих, я правильно настроил размещение информационного текста с верхними и левыми значениями. (Я также изменил положение элемента стрелки вы создали налево:. 25px)

HTML

<table border="1"> 
    <col style="width:128px;" /> 
    <col style="width:216px;" /> 
    <col style="width:280px;" /> 
      <thead> 
     <tr> 
     <th>4</th> 
     <th>5</th> 
     <th>6</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
     <td> 
      <p class="inline">Sample A</p><i class="help fa fa-question-circle fa-lg help-icon"><span class="help-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim.</span></i> 

       <div class="help box">SAMPLE BOX<span class="help-text">im ad minim veniam. bore et dolore magna aliqua. Ut enim ad minim veniam.</span></div> 


      <div>aaa</div>             
      <div class="other">Sample B<span class="help fa fa-question-circle fa-lg help-icon"><span class="help-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam. bore et dolore magna aliqua. Ut enim ad minim veniam.</span></span></div>      
     </td> 
     <td> 
     </td> 
     <td><ul> 
       <li class="inline">Another Sample: C</li> 
       <span class="help"> 
       <span class="fa fa-question-circle fa-lg help-icon"></span> 
       <div class="help-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam. bore et dolore magna aliqua. Ut enim ad minim veniam.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.</div> 
       </span> 
       <li class="inline">Yet Another Great Sample - D:</li> 
       <span class="help"> 
       <span class="fa fa-question-circle fa-lg help-icon"></span> 
       <div class="help-text">r sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam. bore et dolore magna aliqua. Ut enim ad minim veniam.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dol ssssssssssssssss</div> 
       </span>  
       </ul> 
     </td> 
     </tr>  
    </tbody> 
    </table> 

CSS

.help { 
    position: relative 
    ; 
} 

.help .help-text { 
    display: none; 
    background-color: #FDFCEF; 
    border: 1px solid #E8E5C1; 
    border-radius: 4px; 
    color: #333; 
    font-size: 12px; 
    font-weight: 400; 
    padding: 5px; 
    white-space: normal; 
    position: absolute; 
    left: 0px; 
    z-index: 1000; 
    box-shadow: 0 1px 3px 3px rgba(0, 0, 0, .05); 
    transition: all .3s ease; 
    -webkit-transition: all .3s ease; 
    -moz-transition: all .3s ease; 
    -ms-transition: all .3s ease; 
    -o-transition: all .3s ease; 
    margin-left: -15px; 
    margin-top: 12px; 
    line-height: 1.2 
} 

.help .help-text:after, 
.help .help-text:before { 
    bottom: 100%; 
    left: 50%; 
    left: 25px; 
    border: solid transparent; 
    content: " "; 
    height: 0; 
    width: 0; 
    position: absolute; 
    pointer-events: none 
} 

.help .help-text:after { 
    border-color: transparent transparent #FDFCEF; 
    border-width: 8px; 
    margin-left: -8px 
} 

.help .help-text:before { 
    border-color: transition transition #E8E5C1; 
    border-width: 10px; 
    margin-left: -10px; 
} 

.help:hover .help-text { 
    display: block 
} 

.help-text { 
    width: 185px 
} 

.help-icon { 
    padding-left: 3px; 
    color: #789cbf; 
    font-size: .9em!important; 
    vertical-align: 0!important; 
    cursor: help 
} 

.other { 
    display: inline 
} 

p.inline { 
    display: inline-block 
} 

.inline { 
    display: inline-block 
} 

.box { 
    font-size: .65em; 
    color: #FFF; 
    background-color: #00cc4f; 
    font-weight: 700; 
    width: 97px; 
    height: 18px; 
    padding-top: 3px; 
    margin-top: 5px; 
    padding-bottom: 4px; 
    text-align: center; 
    font-family: 'Open Sans', sans-serif; 
    cursor: help 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^