###実現したいこと
ホバーで表示されるツールチップについて、その横幅を文の長さに応じて可変にしたいです。
現状では、min-width
指定のせいで文が短いときに横幅があまるのでそれをやめて、max-width
だけの指定をしたいです。
###発生している問題
ツールチップはボタンの兄弟要素として.append()
されます。
そのため、width
指定をしなければ、親要素の幅までになってしまいます。
そこで親要素の幅を超えるためにmin-width:200px;
を指定しました。
すると今度は短い文のときに幅が余ってしまうというジレンマです。
これをmax-widht
指定だけ残しつつ、親要素の幅を無関係に(文の長さぴったりに)できませんでしょうか?
###該当のソースコード
これがツールチップのコードです。
まずはHTMLです。
html
1<div class="items"> 2 3 <div class="item" data-type="1"> 4 <button type="button" class="tooltip"> 5 <span class="icon">■</span> 6 <span class="text">ボタン1</span> 7 </button> 8 </div> 9 10 <div class="item" data-type="2"> 11 <button type="button" class="tooltip" data-type="2"> 12 <span class="icon">■</span> 13 <span class="text">ボタン2</span> 14 </button> 15 </div> 16 17</div>
続いてCSSですが、ここでmin-width: 200px;
と指定しないとツールチップは.item
という親要素の幅を超えることができません。
しかし、指定すると今度は文が短いとき200pxに達せず幅が余ってしまうわために悩んでいます。
css
1.items { 2 display: flex; 3} 4.item { 5 position: relative; 6} 7.tooltip { 8 position: relative; 9 z-index: 2; 10} 11.tooltip_hover { 12 position: absolute; 13 display: inline-block; 14 padding: 7px 10px; 15 border-radius: 3px; 16 text-align: left; 17 left: 0; 18 z-index: 1; 19 color: #333; 20 background: pink; 21 min-width: 200px; /* 指定しないと .itemの幅を来れられない */ 22 max-width: 300px; 23} 24.tooltip_hover::before { 25 content: ""; 26 position: absolute; 27 top: -25px; 28 left: 10px; 29 border: 15px solid transparent; 30 border-bottom: 15px solid pink; 31}
以下はホバー時のjQueryです。
jquery
1$(document).on('mouseover','.tooltip', function(){ 2 const type = $(this).parent().attr('data-type'); 3 let mes; 4 if( type=='1' ){ 5 mes = '横幅があまる'; 6 }else{ 7 mes = '文章が長ければ横幅が余ることはない'; 8 } 9 const top = parseInt( $(this).outerHeight() ) + 10; 10 $(this).parent().append('<span class="tooltip_hover" style="top:'+top+'px">'+mes+'</span>'); 11}); 12 13$(document).on('mouseout','.tooltip', function(){ 14 $(this).parent().find('.tooltip_hover').remove(); 15});
###試したこと
CSSで、文の長さに応じて指定すれば上は解決できます。
css
1.tooltip[data-type="1"] .tooltip_hover { 2 min-width: 100px; /* 短い文のときは短い幅にする */ 3} 4.tooltip[data-type="2"] .tooltip_hover { 5 min-width: 200px; 6}
ですが実際には、文が(let mes;
が)ランダムなのでこの方法は使えませんでした。
どうすれば、親の.item
の幅を超えて、文の長さに適度な(普通にwidth:auto;
指定のときのような)幅にできるでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/24 02:36
2019/05/24 02:39
2019/05/24 06:00
2019/05/24 06:17
2019/05/24 06:54
2019/05/24 07:13
2019/05/24 07:39