我的 map 是使用MapLibre GL实现的,但这个问题也会发生在Google Maps API或Mapbox GL上.

我有以下ReactJS组件:

import React, { useRef, useEffect } from "react";
import maplibregl from "maplibre-gl";
import map_style from "./style/style.json";

export default function Map() {
  const mapContainer = useRef(null);
  const map = useRef(null);

  useEffect(() => {
    if (map.current) return; //stops map from intializing more than once
    map.current = new maplibregl.Map({
      container: mapContainer.current,
      style: map_style,
      center: [12, 26],
    });
  });

  return (
      <div
        ref={mapContainer}
        className="my-map"
        style={{ height: 500, width: 500 }}
      />
  );
}

上面的代码呈现 map ,但我不想要固定的heightwidth.我需要根据父DOM元素、屏幕大小等应用不同的样式.

问题是,现在如果我在我的css文件中分配一个widthheight,它不会应用于 map .另一方面,如果我在ReactJS组件中删除或更改style={{ height: 500, width: 500 }}的语法, map 将无法显示.

在这种情况下,我如何使用CSS设置样式?

推荐答案

map 库需要读取容器尺寸来计算内视图.

只要您提供明确的大小(可能在className之间),就应该没问题.

大多数映射库还提供了一些API来请求重新读取容器尺寸,以便在显示容器或更改大小时可以调整视图(可能是为了响应).对于MapLibre GL JS,请参见resize() MAP方法:

根据其容器元素的维度调整贴图的大小.

判断贴图容器大小是否更改,如果更改则更新贴图.此方法必须在以编程方式调整 map 容器的大小后调用,或者在最初使用CSS隐藏 map 后显示 map 时调用.

Css相关问答推荐

基于子元素的子元素数量的样式元素

Javascript Splitter Divider hover color css

如何将CSS Paint API与Reaction一起使用

可折叠/可展开的数据表行:如何使Shadcn数据表中的可折叠内容全宽?

InertiaJS - Vue - Laravel:Using CSS Files

Nuxt 3+sass:不能将包含路径与@IMPORT和@USE一起使用

我找不出Firefox上奇怪的css行为的原因

如何使用混合混合模式更改动画背景上的文本 colored颜色

带有 flex 的 CSS 空 div 以扩展并保持纵横比

通过 CSS 中的媒体查询更改站点的页面大小

清除 CSS 中已设置的填充属性以恢复 SVG 的默认值

在 Tailwind css 中,间距对我不起作用

zoom 时闪烁的背景滤镜模糊

如何使用 TailwindCSS 禁用环形阴影?

如何始终在浏览器中显示垂直滚动条?

如何让 Firefox 在文件更改时自动刷新?

如何在不使用浮动的情况下垂直对齐 div?

如何从标题中删除粗体?

跨域 iframe 调整大小

CSS垂直对齐不适用于浮动