• ⚠️ INFORMATION: SAFETY & SUPPORT Resources here are generally safe, but false positives may occur on Virustotal due to certain coding techniques. Exercise caution and test before use.

javascript Leaflet: I can add class, but I can't add style to GeoJSON

Joined
Dec 31, 2024
Messages
373
Reaction score
7
Points
18
User icon
<svg xmlns="http://www.w3.org/2000/svg" height="14" width="15.75" viewBox="0 0 576 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#63E6BE" d="M309 106c11.4-7 19-19.7 19-34c0-22.1-17.9-40-40-40s-40 17.9-40 40c0 14.4 7.6 27 19 34L209.7 220.6c-9.1 18.2-32.7 23.4-48.6 10.7L72 160c5-6.7 8-15 8-24c0-22.1-17.9-40-40-40S0 113.9 0 136s17.9 40 40 40c.2 0 .5 0 .7 0L86.4 427.4c5.5 30.4 32 52.6 63 52.6l277.2 0c30.9 0 57.4-22.1 63-52.6L535.3 176c.2 0 .5 0 .7 0c22.1 0 40-17.9 40-40s-17.9-40-40-40s-40 17.9-40 40c0 9 3 17.3 8 24l-89.1 71.3c-15.9 12.7-39.5 7.5-48.6-10.7L309 106z"/></svg>
In Leaflet, when you add a GeoJSON layer, styling and classes can be managed, but they work differently. To add style directly, you should use the style option or provide a style function when creating the L.geoJSON layer. However, if you're trying to dynamically apply a CSS class, that might need a workaround because GeoJSON styling is done inline.

Here’s how to resolve your issue:

Adding Styles

You can define styles for the GeoJSON using the style option:

JavaScript:
L.geoJSON(geojsonData, {

  style: function(feature) {

    return {

      color: 'blue', // Line color

      weight: 2, // Line thickness

      fillColor: 'yellow',// Fill color for polygons

      fillOpacity: 0.5 // Fill opacity

    };

  }

}).addTo(map);

Adding Classes

Leaflet doesn't directly support adding a className to GeoJSON features, but you can use the onEachFeature option with setStyle to manipulate DOM elements:

JavaScript:
L.geoJSON(geojsonData, {

  onEachFeature: function(feature, layer) {

    // Access the layer and its DOM element

    if (layer instanceof L.Path) {

      layer.setStyle({

        className: 'custom-class' // Add a custom class

      });

    }

  }

}).addTo(map);

Make sure you define the class in your CSS:
JavaScript:
.custom-class {

  stroke: red;

  stroke-width: 2px;

  fill: green;

  fill-opacity: 0.5;

}

Note on className and Inline Styles

If you're using className inside style, it appends a class to the SVG path for your features.

Inline styles (e.g., color, weight) take precedence over CSS rules. If you want to rely entirely on CSS, avoid defining inline styles in the style option.


Debugging Tips

Check the browser’s developer tools to see if the class is being applied.

Ensure that Leaflet version supports className (it was introduced in Leaflet 1.0.0 for Path elements).
 
Top