2017-02-16 10 views
2

マテリアルUIのIconButtonコンポーネントにツールヒント属性を使用したいと考えています。しかし、私のツールチップの値は長い文字列です。ツールチップのポップアップテキストのために、1行ではなく、複数行で読み込むように文字列を設定するにはどうすればよいですか?Material UI IconButtonのツールチップテキストに複数の行を設定するにはどうすればよいですか?

const longSentenceForToolTop = "this is a really long tip and I would like to set it to multiple lines so I do not have one really long line as my tip going across my view because that would be obnoxious" 

<IconButton 
    tooltip={longSentenceForToolTop} 
    tooltipPosition="top-center"> 
    <FontIcon 
    className="material-icons"> 
    info_outline 
    </FontIcon> 
</IconButton> 

更新:

私のコードは次のようになります。

const toolTipText = (text) => (
    <div style={{lineHeight: 15px, whiteSpace: pre}}> 
    </div> 
); 

    <IconButton 
     tooltip={tipText(text)} 
     tooltipPosition="top-center"> 
     <FontIcon 
     className="material-icons"> 
     info_outline 
     </FontIcon> 
    </IconButton> 

今テキストは異なる行に分割が、アイコンの上ではなく、それより上に浮いています。アイコンの上にテキストを配置するためにCSSを使用しようとしていますが、私は成功しません。誰かがposition:relative setを持つ要素の位置を操作する方法を知っていますか?

答えて

1

line-breakのような新しいクラスを作成し、white-space: pre-lineというCSSプロパティを追加して、\nが改行として解釈されるようにすることができます。 はここで簡単な例である:あなたの特定のケースで

https://codepen.io/yowakita/pen/VPNxBV

、あなたはIconButtonのスタイルプロパティへwhiteSpaceをインライン化することができます。

const text = 'Hello, this is line one \n and this is line 2'; 
    return 
    <IconButton 
     style={{whiteSpace: 'pre-line'}} 
     tooltip={text} 
     tooltipPosition="top-center"> 
     <FontIcon 
     className="material-icons"> 
     info_outline 
     </FontIcon> 
    </IconButton> 

編集: you-がインラインスタイルでdivに文字列を配置し、その後IconButtontooltipプロパティにノードとしてそれをpasssing試すために、これは動作しませんでしたように思えます。それは数字、文字列、要素またはこれらの型を含む配列(またはそのフラグメント)を取り込むことができるように材料-UIでIconButtonためtooltipプロパティは、ノード型であること

const text = <div style={{whiteSpace: 'pre-line'}}>{'Hello, this is line one \n and this is line 2'}</div>; 
    return 
    <IconButton 
     tooltip={text} 
     tooltipPosition="top-center"> 
     <FontIcon 
     className="material-icons"> 
     info_outline 
     </FontIcon> 
    </IconButton> 

注意。

だからではなく、長い文字列を渡すのあなたも、このようなテキストの長い文字列という別れのdivのセットとして、別のコンポーネント/要素に渡すことができます:あなたは任意の要素にあなたを置くことができる

const longSentenceForToolTop = 
    <div> 
    <div>this is a really long tip and I would like to set it</div> 
    <div>to multiple lines so I do not have one really long</div> 
    <div>line as my tip going across my view because that would</div> 
    <div>be obnoxious</div> 
</div> 
+0

これは素晴らしい提案ですが、\ nが改行として解釈されても影響はありません。すべてのテキストはまだ1つですライン。あなたの他の提案に関しては、ツールチップのテキストに複数の行があるという意味で機能します。しかし、アイコンの上にマウスを置くと、ポップアップのツールチップのテキストが表示されます。これは正しくない動作です。テキストは、マウスがアイコンの上に置かれ、 'longSentenceForToolTip'のhtmlではなく、表示されるべきです。 – robertjewell

+0

インラインスタイルのdivを持つノードとしてテキストを挿入する別の方法でコメントを更新しました。第2のアプローチの問題点に関して、マテリアルデザインガイドラインでは、ツールチップはリッチコンテンツではなく簡潔なままであることが示唆されています。これらの原則を遵守しないと、Material-UIコンポーネントの予期しないレンダリングが発生する可能性があります。ツールチップ内のdivのスタイルを設定すると、https://material.io/guidelines/components/tooltips.html#tooltips-usage –

2

tooltipの内側にしたいだけではなく、テキスト:

<IconButton 
    tooltip={<div>First Line<br />Second Line</div>} 
    tooltipPosition="top-center"> 
    <FontIcon 
    className="material-icons"> 
    info_outline 
    </FontIcon> 
</IconButton> 

あなたはtooltipがされると、あなたが改行を強制したいどのくらいわからない場合は、使用することができます(DIVと力ワードラップのwidthを設定テキストを強制的に整列させることもできますあなたの中の左には中央に置かないでください):

+1

ヘルプが表示されます。私はwhiteSpaceプロパティを 'pre'と共に使用して改行を配置しました。今私は別の挑戦をしています。メッセージはアイコンの上に表示され、上には表示されません。さらに、私はicon要素の上にメッセージを配置することに苦労しています。 – robertjewell

関連する問題