Bootstrap

Bootstrap on suosituin valmis CSS-komponenttikirjasto responsiivisten sivustojen rakentamiseen. Versiosta 5 lähtien se ei enää vaadi jQueryä — oma JavaScript-nippu riittää interaktiivisille komponenteille (modaalit, pudotusvalikot, jne.).

Käyttöönotto CDN:ltä

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet">

<!-- Ennen </body>-tagia, JS-komponentteja (modaalit, dropdownit...) varten -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js"></script>

Lukitse aina tarkka versionumero tuotannossa (kuten yllä) — pelkkä bootstrap@5 osoittaisi automaattisesti uusimpaan 5.x-versioon, mikä voi rikkoa sivuston yllättäen päivityksen yhteydessä.

Ruudukko (grid)

<div class="container">
  <div class="row">
    <div class="col-md-6">Puolet leveydestä keskikokoisella näytöllä+</div>
    <div class="col-md-6">Toinen puoli</div>
  </div>
</div>
Luokka Käyttö
container Kiinteä, keskitetty leveys breakpointeittain
container-fluid Aina 100 % leveys
row Ruudukon rivi (sisältää sarakkeet)
col Automaattisesti tasan jaettu sarake
col-<n> Kiinteä leveys 1–12 (12-sarakejärjestelmä)
col-{bp}-<n> Leveys tietystä breakpointista ylöspäin (esim. col-md-6)

Breakpointit

Lyhenne Vähimmäisleveys
sm 576px
md 768px
lg 992px
xl 1200px
xxl 1400px

Yleisiä apuluokkia (utilities)

<div class="d-flex justify-content-between align-items-center">...</div>
<div class="m-3 p-2">margin 3, padding 2 (Bootstrapin oma spacing-asteikko)</div>
<div class="d-none d-md-block">Piilossa pienellä näytöllä, näkyy md:stä ylöspäin</div>
<p class="text-center text-muted">Keskitetty, himmennetty teksti</p>

Spacing-luokat (m-*, p-*) käyttävät asteikkoa 0–5 (ja auto), eivät suoraan pikseliarvoja — m-3 vastaa oletusteemassa noin 1rem:iä.

Painikkeet

<button class="btn btn-primary">Ensisijainen</button>
<button class="btn btn-outline-secondary">Ääriviivallinen</button>
<button class="btn btn-danger btn-sm">Pieni, varoittava</button>

Kortit (cards)

<div class="card" style="width: 18rem;">
  <img src="kuva.jpg" class="card-img-top" alt="...">
  <div class="card-body">
    <h5 class="card-title">Otsikko</h5>
    <p class="card-text">Sisältöteksti.</p>
    <a href="#" class="card-link">Linkki</a>
  </div>
</div>

Navigointipalkki (navbar)

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
  <div class="container-fluid">
    <a class="navbar-brand" href="#">Sivusto</a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#nav">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="nav">
      <ul class="navbar-nav">
        <li class="nav-item"><a class="nav-link" href="#">Etusivu</a></li>
      </ul>
    </div>
  </div>
</nav>

Modaali (ei JavaScriptiä itse kirjoitettavaksi)

<button data-bs-toggle="modal" data-bs-target="#omaModaali">Avaa</button>

<div class="modal" id="omaModaali">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">Otsikko</h5>
        <button class="btn-close" data-bs-dismiss="modal"></button>
      </div>
      <div class="modal-body">Sisältö</div>
    </div>
  </div>
</div>

data-bs-*-attribuutit ohjaavat Bootstrapin omaa JS-nippua — mitään event listenereitä ei tarvitse kirjoittaa käsin perustapauksessa.

Ilmoitukset (alerts)

<div class="alert alert-success" role="alert">Onnistui!</div>
<div class="alert alert-danger alert-dismissible fade show">
  Virhe!
  <button class="btn-close" data-bs-dismiss="alert"></button>
</div>

Väriteemat / tumma tila (color modes, v5.3+)

<html data-bs-theme="dark">

Voidaan asettaa myös yksittäiselle elementille (esim. <div data-bs-theme="dark">) — vaikuttaa vain sen sisältöön. Perustuu CSS custom propertyihin, joten yhdistyy hyvin myös prefers-color-scheme-mediakyselyyn omalla Sass-asetuksella.

Oman teeman muokkaus (Sass)

// omat-muuttujat.scss
$primary: #2a5db0;
$border-radius: 0.25rem;

@import "bootstrap/scss/bootstrap";

Muuttujat pitää määritellä ennen @import-riviä, jotta Bootstrapin oma Sass-koodi käyttää niitä oletusarvojensa sijaan.