CSS

Valitsimet

.luokka { }              /* class */
#id { }                    /* id */
div { }                     /* elementtityyppi */
div p { }                     /* jälkeläinen (millä tahansa syvyydellä) */
div > p { }                     /* suora lapsi */
div + p { }                      /* seuraava sisarus välittömästi */
div ~ p { }                       /* mikä tahansa seuraava sisarus */
a:hover { }                         /* pseudoluokka */
p::first-line { }                    /* pseudoelementti */
input:not([disabled]) { }             /* attribuutti + negaatio */

Tärkeysjärjestys (specificity)

Yksinkertaistettuna: !important > inline-tyyli > ID > luokka/attribuutti/ pseudoluokka > elementtityyppi. Sama tärkeysaste ratkeaa lähdejärjestyksen mukaan (myöhempi voittaa).

Box model

.laatikko {
  width: 200px;
  padding: 16px;
  border: 1px solid #ccc;
  margin: 8px;
  box-sizing: border-box;   /* padding+border sisältyvät width:iin, ei lisää siihen */
}

Flexbox

.rivi {
  display: flex;
  flex-direction: row;         /* tai column */
  justify-content: space-between;  /* pääakselin kohdistus */
  align-items: center;               /* poikittaisakselin kohdistus */
  gap: 16px;
  flex-wrap: wrap;
}

.rivi > .lapsi {
  flex: 1;             /* kasva/kutistu tasaisesti täyttääkseen tilan */
}

Grid

.ruudukko {
  display: grid;
  grid-template-columns: repeat(3, 1fr);   /* kolme yhtä leveää saraketta */
  grid-template-rows: auto 1fr auto;
  gap: 16px;
}

.solu {
  grid-column: 1 / 3;   /* ulottuu sarakkeesta 1 sarakkeeseen 3 */
}

Muuttujat (custom properties)

:root {
  --paavari: #2a5db0;
  --valilyonti: 8px;
}

.elementti {
  color: var(--paavari);
  padding: calc(var(--valilyonti) * 2);
}

Mediakyselyt (responsiivisuus)

@media (max-width: 700px) {
  .sivupalkki { display: none; }
}

@media (prefers-color-scheme: dark) {
  :root { --bg: #0b0f14; }
}

Yksiköt

Yksikkö Kuvaus
px Kiinteä pikselimäärä
% Suhteessa vanhempaan elementtiin
em Suhteessa elementin omaan fonttikokoon
rem Suhteessa juurielementin (html) fonttikokoon — ennustettavampi kuin em
vw / vh Prosentti näkymäalueen leveydestä/korkeudesta
ch Numeromerkin "0" leveys — hyödyllinen tekstin lukuleveyden rajaamiseen

Transitionit ja animaatiot

.nappi {
  transition: background-color 0.2s ease;
}
.nappi:hover {
  background-color: var(--paavari);
}

@keyframes pyoraytys {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
.spinner {
  animation: pyoraytys 1s linear infinite;
}

Kunnioita käyttäjän liikkeenvähennysasetusta:

@media (prefers-reduced-motion: reduce) {
  * { animation: none !important; transition: none !important; }
}

Kerrosjärjestys

.kelluva {
  position: absolute;   /* tai fixed/relative/sticky */
  z-index: 10;
}

z-index vaikuttaa vain elementteihin, joilla on position-arvo muu kuin static (oletus).