  
<div id="snippet_310" class="snippet">
  <h2><a href="/snippets/310-Positioning-an-element-over-another-element-with-jQuery" title="Positioning an element over another element with jQuery - JavaScript - jquery, position, absolute, tooltip, dialog">Positioning an element over another element with jQuery</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/61-JavaScript">
      JavaScript</a> posted 11 months ago by christian
          
  </div>

  <div class="body">
    <p>Positioning an element over another element is a common problem and can be used for creating simple tooltips, inline dialogs, informational messages and so on.</p>
<p>The code is simple:</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="LibraryClassType">$.fn</span>.<span class="FunctionName">positionOn</span> = <span class="Storage">function</span>(<span class="FunctionArgument">element, align</span>) {
<span class="line-numbers">   2 </span>   <span class="Keyword">return</span> <span class="Variable">this</span>.each(<span class="Storage">function</span>() {
<span class="line-numbers">   3 </span>     <span class="Storage">var</span> target   <span class="Operator">=</span> <span class="Operator">$</span>(<span class="Variable">this</span>);
<span class="line-numbers">   4 </span>     <span class="Storage">var</span> position <span class="Operator">=</span> element.position();
<span class="line-numbers">   5 </span> 
<span class="line-numbers">   6 </span>     <span class="Storage">var</span> x      <span class="Operator">=</span> position.<span class="NamedConstant">left</span>; 
<span class="line-numbers">   7 </span>     <span class="Storage">var</span> y      <span class="Operator">=</span> position.<span class="NamedConstant">top</span>;
<span class="line-numbers">   8 </span> 
<span class="line-numbers">   9 </span>     <span class="Keyword">if</span>(align <span class="Operator">==</span> <span class="String"><span class="String">'</span>right<span class="String">'</span></span>) {
<span class="line-numbers">  10 </span>       x <span class="Operator">-</span><span class="Operator">=</span> (target.<span class="NamedConstant">outerWidth</span>() <span class="Operator">-</span> element.<span class="NamedConstant">outerWidth</span>());
<span class="line-numbers">  11 </span>     } <span class="Keyword">else</span> <span class="Keyword">if</span>(align <span class="Operator">==</span> <span class="String"><span class="String">'</span>center<span class="String">'</span></span>) {
<span class="line-numbers">  12 </span>       x <span class="Operator">-</span><span class="Operator">=</span> target.<span class="NamedConstant">outerWidth</span>() / <span class="Number">2</span> <span class="Operator">-</span> element.<span class="NamedConstant">outerWidth</span>() / <span class="Number">2</span>;
<span class="line-numbers">  13 </span>     }
<span class="line-numbers">  14 </span> 
<span class="line-numbers">  15 </span>     target.css({
<span class="line-numbers">  16 </span>       position: <span class="String"><span class="String">'</span>absolute<span class="String">'</span></span>,
<span class="line-numbers">  17 </span>       zIndex:   <span class="Number">5000</span>,
<span class="line-numbers">  18 </span>       top:      y, 
<span class="line-numbers">  19 </span>       left:     x
<span class="line-numbers">  20 </span>     });
<span class="line-numbers">  21 </span>   });
<span class="line-numbers">  22 </span> };
<span class="line-numbers">  23 </span> 
</pre></p>
<p>Usage:</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Operator">$</span>(<span class="String"><span class="String">'</span>selector-for-elements-to-position<span class="String">'</span></span>).positionOn(<span class="Operator">$</span>(<span class="String"><span class="String">'</span>selector-for-element-to-position-them-on<span class="String">'</span></span>))
</pre></p>
<p>Normally you would use this code within an event listener such as mouseover or click:</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Operator">$</span>(<span class="String"><span class="String">&quot;</span>.add-link<span class="String">&quot;</span></span>).live(<span class="String"><span class="String">'</span>click<span class="String">'</span></span>, <span class="Storage">function</span>(<span class="LibraryClassType">event</span>) {
<span class="line-numbers">   2 </span>       <span class="Storage">var</span> target <span class="Operator">=</span> <span class="Operator">$</span>(<span class="Variable">this</span>);
<span class="line-numbers">   3 </span>       <span class="Storage">var</span> dialog <span class="Operator">=</span> <span class="Operator">$</span>(<span class="String"><span class="String">'</span>#add-link-dialog<span class="String">'</span></span>);
<span class="line-numbers">   4 </span> 
<span class="line-numbers">   5 </span>       dialog.positionOn(target, <span class="String"><span class="String">'</span>center<span class="String">'</span></span>);
<span class="line-numbers">   6 </span>       dialog.show();
<span class="line-numbers">   7 </span> 
<span class="line-numbers">   8 </span>       <span class="Keyword">return</span> <span class="BuiltInConstant">false</span>;
<span class="line-numbers">   9 </span>     });  
</pre></p>
<p>More examples:</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> # Default is align <span class="Operator">with</span> top left corner of given element
<span class="line-numbers">   2 </span> <span class="Operator">$</span>(<span class="String"><span class="String">'</span>#add-link-dialog<span class="String">'</span></span>).positionOn(<span class="Operator">$</span>(<span class="String"><span class="String">'</span>.add-link<span class="String">'</span></span>))
<span class="line-numbers">   3 </span> # But you can align to the right and center
<span class="line-numbers">   4 </span> <span class="Operator">$</span>(<span class="String"><span class="String">'</span>#add-link-dialog<span class="String">'</span></span>).positionOn(<span class="Operator">$</span>(<span class="String"><span class="String">'</span>.add-link<span class="String">'</span></span>), <span class="String"><span class="String">'</span>right<span class="String">'</span></span>)
<span class="line-numbers">   5 </span> <span class="Operator">$</span>(<span class="String"><span class="String">'</span>#add-link-dialog<span class="String">'</span></span>).positionOn(<span class="Operator">$</span>(<span class="String"><span class="String">'</span>.add-link<span class="String">'</span></span>), <span class="String"><span class="String">'</span>center<span class="String">'</span></span>)
</pre></p>
<p>You&#8217;ll need the jQuery dimensions plugin for this to work.</p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/355-jquery">jquery</a>, <a href="/tags/681-position">position</a>, <a href="/tags/682-absolute">absolute</a>, <a href="/tags/683-tooltip">tooltip</a>, <a href="/tags/684-dialog">dialog</a>
    
    
  </div>
</div>






