【Leaflet】CSSを使って独自のUIを追加する

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【Leaflet】CSSを使って独自のUIを追加する

2022-8-23 | ,

Leafletで作った地図にライブラリの機能を使わずにCSSを使って独自のUIを追加したい!

概要

今回の記事では、Leafletで作った地図にライブラリの機能を使わずにCSSを使って独自のUIを追加する手順を掲載する。

仕様書

環境

  • Leaflet 1.7.1

手順書

今回は、Leafletで作った地図の中にLeafletの機能を使わずにCSSを使って独自のUIを追加する。
JSを使わずにHTMLを直接入力できるので、こちらの方が簡単かつ自由にUIを作ることができる。

コードは下記のようになる。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Leaflet Test</title>
    <style>
      .menu-right {
        position: absolute;
        top: 10px;
        right: 10px;
        background-color: #ffffff;
        z-index: 400;
        padding: 16px;

        overflow: hidden;
        border-radius: 8px;
        box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
      }
    </style>
    <link
      rel="stylesheet"
      href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css"
    />
    <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
    <script>
      function init() {
        var image = {
          url: "https://blog.nekonium.com/wp-content/uploads/catacombs_of_the_cursed_witch.png",
          width: 2030,
          height: 2730,
        };

        var map = L.map("leaflet-container", {
          crs: L.CRS.Simple,
          minZoom: -1,
          maxZoom: 5,
        });

        var imageBounds = L.latLngBounds([
          map.unproject([0, image.height], 4),
          map.unproject([image.width, 0], 4),
        ]);

        map.fitBounds(imageBounds);
        map.setMaxBounds(imageBounds.pad(0.5));

        L.imageOverlay(image.url, imageBounds).addTo(map);
      }
    </script>
  </head>
  <body onload="init()">
    <div
      id="leaflet-container"
      style="position: absolute; top: 0; left: 0; right: 0; bottom: 0"
    ></div>
    <div class="menu-right">
      <a target="_blank" href="https://blog.nekonium.com">ネコニウム研究所</a>
    </div>
  </body>
</html>

解説

地図の上に重ねて表示する要素に設定するクラス(CSS)。

      .menu-right {
        position: absolute;
        top: 10px;
        right: 10px;
        background-color: #ffffff;
        z-index: 400;
        padding: 16px;

        overflow: hidden;
        border-radius: 8px;
        box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
      }

ポイントは下記の2点。

  • position: absolute;で絶対位置に配置されるよう設定する。
  • z-index: 400;でz順(要素の重なり準)を400以上に設定する。
    <div class="menu-right">
      <a target="_blank" href="https://blog.nekonium.com">ネコニウム研究所</a>
    </div>

デモ

CODEPENで動かしてみると下記のような感じ。

See the Pen
Leaflet Add UI Test 2
by 108nen (@108nen)
on CodePen.

前回同様、CODEPEN上でCSSが効かない…。(編集画面では効いてる)
後で直します。

まとめ(感想文)

CSSを使った実装の方がPHPやASPと連携しやすい気がする。