place-items, place-content și place-self în CSS

Prescurtări care aliniază pe ambele axe deodată: place-items pentru elemente, place-content pentru grilă, place-self pentru unul singur.

Sintaxă CSS
place-items: center;              /* align-items + justify-items */
place-items: start end;
place-content: center;            /* align-content + justify-content */
place-content: space-between center;
place-self: end;                  /* align-self + justify-self */

Ce face place-items, place-content și place-self

În CSS Grid alinierea are două axe: bloc (verticală, proprietățile align-*) și inline (orizontală, proprietățile justify-*). Proprietățile place-* le setează pe amândouă dintr-o singură linie: prima valoare pentru align, a doua pentru justify. Dacă dai o singură valoare, se aplică pe ambele axe.

• place-items aliniază fiecare element în celula lui (align-items + justify-items).
• place-content mută întreaga grilă în container când rămâne spațiu liber (align-content + justify-content).
• place-self se pune pe un singur copil și suprascrie alinierea lui (align-self + justify-self).

Cea mai cunoscută utilizare: display: grid; place-items: center; centrează perfect un element pe ambele axe.

Valori uzuale

Valoare Descriere
place-items align-items și justify-items: poziția elementelor în celulele lor.
place-content align-content și justify-content: poziția grilei în container.
place-self align-self și justify-self pentru un singur element.
justify-items Alinierea orizontală a tuturor elementelor în celule (start, center, end, stretch).
justify-self Alinierea orizontală a unui singur element în celula lui.

Exemple

Exemplul 1: Centrare perfectă cu două linii

Ecranul de încărcare are mesajul exact în mijloc, pe orizontală și pe verticală.

.ecran-incarcare {
  display: grid;
  place-items: center;
  min-height: 100dvh;
}

Efect vizual în browser

Mesajul „Se încarcă comanda ta…” stă în centrul exact al ecranului, oricât de mare ar fi fereastra.

Exemplul 2: Un singur element aliniat diferit în celula lui

Toate cardurile se întind pe toată celula, dar insigna „Nou” stă în colțul din dreapta jos al celulei ei.

.grila {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: 120px;
}
.grila .insigna-nou {
  place-self: end;
}

Efect vizual în browser

Celelalte elemente umplu celulele de 120px înălțime; insigna verde „Nou” are doar mărimea textului ei și stă lipită de colțul din dreapta jos al celulei.

Greșeli frecvente

  • Folosirea lui justify-items sau justify-self în Flexbox; acolo sunt ignorate. Pe axa principală a unui container flex folosești justify-content sau margin-left: auto.
  • Inversarea ordinii valorilor: în place-items: start end, prima valoare (start) este pentru axa verticală, a doua (end) pentru cea orizontală.

Comenzi înrudite

  • align-items: Aliniază elementele de-a lungul axei secundare / transversale (vertical când flex-direction este row).
  • justify-content: Distribuie elementele și spațiul liber de-a lungul axei principale (orizontal când flex-direction este row).
  • align-content: Aliniază pe verticală rândurile unui container flex cu wrap sau ale unei grile, ori tot conținutul unui bloc.
  • display: grid: Transformă elementul într-un container grilă bidimensional, capabil să controleze simultan atât rândurile, cât și coloanele.