読者です 読者をやめる 読者になる 読者になる

Tooltip は、jQuery UI で実装するのが良い

先日、table内のテキストを省略表示させる方法を書いたので、更にCSSでTooltip表示する方法、
以下のように、tdタグの中は、同じテキスト続けて span タグで書いて、

<td>テキストAAAAAAA<span>テキストAAAAAA</span></td>

CSSとして、

td{
   overflow: hidden;
   text-overflow: ellipsis;
   max-width: 100px;
   width: 100px;
}
td span{
   display: none;
   position: absolute;
}
td:hover span{
   display: block;
   background-color: #ffffd5;
   padding: 3px;
   color: #000000;
}

とすれば、Tooltip表示にはなるが、スクロールする table を書いた場合、
スクロールさせた下のセルでのTooltip表示は、とんでもない箇所で表示されてしまうので、
これは良くない!

やはり、jQuery-ui の Tooltip を使うのが楽でスクロールに耐えうるものを用意できる。

でも、最初から title属性で、td のコンテンツと同じものを書き並べるのもどうかと思い、、、、
そこで、強制的に jQuery で title 属性を作りだせば良いではないかということで、、、

次のようなテーブルタグ

<div class="foo">
   <table>
      <tr>
         <td>ABCDEFGHIKJLMNOPQRTUVWXYZ</td>
         <td>1234567890あいうえおABCDEFG</td>
      </tr>
   </table>
</div>
================
CSSは、以下のように、準備、、、

.ui-tooltip{
   background: #ffff80;
}

table{
   box-sizing: border-box;
   border-spacing: 0;
   border-collapse: collapse;
}
td{
   border: 1px solid #000000;
   white-space: nowrap;
   overflow: hidden;
   text-overflow: ellipsis;
   width: 100px;
   max-width: 100px;

}
td:hover{ cursor: default; }

実行する jQueryは、以下のようにする。

<script type="text/javascript">
$(function(){
   $(".foo td").each(function(){
      $(this).attr("title", $(this).html());
   });
   $(document).tooltip();
});
</script>

すると、テーブルの Tooltip は、以下のとおりでスクロールがあるようなテーブルでも問題ない。

f:id:posturan:20160313174734j:plain