Skip to content
Retrieve all Leaflet Default Icon options from CSS, in particular all icon images URL's, to improve compatibility with bundlers and frameworks that modify URL's in CSS.
Branch: master
Clone or download
ghybs chore(pkg): bump patch version to 0.1.1
includes:
- fix for Chrome, need to append temporary element to document.body to be able to read its background image.
Latest commit 23ebe76 Jun 19, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
dist fix(CSS): use normal url path Jun 19, 2018
docs
src fix(plugin): add to body for Chrome Jun 19, 2018
webpack-demo refactor(demo): move built files to built folder Jun 19, 2018
.editorconfig feat(plugin): functional plugin Jun 19, 2018
.gitignore feat(plugin): functional plugin Jun 19, 2018
LICENSE Initial commit Jun 15, 2018
README.md docs(README): add npm install command Jun 19, 2018
package-lock.json
package.json chore(pkg): bump patch version to 0.1.1 Jun 19, 2018
rollup.config.js fix(build): remove copy of dist/images Jun 19, 2018

README.md

leaflet-defaulticon-compatibility

Retrieve all Leaflet Default Icon options from CSS, in particular all icon images URL's, to improve compatibility with bundlers and frameworks that modify URL's in CSS. Demo with webpack (and without this plugin).

GitHub releases npm

Size: < 2kB minified

Note: here, "compatibility" does not refer to browser compatibility, but with build engines and frameworks that modify URL's in CSS, which often conflicts with Leaflet built-in Default Icon images automatic management. See issue Leaflet/Leaflet#4698 for more details.

Usage

$ npm install leaflet-defaulticon-compatibility --save

Load this plugin CSS and JS files after Leaflet CSS and JS. Then the Leaflet default icon should automatically work again, even if your build engine or framework modifies the URL's in CSS, typically:

For example for webpack with style-loader + css-loader + file-loader:

import 'leaflet/dist/leaflet.css';
import 'leaflet-defaulticon-compatibility/dist/leaflet-defaulticon-compatibility.webpack.css'; // Re-uses images from ~leaflet package
import * as L from 'leaflet';
import 'leaflet-defaulticon-compatibility';

CSS file

This plugin provides 2 similar CSS files:

  • leaflet-defaulticon-compatibility.css: use it by default.
  • leaflet-defaulticon-compatibility.webpack.css: alternative for webpack / bundlers that understand the ~leaflet syntax to navigate to other packages in node_modules. This avoids duplicating the images/marker-icon.png file from leaflet.css, hence saving some bytes, especially when the images is inlined as DataURI/base64 (even though with gzip compression this should not be an issue).

Warning: Data URI (base64) images performance

Some bundlers automatically replace url(path) in CSS by Data URI (aka base64-encoded) image (i.e. url(data:image/png;base64,SOME_DATA)). That is typically the case of webpack url-loader and Django pipeline.

If your map displays hundreds of Markers using this inlined image as icon, be aware that it will affect the browser performance much more quickly than using a normal URL file.

Fix: Firefox high contrast (colours override) option

This plugin also fixes an edge case in Firefox when a user has configured their browser to always override the websites colours.

When that option is set to "Always" in Firefox preferences, all background images are removed. Therefore Leaflet can no longer detect the default icon images path that was clued through CSS .leaflet-default-icon-path class background-image rule.

In that case, this plugin will try to use the cursor rule instead which is not affected by Firefox colours override option. Therefore the plugin CSS duplicates the images path in both background-image and cursor rules.

However, if you use this plugin to specify your own icon in CSS, make sure to still use background-image rule as the first mean to pass your images path, because Internet Explorer always interpretes URL's in cursor rule as absolute.

License

license

leaflet-defaulticon-compatibility is distributed under the BSD 2-clause "Simplified" License, like Leaflet.

You can’t perform that action at this time.