1
votes

I have a Table in the left menu which is having the Scroll bar and i have a Tooltip for each row inside a table. My requirement is to show Tooltip on Top of the Scrollbar towards right, but some how i am unable to achieve that.

Problem is Tooltip appearing behind the Scrollbar and body. I need to show it on top of the Scrollbar towards right.

I have a Position "Relative" for Parent Div and "Absolute" for Child element. Z-index also seems not working here.

HTML:

<div class="ResultsWrapper">
  <table class="ResultsTable">
    <tr>
       <td class="hasTooltip">
          <div class="SerialNumberContainer">
             <div class="SerialNumber">3119985815206</div>
             <div class="SerialNumberTooltip">3119985815206</div>
         </div>
      </td>
    </tr>
 </table>
</div>

CSS:

.SerialNumberContainer {
   position: relative;
   z-index: 10;
}

.SerialNumberTooltip {
    position: absolute;
    top: 10px;
    left: 40px;
    background-color: #FFF;
    border: 1px solid #CCC;
    display: none;
}

.SerialNumberContainer:hover {
    z-index: 20;
}

.SerialNumberContainer:hover .SerialNumberTooltip {
    display: block;
    z-index: 40;
}

Please check the below Fiddle.

Full Example In Fiddle

Appreciate your Help.

3
I dont think it is possible with this structure and only pure css - Batu.Khan
Try this .SerialNumberTooltip { position: absolute; top: -22px; left: 0; background-color: #FFF; border: 1px solid #CCC; display: none; } - Awais
Hi Awais, suggested code not working. I need to show Tooltip on top of the Scroll bar towards Right.Thanks - viswa
Hi Batu.khan, Please suggest if any other choice - viswa

3 Answers

1
votes

This is the workaround: 1. Change html structure:

<div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
  1. Using pseudo elements to target attribute of div .(adding before after css)

  2. remove position:relative on which the tooltip was depending.

  3. Removed top and left attribute as they depend on position relative and replace with margin .

Below is the fixed code:

.ResultsWrapper {
    width:150px;
    height:314px;
    text-align:center;
    overflow-x:hidden;
    overflow-y:scroll;
    border:1px solid black;
}
.ResultsTable {
    width:86px;
    border-collapse:collapse;
    table-layout:fixed;
}
.ResultsTable th, .ResultsTable td {
    border:1px solid black;
    text-overflow:ellipsis;
}
.ColumnSerialNo {
    width:81px;
}

.SerialNumberContainer {
    z-index: 10;
}

.SerialNumber {
    width: 80px;
    overflow: hidden;
}
.SerialNumber:hover::before {
    position: absolute;
    content:attr(data-before-content);
    margin:10px 0 0 50px;
    background-color: #fff;
    border: 1px solid #CCC;
    display: block;
    z-index:9999;
}
.SerialNumber:hover{}
<div class="ResultsWrapper">
    <table class="ResultsTable">
        <thead>
            <tr>
                <th class="ColumnSerialNo">Serial Number</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="aaaaaaa3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr><tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber" data-before-content="3119985815206">3119985815206</div>
                    </div>
                </td>
            </tr>
            
        </tbody>
    </table>
</div>
1
votes

I think you can use a wrapper class (.TooltipWrapper in the HTML) like the following way:

document.querySelectorAll('.SerialNumber').forEach(function(el){
  el.addEventListener('mousemove',function(ele){
    var x = ele.pageY;
    el.parentNode.querySelector('.TooltipWrapper').style.top = `${x}px`;
  });
});
.ResultsWrapper {
  width:150px;
  height:314px;
  text-align:center;
  overflow-x:hidden;
  overflow-y:scroll;
  border:1px solid black;
}
.ResultsTable {
  width:86px;
  border-collapse:collapse;
  table-layout:fixed;
}
.ResultsTable th, .ResultsTable td {
  border:1px solid black;
}
.ColumnSerialNo {
  width:81px;
}

.SerialNumber {
  width: 80px;
  overflow: hidden;
}

.TooltipWrapper {
  position: absolute;
  visibility: hidden;
  
}
.hasTooltip:hover .TooltipWrapper {
  visibility: visible;
  opacity: 1;
}

.SerialNumberTooltip {
  display: block;
  --margin-top: -20px;
  margin-left: 85px;
  background-color: #FFF;
  border: 1px solid #CCC;
}
<div class="ResultsWrapper">
  <table class="ResultsTable">
    <thead>
      <tr>
        <th class="ColumnSerialNo">Serial Number</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815206</div>
            <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815206</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815207</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815207</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815208</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815208</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815209</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815209</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815210</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815210</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815211</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815211</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815212</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815212</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815213</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815213</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815214</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815214</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815215</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815215</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815216</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815216</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815217</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815217</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815218</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815218</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815219</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815219</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815220</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815220</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815221</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815221</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815222</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815222</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815223</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815223</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815224</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815224</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815225</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815225</div>
            </div>
          </div>
        </td>
      </tr>
      <tr>
        <td class="hasTooltip">
          <div class="SerialNumberContainer">
            <div class="SerialNumber">3119985815226</div>
             <div class="TooltipWrapper">
              <div class="SerialNumberTooltip">3119985815226</div>
            </div>
          </div>
        </td>
      </tr>
    </tbody>
  </table>
</div>
0
votes

You cannot position an element over the scrollbar using Position absolute and z-index. If you want to show element on top of the scrollbar then you need to use position fixed element.

.ResultsWrapper {
    width:150px;
    height:314px;
    text-align:center;
        overflow-y:scroll;
    border:1px solid black;
    z-index:-1;
}
.ResultsTable {
    width:86px;
    border-collapse:collapse;
    table-layout:fixed;
}
.ResultsTable th, .ResultsTable td {
    border:1px solid black;
    text-overflow:ellipsis;
}
.ColumnSerialNo {
    width:81px;
}

.SerialNumberContainer {
    position: relative;
    z-index: 10;
}

.SerialNumber {
    width: 80px;
    overflow: hidden;
}

.SerialNumberTooltip {
    position: fixed;
    top: 10px;
    left: 70px;
    background-color: #FFF;
    border: 1px solid #CCC;
    display: none;
    z-index:99999999999;
}

.SerialNumberContainer:hover {
    z-index: 20;
}

.SerialNumberContainer:hover .SerialNumberTooltip {
    display: block;
    z-index: 40;
}
<div class="ResultsWrapper">
    <table class="ResultsTable">
        <thead>
            <tr>
                <th class="ColumnSerialNo">Serial Number</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
            <tr>
                <td class="hasTooltip">
                    <div class="SerialNumberContainer">
                        <div class="SerialNumber">3119985815206</div>
                        <div class="SerialNumberTooltip">3119985815206</div>
                    </div>
                </td>
            </tr>
        </tbody>
    </table>
</div>

Check the below jsfiddle.

http://jsfiddle.net/rajeevRF/eoc8yv5a/5/