Snippets Card

Bootstrap 5 Weather Card with 7-Day Forecast

A weather report card with the current conditions, a Celsius/Fahrenheit switch and a seven-day forecast strip. Built with Bootstrap 5 utilities and inline SVG icons, and it adapts to light and dark mode.

Bootstrap 5 No jQuery Dec 2019 3.7K views

<section class="wdw-stage">
  <div class="container" style="max-width:760px">
    <article class="wdw-card overflow-hidden weather" aria-label="Weather report for Sydney">
      <div class="wdw-aurora weather-hero p-4 p-md-5">
        <div class="d-flex justify-content-between align-items-start gap-3">
          <div>
            <p class="mb-1 fw-semibold opacity-75 small text-uppercase" style="letter-spacing:.08em">Friday, 25 March</p>
            <p class="mb-0 d-flex align-items-center gap-1 opacity-75">
              <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z"/><circle cx="12" cy="10" r="3"/></svg>
              Sydney, Australia
            </p>
          </div>
          <div class="btn-group btn-group-sm" role="group" aria-label="Temperature unit">
            <input type="radio" class="btn-check" name="unit" id="unit-c" value="c" checked>
            <label class="btn btn-outline-light rounded-start-pill px-3" for="unit-c">°C</label>
            <input type="radio" class="btn-check" name="unit" id="unit-f" value="f">
            <label class="btn btn-outline-light rounded-end-pill px-3" for="unit-f">°F</label>
          </div>
        </div>
        <div class="d-flex align-items-end justify-content-between mt-4 mt-md-5">
          <div>
            <div class="display-1 fw-bold lh-1" id="now-temp" data-c="32">32°</div>
            <p class="fs-5 mb-0 mt-2 opacity-75" id="now-cond" aria-live="polite">Partly cloudy</p>
          </div>
          <svg class="weather-art" viewBox="0 0 120 90" fill="none" aria-hidden="true">
            <circle cx="82" cy="30" r="20" fill="#fde68a"/>
            <path d="M30 80a18 18 0 0 1 2-36 24 24 0 0 1 46 6 15 15 0 0 1-2 30Z" fill="#fff"/>
          </svg>
        </div>
        <div class="d-flex flex-wrap gap-4 mt-4 small opacity-75">
          <span>Humidity <strong class="text-white">58%</strong></span>
          <span>Wind <strong class="text-white">14 km/h</strong></span>
          <span>UV index <strong class="text-white">8</strong></span>
        </div>
      </div>
      <ul class="list-unstyled d-grid mb-0 forecast" role="list" aria-label="7 day forecast">
        <li><button type="button" class="forecast-day active" aria-pressed="true" data-day-c="30" data-cond="Sunny"><span class="d">Sun</span><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg><span class="t" data-c="30">30°</span></button></li>
        <li><button type="button" class="forecast-day" aria-pressed="false" data-day-c="31" data-cond="Sunny"><span class="d">Mon</span><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg><span class="t" data-c="31">31°</span></button></li>
        <li><button type="button" class="forecast-day" aria-pressed="false" data-day-c="28" data-cond="Cloudy"><span class="d">Tue</span><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M17.5 19a4.5 4.5 0 1 0-1.4-8.8A6 6 0 1 0 5 15.5 3.5 3.5 0 0 0 6.5 19Z"/></svg><span class="t" data-c="28">28°</span></button></li>
        <li><button type="button" class="forecast-day" aria-pressed="false" data-day-c="30" data-cond="Cloudy"><span class="d">Wed</span><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M17.5 19a4.5 4.5 0 1 0-1.4-8.8A6 6 0 1 0 5 15.5 3.5 3.5 0 0 0 6.5 19Z"/></svg><span class="t" data-c="30">30°</span></button></li>
        <li><button type="button" class="forecast-day" aria-pressed="false" data-day-c="29" data-cond="Sunny"><span class="d">Thu</span><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg><span class="t" data-c="29">29°</span></button></li>
        <li><button type="button" class="forecast-day" aria-pressed="false" data-day-c="31" data-cond="Sunny"><span class="d">Fri</span><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg><span class="t" data-c="31">31°</span></button></li>
        <li><button type="button" class="forecast-day" aria-pressed="false" data-day-c="32" data-cond="Sunny"><span class="d">Sat</span><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg><span class="t" data-c="32">32°</span></button></li>
      </ul>
    </article>
  </div>
</section>

Built on Bootstrap 5.3.8 with plain JavaScript — no jQuery. Supports light and dark mode via data-bs-theme.

Free to use in personal and commercial projects under the MIT license.