2016-07-11 59 views
0

我已经建立了这个CSS工具提示:根据元素自动定位CSS工具提示?

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

谢谢。与您的代码无关,我注意到,因为我选择在左侧显示弹出框,所以在平板电脑上它会被切断。因此,我会将'help-text:before'的'left'改为'55%'(而不是'13%'),在你的代码中,我会相应地将.help .help-text的left改为-100px '(而不是'-15px'。我只是想知道为什么我必须使用这么大的负数才能使它工作?是否有更好的做法? – rockyraw

+0

@rockyraw更好的练习:是和否......使用' position:absolute'使您能够将其精确定位到您想要的位置,缺点是在触及浏览器边缘时,它可能位于视图之外。要解决此问题,用户不必滚动,可以在有一个帮助文本的元素,如果它离开视图,则调整左值...大负数:工具提示需要向左移动那个“箭头”以指向“?”符号 – LGSon

0

将.help文本设置在.fa-问题圈内。这种方式帮助文本将相对于其父元素进行定位。然后,您只需将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以确保图形有位置:相对;和信息文本有位置:绝对;。

第三,我用top:和left:值调整了信息文本的位置。 (我也改变了箭头元素的位置创建到左: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 
}