2020
08/14

細かすぎて使い道がないかもしれないBootstrap4小技集10選

Bootstrap4がリリースされてから約2年半になり、私自身も通常のWebサイトやWebアプリなどでよく使うようになりました。
基本的には指定のクラスをつけてわずかなJavascriptを書くだけで大抵のことは事足りますが、凝ったレイアウトや思い通りの挙動を実装するためにはちょっとしたコツや知識が必要です。

今回は私がBootstrap4を使う中で身につけた(というかググったというか試したというか…)、細かすぎるBootstrap4の小技を10個ご紹介します。

極力自前のスタイルは書かず、標準クラスで対応するようにし、Javascriptも必要最小限になるように意識しています。

DEMO

ADs

overflow:scrollを使わないレスポンシブなテーブル

DEMO

Bootstrap4ではtableをdiv.table-responsiveで囲うことでレスポンシブ対応となるのですが、これは親要素がoverflow:autoとなり狭いウインドウでは横スクロールして閲覧させるというものです。

大抵のケースではそれで問題ないですが、セルを組み替えてスクロールさせずに見せる方法です。

HTML

狭いウインドウのときは.row>.colのグリッドレイアウトとし、広いウインドウの場合はd-table-row/d-table-cellクラスによって通常のtableとして表示させます。

colを指定することでwidth:100%となってしまうため、width:autoとするスタイルが必要です。
borderは好みで指定してください。

色を足す

DEMO

Bootstrap4の配色は標準では

primary
secondary
success
info
warning
danger
light
dark

の8色が用意されています。
しかしsuccess/info/danger/warningはアラートで使うものですので、有彩色では実質primaryとsecondaryしか使える色がありません。

Bootstrap4の色は$theme-colorsという配列で管理されています。
この配列に好きな色を追加することで、デフォルトの8色と同じくtext-xxx/bg-xxx/border-xxxのように使うことができます。

bootstrap.scssの中の@import “variables”;より後ろ、@import “mixins”;より前に追加してください。

文字サイズ(diplay-x)を足す

DEMO

Bootstrap4では文字サイズ調整用のクラスとしてdisplay-1~4が用意されています。
display-1~4は_type.scssというファイルで定義されていますので記述方法などを参考にしてみてください。

たとえば、display-5~7を足す場合は以下のようになります。

border-sm-top,border-md-0などを足す

DEMO

Bootstrap4のborderクラスにはレスポンシブ対応のクラスが用意されておらず、「狭いウインドウならborder-top、広いウインドウならborder-right」ということができません(標準機能としてあってもよさそうですが)

下記を追加することで

border-sm //ウインドウサイズsm以上のときにborderがつく
border-sm-top //ウインドウサイズsm以上のときにborder-topがつく
border-sm-0 //ウインドウサイズsm以上のときにborderがなくなる

のように使うことができます。

@import “mixins”;より後ろ、@import “utilities”;より前のどこかに記述してください。

ネガティブマージン

DEMO

Bootstrap4の標準クラスですが、Ver.4.2以降で使えるクラスなのでご存知ない方も多いかもしれません。

「m-n5/mt-sm-n3」のようにmargin用クラスにnをつけることでマイナス値のマージンが設定されます。

複数開けるModal

DEMO

Bootstrap4のモーダルは1枚しか開けないようになっています。

Nested modals aren’t supported as we believe them to be poor user experiences.
Modal

「ネストされたモーダルはUXを損なうと思うのでサポートしていません」という意味でしょうか。
分からないでもないですが…多重にモーダルを開きたいときもあるでしょう。

HTML

モーダル本体のHTMLはbody直下にくるように書きます。

Javascript

data-toggle=”modal”を書いておけば多重でモーダルを開くことはできるのですが、モーダル本体と背景の黒いやつのz-indexが固定値なのでそこをJavascriptで調整します。

横に開くCollapse

DEMO

Collapseは標準では縦方向に開きますが、横方向に開かせる方法です。

Collapseはheightを0から要素の高さにアニメーションさせることで開閉を実現しているため、横方向にするためには

1.heightを固定(auto)にする
2.開閉のアニメーションをtransformX(-100%)→transformX(0)とする

の2点を実現させる必要があります。

まずHTMLについては、collapseをoverflow:hidden;の要素で囲います。

ウインドウサイズsm以上のときは横に、以下のときは通常通り縦方向に、とする場合は以下のCSSを追加します。

ただしこの方法では横に開く場合でもheightを取得、設定する処理自体は発生するため、Collapseを開くタイミングがワンテンポ遅れます。この点を回避したい場合はソースを修正して再ビルドする必要があります。

1枚開いたら他を閉じるCollapse

DEMO

1枚を開いたら他のCollapseを閉じる(つまりアコーディオン)動きについて、Bootstrap4のドキュメントでは.accordionクラスが必要とかcardコンポーネントでないと使えないような記述になっていますが、data-parent属性を足すだけで実現可能です。

親要素にIDを設定し、collapseには「data-parent=”親のID”」とすることでcollapseを開いたときに「自分以外を閉じる」という処理が追加されます。

動的に追加される要素でもTooltipを有効にする

DEMO

tooltipを有効にする場合、属性としてdata-toggle=”tooltip”を足し、

を実行する必要があります。

動的に追加される要素にもtooltipを使いたい場合、要素が追加されるたびにtooltip()を呼ぶ必要があるのですが、面倒くさいのでMutationObserverでDOMの変更を監視し、変更があったらtooltip()を呼ぶ方法です。

負荷を考えると必要なときだけtooltip()を実行するほうがいいと思いますが、手抜きをしたいときは試してみてください。

Popoverのcontentsを動的に生成した際に位置がずれるのを回避する

DEMO

Popoverの内容を固定値ではなく、

1.Popoverを開くアクションを起こす(hoverやclickなど)
2.Popoverの内容を動的に生成(何かを計算したりAjaxで取得したり)
3.Popoverを表示

のように動的に生成する場合、表示位置の計算が内容の生成前に行われるため、Popoverの表示位置がずれたり表示時にガタついたりすることがあります。

初期表示はopacity:0にしておき、内容の生成が完了したらpopoverLoadedクラスを追加してopacity:1にするという方法です。

inserted.bs.popoverはpopover用のdivが挿入された直後に発生するイベントです。
表示時のイベントは
show.bs.popover→inserted.bs.popover→shown.bs.popover
の順番に発生します。

また、popoverのイベント内でthisはdata-toggle=”popover”が設定された要素(ボタンなど)であり、popover本体ではありません。
popover本体はaria-describedby属性の値がIDとなっています。

まとめ

Bootstrap4をより便利に使う小技やトラブル解決テクニックのご紹介でした。
Bootstrap5がリリースされたら役に立たない記事になってしまうかもしれませんが、それまでは誰かの役に立てば幸いです。

ADs

Post Comments

メールアドレスが公開されることはありません。

Comments

コメントはまだありません。