ダウンロード

モーダル


どのようなコンテンツでも含めることができる、クラシックなモーダルオーバーレイ

モーダル構造は非常にシンプル

  • modal: メインコンテナ
    • modal-background: 透明のオーバーレイで、クリックしてモーダルを閉じるターゲットとして作用できる
    • modal-content: 640px の最大幅で、水平方向と垂直方向に中央揃えされたコンテナで、任意のコンテンツを含めることができる
    • modal-close: 右上に配置された単純な十字

<div class="modal">
  <div class="modal-background"></div>
  <div class="modal-content">
    <!-- Any other Bulma elements you want -->
  </div>
  <button class="modal-close is-large" aria-label="close"></button>
</div>

アクティブ化するには、.modal コンテナに is-active モディファイアを追加する。また、スクロールオーバーフローを停止するには、(通常は html) のコンテナー要素に is-clipped モディファイアを追加することもできる。

JavaScript 実装例
Bulma には JavaScript が含まれていません。ただし、自由に使用できる JS 実装例 がこのドキュメントに記載されています。

画像モーダル #

モーダルには望むものを何でも含めることができるため、画像ギャラリーを非常に簡単に作成できます。

画像モーダルを起動

<div class="modal">
  <div class="modal-background"></div>
  <div class="modal-content">
    <p class="image is-4by3">
      <img src="https://bulma.dokyumento.jp/assets/images/placeholders/1280x960.png" alt="">
    </p>
  </div>
  <button class="modal-close is-large" aria-label="close"></button>
</div>

ヘッドボディフットのある、よりクラシックなモーダルが必要な場合は modal-card を使用する。

<div class="modal">
  <div class="modal-background"></div>
  <div class="modal-card">
    <header class="modal-card-head">
      <p class="modal-card-title">Modal title</p>
      <button class="delete" aria-label="close"></button>
    </header>
    <section class="modal-card-body">
      <!-- Content ... -->
    </section>
    <footer class="modal-card-foot">
      <div class="buttons">
        <button class="button is-success">Save changes</button>
        <button class="button">Cancel</button>
      </div>
    </footer>
  </div>
</div>

JavaScript 実装例 #

Bulma パッケージにはJavaScript は含まれていません。ただし、実装の例を次に示します。これは、バニラ JavaScript でカスタム要素のを click ハンドラーを設定します。

この実装には 3 つの部分があります。

  • モーダルの HTML を追加する (このモーダルはデフォルトで非表示)
  • モーダルをトリガーするためのボタンの HTML を追加する (このボタンは自由にスタイルを設定できる)
  • トリガーclick イベントを追加して、モーダルを開く JS コードを追加する。

1. モーダルの HTML を追加する

ページの末尾、終了 </body> タグの前に、次の HTML スニペットを追加する

<div id="modal-js-example" class="modal">
  <div class="modal-background"></div>

  <div class="modal-content">
    <div class="box">
      <p>Modal JS example</p>
      <!-- Your content -->
    </div>
  </div>

  <button class="modal-close is-large" aria-label="close"></button>
</div>

id 属性の値は一意にする必要があります。

2. トリガーの HTML を追加する

ページのどこかで、次の HTML ボタンを追加する

<button class="js-modal-trigger" data-target="modal-js-example">
  Open JS example modal
</button>

js-modal-trigger CSS クラスと適切な data-target 値があれば、好きなようにスタイルを設定できる。たとえば、Bulma の button is-primary クラスを追加できる

3. トリガーの JS を追加する

script 要素 (または別の .js ファイル) に、次の JS コードを追加する

document.addEventListener('DOMContentLoaded', () => {
  // Functions to open and close a modal
  function openModal($el) {
    $el.classList.add('is-active');
  }

  function closeModal($el) {
    $el.classList.remove('is-active');
  }

  function closeAllModals() {
    (document.querySelectorAll('.modal') || []).forEach(($modal) => {
      closeModal($modal);
    });
  }

  // Add a click event on buttons to open a specific modal
  (document.querySelectorAll('.js-modal-trigger') || []).forEach(($trigger) => {
    const modal = $trigger.dataset.target;
    const $target = document.getElementById(modal);

    $trigger.addEventListener('click', () => {
      openModal($target);
    });
  });

  // Add a click event on various child elements to close the parent modal
  (document.querySelectorAll('.modal-background, .modal-close, .modal-card-head .delete, .modal-card-foot .button') || []).forEach(($close) => {
    const $target = $close.closest('.modal');

    $close.addEventListener('click', () => {
      closeModal($target);
    });
  });

  // Add a keyboard event to close all modals
  document.addEventListener('keydown', (event) => {
    if(event.key === "Escape") {
      closeAllModals();
    }
  });
});

modal 要素に is-active モディファイアクラスを切り替えることができる限り、実装方法は自由に選択できる。

Sass と CSS 変数 #

Sass 変数
CSS 変数
$modal-z
var(--bulma-modal-z)
40
$modal-background-background-color
var(--bulma-modal-background-background-color)
hsla(
  var(--bulma-scheme-h),
  var(--bulma-scheme-s),
  var(--bulma-scheme-invert-l),
  0.86
)
$modal-content-width
var(--bulma-modal-content-width)
40rem
$modal-content-margin-mobile
var(--bulma-modal-content-margin-mobile)
1.25rem
$modal-content-spacing-mobile
var(--bulma-modal-content-spacing-mobile)
10rem
$modal-content-spacing-tablet
var(--bulma-modal-content-spacing-tablet)
2.5rem
$modal-close-dimensions
var(--bulma-modal-close-dimensions)
2.5rem
$modal-close-right
var(--bulma-modal-close-right)
1.25rem
$modal-close-top
var(--bulma-modal-close-top)
1.25rem
$modal-card-spacing
var(--bulma-modal-card-spacing)
2.5rem
$modal-card-head-background-color
var(--bulma-modal-card-head-background-color)
var(--bulma-scheme-main)
$modal-card-head-padding
var(--bulma-modal-card-head-padding)
2rem
$modal-card-head-radius
var(--bulma-modal-card-head-radius)
var(--bulma-radius-large)
$modal-card-title-color
var(--bulma-modal-card-title-color)
var(--bulma-text-strong)
$modal-card-title-line-height
var(--bulma-modal-card-title-line-height)
1
$modal-card-title-size
var(--bulma-modal-card-title-size)
var(--bulma-size-4)
$modal-card-foot-background-color
var(--bulma-modal-card-foot-background-color)
var(--bulma-scheme-main-bis)
$modal-card-foot-radius
var(--bulma-modal-card-foot-radius)
var(--bulma-radius-large)
$modal-card-body-background-color
var(--bulma-modal-card-body-background-color)
var(--bulma-scheme-main)
$modal-card-body-padding
var(--bulma-modal-card-body-padding)
2rem
$modal-breakpoint
var(--bulma-)
iv.$tablet

Bulmaをサポートする方法

#native_company# #native_desc#
#native_cta#