5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Material-UIのRaisedButtonでラベルが見切れたときに三点リーダを表示する

Posted at

※本記事の内容はMaterial-UI v0.16.7にもとづいています。

RaisedButtonの構造

RaisedButtonは、下記のようなHTML構造になっている。

<div>・・・①
  <button>・・・②
    <div>・・・③
      <div>・・・④
        <span>「ラベル文字列」</span>・・・⑤
      </div>
    </div>
  </button>
</div>

RaisedButtonのスタイル関連のプロパティ

RaisedButtonにはスタイルを指定するプロパティが複数存在する。
表にまとめると下記の通り。

プロパティ名 説明 HTML構造における対応箇所
buttonStyle button要素のインラインスタイルを上書きする
labelStyle ボタンのラベル要素のインラインスタイルを上書きする
overlayStyle ボタンオーバーレイ時のインラインスタイルを上書きする
rippleStyle ボタン押下時の波紋のインラインスタイルを上書きする クリック時に③と④の間に生成されるspan
style ルート要素のインラインスタイルを上書きする

RaisedButtonのデフォルト状態での描画

RaisedButtonに対して何もスタイルを指定しないと下図のようなり、画面幅を縮めた場合などにラベルが入り切らない。
スクリーンショット 2017-04-17 17.24.29.png

default.js
<RaisedButton
  label="ラベルラベルラベルラベル"
  primary={true} />

RaisedButtonのラベルがはみ出たときに3点リーダにする

下図のように、3点リーダに置き換えるには少し工夫が必要になる。
スクリーンショット 2017-04-17 17.16.59.png

ポイントは下記3つ

  • ルート要素(①)にwidthを指定し、minWidthを解除する(親要素に幅を合わせる)
  • ③の要素にoverflow, white-space, text-overflowを指定する
  • ラベル要素(⑤)にpadding-left, padding-rightを指定する(キレイに見せるため)

③に関しては、RaisedButtonのプロパティで指定できないので、インラインではなくcssに切り出す。
最終的なソースコードは下記。

ellipsis.js
<RaisedButton
  label="ラベルラベルラベルラベル"
  primary={true}
  style={{width: '100%', minWidth: 0}}
  labelStyle={{paddingLeft: 0, paddingRight: 0}}
  className="ellipsisButton" />
layout.css
.ellipsisButton button div div {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}
5
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?