Динамический / отзывчивый размер CSS

У меня есть карта с маркерами местоположения, и я хочу изменить размер маркеров, когда пользователь увеличивает / уменьшает масштаб. Я фиксирую уровень масштабирования в состоянии, и это число с плавающей запятой (например, 11,3235).

Как я могу передать это число (из состояния) в класс css, чтобы размер моих маркеров динамически изменял свой размер? Вместо того, чтобы иметь маленький / средний / большой маркер, я хочу, чтобы ширина и высота моего маркера были точными в соответствии с уровнем масштабирования.

class Mapbox extends Component {
  constructor(props){
    super(props)
    this.state = {
      viewport: {
        width: 900,
        height: 500,
        latitude: 49.2463,
        longitude: -123.1162,
        zoom: 11
      },
      active_vehicles: [],
      marker_size: 0,
    };
  }

  _onViewportChange = viewport => {
    this.setState({viewport});

  // Depending on zoom level, change Markers' class to dynamically change their display size/style
    this.setState({marker_size: this.state.viewport.zoom})

  };

  createMarkers = () => {
    let markers = []

    if (this.state.active_vehicles){
      for (let i = 0; i < this.state.active_vehicles.length; i++) {
        markers.push(
        <Marker key = {i} latitude = {this.state.active_vehicles[i]["Latitude"]} longitude = {this.state.active_vehicles[i]["Longitude"]}>
          <div className = {"location-marker " + this.state.marker_size}></div>
        </Marker>
        )
      }
      return markers
    }
  }

  render() {
    return (
      <ReactMapGL
        // mapbox API access token
        mapboxApiAccessToken = {MAPBOX_TOKEN}
        mapStyle = "mapbox://styles/mapbox/dark-v9"
        {...this.state.viewport}
        onViewportChange = {this._onViewportChange}>

        <div>
          {this.createMarkers()}
        </div>

      </ReactMapGL>
    );
  }   
}

Я не думаю, что вы можете передать состояние CSS. Но вы можете использовать встроенный стиль. Создайте объект стиля в функции рендеринга и на основе вашего значения состояния масштабирования вычислите размер маркеров. Вы можете проверить в документации по реакции о встроенном стиле. Это должно помочь

Mohit Tilwani 04.11.2018 01:46

Ваши маркеры в svg? Веб-шрифт? Что отображает .location-marker?

Meir 04.11.2018 13:13
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
2
81
0

Другие вопросы по теме