UNPKG

maplair

Version:

JavaScript library for mobile-friendly interactive maps

731 lines (599 loc) • 11.6 kB
/* required styles */ .maplair-pane, .maplair-tile, .maplair-marker-icon, .maplair-marker-shadow, .maplair-tile-container, .maplair-pane > svg, .maplair-pane > canvas, .maplair-zoom-box, .maplair-image-layer, .maplair-layer { position: absolute; left: 0; top: 0; width:100%; } .maplair-container { overflow: hidden; } .maplair-tile, .maplair-marker-icon, .maplair-marker-shadow { user-select: none; -webkit-user-drag: none; -webkit-touch-callout: none; } /* Safari renders non-retina tile on retina better with this, but Chrome is worse */ .maplair-safari { .maplair-tile { image-rendering: -webkit-optimize-contrast; } /* hack that prevents hw layers "stretching" when loading new tiles */ .maplair-tile-container { width: 1600px; height: 1600px; -webkit-transform-origin: 0 0; } } .maplair-marker-icon, .maplair-marker-shadow { display: block; } /* .maplair-container svg: reset svg max-width declaration shipped in Joomla! (joomla.org) 3.x */ /* .maplair-container img: map is broken in FF if you have max-width: 100% on tiles */ .maplair-container { .maplair-overlay-pane svg { max-width: none !important; max-height: none !important; } .maplair-marker-pane img, .maplair-shadow-pane img, .maplair-tile-pane img, img.maplair-image-layer, .maplair-tile { max-width: none !important; max-height: none !important; width: auto; padding: 0; } img.maplair-tile { /* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */ mix-blend-mode: plus-lighter; } &.maplair-touch-zoom { touch-action: pan-x pan-y; } &.maplair-touch-drag { /* Fallback for FF which doesn't support pinch-zoom */ touch-action: none; touch-action: pinch-zoom; &.maplair-touch-zoom { touch-action: none; } } -webkit-tap-highlight-color: transparent; a { -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); } } .maplair-tile { visibility: hidden; } .maplair-tile-loaded { visibility: inherit; } .maplair-zoom-box { width: 0; height: 0; box-sizing: border-box; z-index: 800; } .maplair-pane { z-index: 400; } .maplair-tile-pane { z-index: 200; } .maplair-overlay-pane { z-index: 400; } .maplair-shadow-pane { z-index: 500; } .maplair-marker-pane { z-index: 600; } .maplair-tooltip-pane { z-index: 650; } .maplair-popup-pane { z-index: 700; } .maplair-map-pane { canvas { z-index: 100; } svg { z-index: 200; } } /* control positioning */ .maplair-control { position: relative; z-index: 800; pointer-events: auto; float: left; clear: both; } .maplair-top, .maplair-bottom { position: absolute; z-index: 1000; pointer-events: none; } .maplair-top { top: 0; .maplair-control { margin-top: 10px; } } .maplair-right { right: 0; .maplair-control { float: right; margin-right: 10px; } } .maplair-bottom { bottom: 0; .maplair-control { margin-bottom: 10px; } } .maplair-left { left: 0; .maplair-control { margin-left: 10px; } } /* zoom and fade animations */ .maplair-fade-anim { .maplair-popup { opacity: 0; transition: opacity 0.2s linear; } .maplair-map-pane .maplair-popup { opacity: 1; } } .maplair-zoom-animated { transform-origin: 0 0; svg& { will-change: transform; } } .maplair-zoom-anim { .maplair-zoom-animated { transition: transform 0.25s cubic-bezier(0, 0, 0.25, 1); } .maplair-tile { transition: none; } .maplair-zoom-hide { visibility: hidden; } } .maplair-pan-anim .maplair-tile { transition: none; } /* cursors */ .maplair-interactive { cursor: pointer; } .maplair-grab { cursor: grab; } .maplair-crosshair { cursor: crosshair; .maplair-interactive { cursor: crosshair; } } .maplair-popup-pane, .maplair-control { cursor: auto; } .maplair-dragging { .maplair-grab { cursor: grabbing; .maplair-interactive { cursor: grabbing; } } .maplair-marker-draggable { cursor: grabbing; } } /* marker & overlays interactivity */ .maplair-marker-icon, .maplair-marker-shadow, .maplair-image-layer, .maplair-pane > svg path, .maplair-tile-container { pointer-events: none; } .maplair-marker-icon.maplair-interactive, .maplair-image-layer.maplair-interactive, .maplair-pane > svg path.maplair-interactive, svg.maplair-image-layer.maplair-interactive path { pointer-events: auto; } /* visual tweaks */ .maplair-container { background: #ddd; outline-offset: 1px; a { color: #0078a8; } } /* prevent showing outline-box on Chromium when clicking on a vector with a tooltip */ path.maplair-interactive:focus:not(:focus-visible) { outline: 0; } .maplair-zoom-box { border: 2px dotted #38f; background: rgba(255, 255, 255, 0.5); } /* general typography */ .maplair-container { font-family: "Helvetica Neue", Arial, Helvetica, sans-serif; font-size: 12px; font-size: 0.75rem; line-height: 1.5; } /* general toolbar styles */ .maplair-bar { box-shadow: 0 1px 5px rgba(0, 0, 0, 0.65); border-radius: 4px; a { background-color: #fff; border-bottom: 1px solid #ccc; width: 26px; height: 26px; line-height: 26px; display: block; text-align: center; text-decoration: none; color: black; background-position: 50% 50%; background-repeat: no-repeat; display: block; &:hover, &:focus { background-color: #f4f4f4; } &:first-child { border-top-left-radius: 4px; border-top-right-radius: 4px; } &:last-child { border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-bottom: none; } &.maplair-disabled { cursor: default; background-color: #f4f4f4; color: #bbb; } } } .maplair-control-layers-toggle { background-position: 50% 50%; background-repeat: no-repeat; display: block; } .maplair-touch .maplair-bar a { width: 30px; height: 30px; line-height: 30px; &:first-child { border-top-left-radius: 2px; border-top-right-radius: 2px; } &:last-child { border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; } } /* zoom control */ .maplair-control-zoom-in, .maplair-control-zoom-out { font: bold 18px "Lucida Console", Monaco, monospace; text-indent: 1px; .maplair-touch & { font-size: 22px; } } /* layers control */ .maplair-control-layers { box-shadow: 0 1px 5px rgba(0, 0, 0, 0.4); background: #fff; border-radius: 5px; .maplair-control-layers-list { display: none; } } .maplair-control-layers-toggle { background-image: url(images/layers.svg); width: 36px; height: 36px; .maplair-touch & { width: 44px; height: 44px; } } .maplair-control-layers-expanded { .maplair-control-layers-toggle { display: none; } .maplair-control-layers-list { display: block; position: relative; } } .maplair-control-layers-list { border: 0; margin: 0; padding: 0; } .maplair-control-layers-expanded { padding: 6px 10px 6px 6px; color: #333; background: #fff; } .maplair-control-layers-scrollbar { overflow-y: scroll; overflow-x: hidden; padding-right: 5px; } .maplair-control-layers-selector { margin-top: 2px; position: relative; top: 1px; } .maplair-control-layers label { display: block; font-size: 13px; font-size: 1.08333em; } .maplair-control-layers-separator { height: 0; border-top: 1px solid #ddd; margin: 5px -10px 5px -6px; } /* Default icon URLs */ .maplair-default-icon-path { /* used only in path-guessing heuristic, see DefaultIcon */ background-image: url(images/marker-icon.svg); } /* attribution and scale controls */ .maplair-container .maplair-control-attribution { background: #fff; background: rgba(255, 255, 255, 0.8); margin: 0; } .maplair-control-attribution, .maplair-control-scale-line { padding: 0 5px; color: #333; line-height: 1.4; } .maplair-control-attribution a { text-decoration: none; &:hover, &:focus { text-decoration: underline; } } .maplair-attribution-leaf { margin-right: 0.277em; } .maplair-left .maplair-control-scale { margin-left: 5px; } .maplair-bottom .maplair-control-scale { margin-bottom: 5px; } .maplair-control-scale-line { border: 2px solid #777; border-top: none; line-height: 1.1; padding: 2px 5px 1px; white-space: nowrap; box-sizing: border-box; background: rgba(255, 255, 255, 0.8); text-shadow: 1px 1px #fff; &:not(:first-child) { border-top: 2px solid #777; border-bottom: none; margin-top: -2px; &:not(:last-child) { border-bottom: 2px solid #777; } } } .maplair-touch { .maplair-control-attribution, .maplair-control-layers, .maplair-bar { box-shadow: none; } .maplair-control-layers, .maplair-bar { border: 2px solid rgba(0, 0, 0, 0.2); background-clip: padding-box; } } /* popup */ .maplair-popup { position: absolute; text-align: center; margin-bottom: 20px; } .maplair-popup-content-wrapper { padding: 1px; text-align: left; border-radius: 12px; } .maplair-popup-content { margin: 13px 24px 13px 20px; line-height: 1.3; font-size: 13px; font-size: 1.08333em; min-height: 1px; p { margin: 17px 0; margin: 1.3em 0; } } .maplair-popup-tip-container { width: 40px; height: 20px; position: absolute; left: 50%; margin-top: -1px; margin-left: -20px; overflow: hidden; pointer-events: none; } .maplair-popup-tip { width: 17px; height: 17px; padding: 1px; margin: -10px auto 0; pointer-events: auto; transform: rotate(45deg); } .maplair-popup-content-wrapper, .maplair-popup-tip { background: white; color: #333; box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4); } .maplair-container a.maplair-popup-close-button { position: absolute; top: 0; right: 0; border: none; text-align: center; width: 24px; height: 24px; font: 16px/24px Tahoma, Verdana, sans-serif; color: #757575; text-decoration: none; background: transparent; &:hover, &:focus { color: #585858; } } .maplair-popup-scrolled { overflow: auto; } /* div icon */ .maplair-div-icon { background: #fff; border: 1px solid #666; } /* Tooltip */ /* Base styles for the element that has a tooltip */ .maplair-tooltip { position: absolute; padding: 6px; background-color: #fff; border: 1px solid #fff; border-radius: 3px; color: #222; white-space: nowrap; user-select: none; pointer-events: none; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); &.maplair-interactive { cursor: pointer; pointer-events: auto; } } .maplair-tooltip-top:before, .maplair-tooltip-bottom:before, .maplair-tooltip-left:before, .maplair-tooltip-right:before { position: absolute; pointer-events: none; border: 6px solid transparent; background: transparent; content: ""; } /* Directions */ .maplair-tooltip-bottom { margin-top: 6px; &:before { left: 50%; margin-left: -6px; top: 0; margin-top: -12px; margin-left: -6px; border-bottom-color: #fff; } } .maplair-tooltip-top { margin-top: -6px; &:before { left: 50%; margin-left: -6px; bottom: 0; margin-bottom: -12px; border-top-color: #fff; } } .maplair-tooltip-left { margin-left: -6px; &:before { top: 50%; margin-top: -6px; right: 0; margin-right: -12px; border-left-color: #fff; } } .maplair-tooltip-right { margin-left: 6px; &:before { top: 50%; margin-top: -6px; left: 0; margin-left: -12px; border-right-color: #fff; } } /* Reduced motion */ @media (prefers-reduced-motion: reduce) { .maplair-fade-anim .maplair-popup { transition: none; } .maplair-fade-anim .maplair-map-pane .maplair-tile { transition: none; } .maplair-zoom-anim .maplair-zoom-animated { transition: none; } } /* Printing */ @media print { /* Prevent printers from removing background-images of controls. */ .maplair-control { -webkit-print-color-adjust: exact; print-color-adjust: exact; } }