Code Templates Collection angularforall.com

- Carte Monde Interactive SVG Bootstrap 5

Carte Monde Svg Interactive Javascript Bootstrap 5 Html Css Js Visualisation International Animation Snippet Continents Data Viz

Carte du monde interactive en SVG avec présence mondiale sur les continents. Style professionnel Bootstrap 5 avec animations et effets au survol des zones.

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8" />
    <meta name="copyright" content="AngularForAll" />
    <meta name="author" content="AngularForAll" />
    <meta name="robots" content="noindex, nofollow" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="Cache-Control" content="public, max-age=604800" />
    <title>Snippet Carte Work HTML CSS JS SVG 2026 05080003 | AngularForAll</title>
<!-- Bootstrap 5 CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <style>
        :root {
            --primary: #0066FF;
            --dark: #0a0e27;
            --card-bg: #111533;
        }

        body {
            background-color: var(--dark);
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            color: white;
        }

        .world-map-section {
            padding: 80px 0;
            position: relative;
            overflow: hidden;
        }

        .world-map-section::before {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: radial-gradient(circle at 50% 50%, rgba(0, 102, 255, 0.05) 0%, transparent 70%);
            pointer-events: none;
        }

        .section-badge {
            display: inline-block;
            background: rgba(0, 102, 255, 0.1);
            color: var(--primary);
            padding: 8px 20px;
            border-radius: 50px;
            font-size: 14px;
            font-weight: 600;
            margin-bottom: 15px;
            border: 1px solid rgba(0, 102, 255, 0.2);
        }

        .section-title {
            font-size: 42px;
            font-weight: 700;
            margin-bottom: 20px;
            line-height: 1.2;
        }

        .section-subtitle {
            color: #8888aa;
            font-size: 16px;
            margin-bottom: 50px;
        }

        .map-container {
            position: relative;
            width: 100%;
            max-width: 1000px;
            margin: 0 auto;
            padding: 20px;
        }

        .world-map-svg {
            width: 100%;
            height: auto;
            filter: drop-shadow(0 10px 30px rgba(0, 102, 255, 0.2));
        }

        .continent-path {
            fill: #1a1f4e;
            stroke: #2a2f5e;
            stroke-width: 1.5;
            transition: all 0.3s ease;
            cursor: pointer;
        }

        .continent-path:hover {
            fill: #252a5e;
            stroke: #3a3f6e;
        }

        .continent-path.active {
            fill: #2a2f6e;
            stroke: #0066FF;
            stroke-width: 2;
        }

        .location-dot {
            cursor: pointer;
            transition: all 0.3s ease;
        }

        .location-dot:hover {
            filter: brightness(1.5);
        }

        .location-pulse {
            animation: pulse-animation 2s infinite;
        }

        @keyframes pulse-animation {
            0% {
                r: 4;
                opacity: 1;
            }
            50% {
                r: 8;
                opacity: 0.5;
            }
            100% {
                r: 4;
                opacity: 1;
            }
        }

        .location-tooltip {
            position: absolute;
            background: var(--card-bg);
            border: 1px solid rgba(255, 255, 255, 0.1);
            border-radius: 12px;
            padding: 10px 15px;
            pointer-events: none;
            z-index: 1000;
            display: none;
            backdrop-filter: blur(10px);
            white-space: nowrap;
        }

        .location-tooltip .tooltip-title {
            font-size: 13px;
            font-weight: 600;
            color: white;
            margin: 0;
        }

        .location-tooltip .tooltip-subtitle {
            font-size: 11px;
            color: #8888aa;
            margin: 3px 0 0 0;
        }

        .continent-list {
            display: flex;
            flex-wrap: wrap;
            gap: 10px;
            justify-content: center;
            margin-top: 40px;
        }

        .continent-tag {
            display: flex;
            align-items: center;
            gap: 8px;
            background: var(--card-bg);
            border: 1px solid rgba(255, 255, 255, 0.1);
            border-radius: 50px;
            padding: 10px 22px;
            cursor: pointer;
            transition: all 0.3s ease;
            font-size: 14px;
            font-weight: 500;
            color: #aaaacc;
        }

        .continent-tag:hover {
            border-color: var(--primary);
            color: white;
            transform: translateY(-2px);
            box-shadow: 0 10px 25px rgba(0, 102, 255, 0.2);
        }

        .continent-tag.active {
            background: var(--primary);
            border-color: var(--primary);
            color: white;
        }

        .continent-tag .tag-dot {
            width: 8px;
            height: 8px;
            border-radius: 50%;
        }

        .stats-row {
            display: flex;
            gap: 20px;
            justify-content: center;
            flex-wrap: wrap;
            margin-top: 30px;
        }

        .stat-item {
            background: var(--card-bg);
            border: 1px solid rgba(255, 255, 255, 0.1);
            border-radius: 16px;
            padding: 20px 30px;
            text-align: center;
            min-width: 150px;
            transition: all 0.3s ease;
        }

        .stat-item:hover {
            border-color: rgba(0, 102, 255, 0.4);
            transform: translateY(-3px);
        }

        .stat-value {
            font-size: 28px;
            font-weight: 700;
            color: white;
            display: block;
        }

        .stat-label {
            font-size: 13px;
            color: #8888aa;
            margin-top: 5px;
            display: block;
        }
    </style>
</head>
<body>

    <!-- Section Carte du Monde -->
    <section class="world-map-section">
        <div class="container">
            <!-- En-tête -->
            <div class="text-center mb-5">
                <span class="section-badge">🌍 Présence Mondiale</span>
                <h2 class="section-title">Nous sommes présents<br>sur tous les continents</h2>
                <p class="section-subtitle">Découvrez notre réseau international et nos implantations stratégiques</p>
            </div>

            <!-- Carte -->
            <div class="map-container" id="mapContainer">
                <!-- SVG World Map -->
                <svg class="world-map-svg" viewBox="0 0 1000 500" xmlns="http://www.w3.org/2000/svg">
                    <defs>
                        <radialGradient id="dotGlow">
                            <stop offset="0%" stop-color="#0066FF" stop-opacity="1"/>
                            <stop offset="100%" stop-color="#0066FF" stop-opacity="0"/>
                        </radialGradient>
                    </defs>
                    
                    <!-- Fond océan -->
                    <rect width="1000" height="500" fill="none"/>
                    
                    <!-- Grille de fond subtile -->
                    <g stroke="#1a1f3e" stroke-width="0.5" fill="none" opacity="0.5">
                        <line x1="0" y1="125" x2="1000" y2="125"/>
                        <line x1="0" y1="250" x2="1000" y2="250"/>
                        <line x1="0" y1="375" x2="1000" y2="375"/>
                        <line x1="250" y1="0" x2="250" y2="500"/>
                        <line x1="500" y1="0" x2="500" y2="500"/>
                        <line x1="750" y1="0" x2="750" y2="500"/>
                        <line x1="100" y1="0" x2="100" y2="500"/>
                        <line x1="900" y1="0" x2="900" y2="500"/>
                    </g>

                    <!-- === AMÉRIQUE DU NORD === -->
                    <g id="continent-northAmerica">
                        <path class="continent-path" 
                        d="M130,60 L155,35 L195,28 L230,32 L260,40 L285,35 
                           L310,42 L330,55 L350,58 L370,52 L390,60 
                           L400,72 L395,90 L385,105 L360,118 L340,128 
                           L315,135 L295,140 L275,150 L258,158 
                           L240,155 L225,148 L205,140 L185,130 
                           L165,118 L148,102 L135,80 Z"
                        data-continent="northAmerica"/>
                        
                        <!-- Groenland -->
                        <path class="continent-path"
                        d="M310,20 L335,12 L355,18 L368,30 L370,45 
                           L360,52 L340,58 L318,55 L305,42 Z"
                        data-continent="northAmerica"/>
                        
                        <!-- Points de localisation -->
                        <circle cx="200" cy="100" r="4" fill="#0066FF" class="location-dot location-pulse" 
                                data-location="New York" data-info="Siège Amérique du Nord"/>
                        <circle cx="340" cy="45" r="3" fill="#0066FF" class="location-dot" 
                                data-location="Toronto" data-info="Bureau régional"/>
                        <circle cx="160" cy="140" r="3" fill="#0066FF" class="location-dot" 
                                data-location="Mexico" data-info="Centre opérationnel"/>
                    </g>

                    <!-- === AMÉRIQUE DU SUD === -->
                    <g id="continent-southAmerica">
                        <path class="continent-path"
                        d="M195,165 L215,160 L235,162 L250,172 L268,185 
                           L278,200 L285,220 L290,245 L285,265 
                           L275,285 L260,298 L245,305 
                           L232,298 L222,278 L212,255 
                           L202,232 L195,210 L190,185 Z"
                        data-continent="southAmerica"/>
                        
                        <circle cx="265" cy="260" r="4" fill="#4ECDC4" class="location-dot location-pulse" 
                                data-location="São Paulo" data-info="Hub Amérique Latine"/>
                        <circle cx="225" cy="225" r="3" fill="#4ECDC4" class="location-dot" 
                                data-location="Lima" data-info="Bureau andin"/>
                    </g>

                    <!-- === EUROPE === -->
                    <g id="continent-europe">
                        <path class="continent-path"
                        d="M435,45 L455,32 L478,28 L498,32 L518,40 
                           L535,48 L548,58 L555,72 L555,90 
                           L545,105 L528,112 L512,115 
                           L495,112 L478,107 L465,100 
                           L452,90 L445,78 L438,62 Z"
                        data-continent="europe"/>
                        
                        <!-- Îles Britanniques -->
                        <path class="continent-path"
                        d="M420,55 L432,48 L442,52 L445,62 L440,72 L428,75 L418,68 Z"
                        data-continent="europe"/>
                        
                        <!-- Scandinavie -->
                        <path class="continent-path"
                        d="M462,18 L482,12 L502,18 L515,30 L508,42 L490,48 L472,44 L460,32 Z"
                        data-continent="europe"/>
                        
                        <circle cx="470" cy="68" r="5" fill="#FF6B6B" class="location-dot location-pulse" 
                                data-location="Paris" data-info="Siège Social"/>
                        <circle cx="495" cy="55" r="3" fill="#FF6B6B" class="location-dot" 
                                data-location="Berlin" data-info="Bureau Europe Centrale"/>
                        <circle cx="432" cy="60" r="3" fill="#FF6B6B" class="location-dot" 
                                data-location="Londres" data-info="Bureau International"/>
                    </g>

                    <!-- === AFRIQUE === -->
                    <g id="continent-africa">
                        <path class="continent-path"
                        d="M445,118 L460,112 L482,108 L502,108 
                           L522,112 L542,118 L555,130 L562,148 
                           L568,168 L570,190 L565,215 
                           L555,242 L540,268 L522,290 
                           L505,305 L490,312 L478,305 
                           L465,290 L452,268 L442,242 
                           L438,218 L440,192 L442,168 
                           L445,145 Z"
                        data-continent="africa"/>
                        
                        <!-- Madagascar -->
                        <path class="continent-path"
                        d="M575,268 L585,260 L592,270 L590,285 L580,288 L573,280 Z"
                        data-continent="africa"/>
                        
                        <circle cx="500" cy="200" r="4" fill="#F7DC6F" class="location-dot location-pulse" 
                                data-location="Nairobi" data-info="Hub Afrique"/>
                        <circle cx="470" cy="270" r="3" fill="#F7DC6F" class="location-dot" 
                                data-location="Johannesburg" data-info="Bureau Afrique Australe"/>
                        <circle cx="545" cy="170" r="3" fill="#F7DC6F" class="location-dot" 
                                data-location="Lagos" data-info="Bureau Afrique Ouest"/>
                    </g>

                    <!-- === ASIE === -->
                    <g id="continent-asia">
                        <path class="continent-path"
                        d="M570,50 L600,32 L640,25 L690,28 
                           L740,38 L785,52 L820,65 
                           L845,80 L860,98 L865,118 
                           L855,140 L838,158 L815,172 
                           L785,180 L748,185 L710,188 
                           L672,185 L640,175 L612,162 
                           L590,145 L575,125 L568,102 
                           L562,80 L565,62 Z"
                        data-continent="asia"/>
                        
                        <!-- Inde -->
                        <path class="continent-path"
                        d="M670,155 L688,148 L702,155 L712,170 
                           L715,188 L708,200 L692,205 
                           L678,195 L668,178 Z"
                        data-continent="asia"/>
                        
                        <!-- Japon -->
                        <path class="continent-path"
                        d="M855,85 L865,78 L872,88 L870,100 L860,102 L852,95 Z"
                        data-continent="asia"/>
                        
                        <!-- Asie du Sud-Est -->
                        <path class="continent-path"
                        d="M730,195 L745,190 L758,195 L768,208 L775,222 
                           L765,228 L748,225 L735,215 Z"
                        data-continent="asia"/>
                        
                        <circle cx="680" cy="110" r="5" fill="#96CEB4" class="location-dot location-pulse" 
                                data-location="Shanghai" data-info="Hub Asie-Pacifique"/>
                        <circle cx="710" cy="175" r="3" fill="#96CEB4" class="location-dot" 
                                data-location="Singapour" data-info="Centre financier"/>
                        <circle cx="860" cy="90" r="3" fill="#96CEB4" class="location-dot" 
                                data-location="Tokyo" data-info="Bureau Asie de l'Est"/>
                        <circle cx="690" cy="148" r="3" fill="#96CEB4" class="location-dot" 
                                data-location="Mumbai" data-info="Bureau Inde"/>
                    </g>

                    <!-- === OCÉANIE === -->
                    <g id="continent-oceania">
                        <path class="continent-path"
                        d="M730,290 L760,275 L790,278 L820,290 
                           L840,305 L848,322 L838,340 
                           L818,350 L790,355 L762,348 
                           L740,338 L728,320 Z"
                        data-continent="oceania"/>
                        
                        <!-- Nouvelle-Zélande -->
                        <path class="continent-path"
                        d="M865,355 L875,348 L882,358 L878,372 L868,378 L860,368 Z"
                        data-continent="oceania"/>
                        
                        <circle cx="790" cy="315" r="4" fill="#FF8C42" class="location-dot location-pulse" 
                                data-location="Sydney" data-info="Hub Océanie"/>
                    </g>

                    <!-- === ANTARCTIQUE === -->
                    <g id="continent-antarctica">
                        <path class="continent-path"
                        d="M150,445 L220,435 L320,430 L420,428 
                           L520,430 L620,428 L720,430 L820,435 L880,442 
                           L850,458 L760,465 L640,470 L500,472 
                           L360,468 L250,462 L170,455 Z"
                        data-continent="antarctica"/>
                    </g>

                    <!-- Cercles de glow -->
                    <circle cx="200" cy="100" r="15" fill="url(#dotGlow)" opacity="0.3" class="location-glow"/>
                    <circle cx="470" cy="68" r="20" fill="url(#dotGlow)" opacity="0.4" class="location-glow"/>
                    <circle cx="680" cy="110" r="22" fill="url(#dotGlow)" opacity="0.35" class="location-glow"/>
                </svg>

                <!-- Tooltip -->
                <div class="location-tooltip" id="locationTooltip">
                    <p class="tooltip-title"></p>
                    <p class="tooltip-subtitle"></p>
                </div>
            </div>

            <!-- Liste des continents -->
            <div class="continent-list">
                <div class="continent-tag active" data-filter="all" onclick="filterContinents('all', this)">
                    <span class="tag-dot" style="background: #0066FF;"></span>
                    Tous
                </div>
                <div class="continent-tag" data-filter="northAmerica" onclick="filterContinents('northAmerica', this)">
                    <span class="tag-dot" style="background: #0066FF;"></span>
                    Amérique du Nord
                </div>
                <div class="continent-tag" data-filter="southAmerica" onclick="filterContinents('southAmerica', this)">
                    <span class="tag-dot" style="background: #4ECDC4;"></span>
                    Amérique du Sud
                </div>
                <div class="continent-tag" data-filter="europe" onclick="filterContinents('europe', this)">
                    <span class="tag-dot" style="background: #FF6B6B;"></span>
                    Europe
                </div>
                <div class="continent-tag" data-filter="africa" onclick="filterContinents('africa', this)">
                    <span class="tag-dot" style="background: #F7DC6F;"></span>
                    Afrique
                </div>
                <div class="continent-tag" data-filter="asia" onclick="filterContinents('asia', this)">
                    <span class="tag-dot" style="background: #96CEB4;"></span>
                    Asie
                </div>
                <div class="continent-tag" data-filter="oceania" onclick="filterContinents('oceania', this)">
                    <span class="tag-dot" style="background: #FF8C42;"></span>
                    Océanie
                </div>
            </div>

            <!-- Statistiques -->
            <div class="stats-row">
                <div class="stat-item">
                    <span class="stat-value">15+</span>
                    <span class="stat-label">Bureaux</span>
                </div>
                <div class="stat-item">
                    <span class="stat-value">6</span>
                    <span class="stat-label">Continents</span>
                </div>
                <div class="stat-item">
                    <span class="stat-value">50+</span>
                    <span class="stat-label">Pays</span>
                </div>
                <div class="stat-item">
                    <span class="stat-value">500+</span>
                    <span class="stat-label">Clients</span>
                </div>
            </div>
        </div>
    </section>

    <!-- Bootstrap 5 JS Bundle -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
    
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const tooltip = document.getElementById('locationTooltip');
            const mapContainer = document.getElementById('mapContainer');
            const locationDots = document.querySelectorAll('.location-dot');
            const continentPaths = document.querySelectorAll('.continent-path');
            const continentGlows = document.querySelectorAll('.location-glow');

            // Gestion du tooltip pour les points de localisation
            locationDots.forEach(dot => {
                dot.addEventListener('mouseenter', function(e) {
                    const location = this.getAttribute('data-location');
                    const info = this.getAttribute('data-info');
                    
                    tooltip.querySelector('.tooltip-title').textContent = location;
                    tooltip.querySelector('.tooltip-subtitle').textContent = info;
                    tooltip.style.display = 'block';
                });

                dot.addEventListener('mousemove', function(e) {
                    const rect = mapContainer.getBoundingClientRect();
                    const x = e.clientX - rect.left + 20;
                    const y = e.clientY - rect.top - 60;
                    
                    tooltip.style.left = x + 'px';
                    tooltip.style.top = y + 'px';
                });

                dot.addEventListener('mouseleave', function() {
                    tooltip.style.display = 'none';
                });
            });

            // Gestion du survol des continents
            continentPaths.forEach(path => {
                path.addEventListener('mouseenter', function() {
                    const continent = this.getAttribute('data-continent');
                    // Highlight all paths in the same continent group
                    const group = this.closest('g');
                    if (group) {
                        const allPaths = group.querySelectorAll('.continent-path');
                        allPaths.forEach(p => p.style.opacity = '1');
                    }
                });

                path.addEventListener('mouseleave', function() {
                    const group = this.closest('g');
                    if (group) {
                        const allPaths = group.querySelectorAll('.continent-path');
                        allPaths.forEach(p => p.style.opacity = '');
                    }
                });
            });

            // Masquer le tooltip quand on quitte la carte
            mapContainer.addEventListener('mouseleave', function() {
                tooltip.style.display = 'none';
            });
        });

        // Fonction de filtrage par continent
        function filterContinents(continent, element) {
            // Mettre à jour les tags actifs
            document.querySelectorAll('.continent-tag').forEach(tag => {
                tag.classList.remove('active');
            });
            element.classList.add('active');

            // Filtrer les continents
            const allGroups = document.querySelectorAll('g[id^="continent-"]');
            
            allGroups.forEach(group => {
                const groupId = group.getAttribute('id').replace('continent-', '');
                
                if (continent === 'all' || groupId === continent) {
                    group.style.opacity = '1';
                    group.style.transition = 'opacity 0.5s ease';
                } else {
                    group.style.opacity = '0.15';
                    group.style.transition = 'opacity 0.5s ease';
                }
            });
        }
    </script>
</body>
</html>

Télécharger le fichier source

Partager