webroad.online
  1. 1Web
  2. 2HTML
  3. 3CSS
  4. 4JavaScript
  5. 5TypeScript
  6. 6Git
  7. 7Unelte
  8. 8React
  9. 9State management
  10. 10Next.js
  11. 11Formulare
  12. 12Date și backend
  13. 13SEO
  14. 14Tailwind CSS
  15. 15Animații
  16. 16Testare
  17. 17Arhitectură
CSS · Lecția 8 din 8

CSS modern

Nesting nativ, :has(), :is/:where, proprietăți logice, @layer.

Actualizat

Ce înseamnă „CSS modern”

În ultimii ani, CSS a primit funcționalități care înainte cereau Sass sau JavaScript. Toate de mai jos funcționează azi în toate browserele majore — merită folosite, nu doar știute.

Nesting — reguli imbricate, nativ

.card {
  padding: 1rem;

  & h3 { font-weight: 600; }        /* .card h3 */
  &:hover { border-color: gray; }   /* .card:hover */
  .dark & { background: black; }    /* .dark .card */

  @media (min-width: 48rem) {
    padding: 2rem;
  }
}

& = selectorul părinte. Ca în Sass, dar fără build. Nu imbrica mai mult de 2–3 nivele — specificitatea crește și CSS-ul devine greu de citit.

:has() — „selectorul părinte”

Pentru prima dată, poți stiliza un element după ce conține sau după ce se întâmplă după el:

.card:has(img) { padding-top: 0; }                       /* cardurile cu imagine */
.field:has(input:invalid) label { color: var(--danger); } /* label-ul unui câmp invalid */
form:has(:focus-visible) { outline: 2px solid; }          /* formularul în care e focus */
body:has(dialog[open]) { overflow: hidden; }              /* blochează scroll-ul când e un modal deschis */

Multe lucruri care cereau state în React (o clasă pe părinte) se rezolvă acum doar cu CSS.

:is() și :where() — liste de selectori

:is(h1, h2, h3):hover { color: var(--accent); }
:where(ul, ol) { padding-left: 1rem; }
:is() :where()
Specificitate a celui mai specific argument zero
Când scurtezi selectori repetați stiluri de bază / reset, ușor de suprascris

Proprietăți logice

În loc de stânga / dreapta / sus / jos, descrii direcția față de text. Layout-ul merge automat și în limbi scrise de la dreapta la stânga (arabă, ebraică).

Fizic Logic
margin-left / margin-right margin-inline-start / margin-inline-end
padding-left + padding-right padding-inline
padding-top + padding-bottom padding-block
width / height inline-size / block-size
top/right/bottom/left: 0 inset: 0

Tailwind le are: ps-4, pe-4, ms-auto, px-4 = padding-inline.

@layer — ordinea cascadei, explicit

@layer reset, base, components, utilities;

@layer components {
  .btn { padding: 1rem; }
}

Layer-ele declarate mai târziu câștigă, indiferent de specificitate — vezi Cascada. Tailwind v4 e construit pe ele (theme, base, components, utilities).

Alte funcționalități utile

Funcționalitate Ce face
clamp(), min(), max() valori fluide fără media queries
color-mix(in oklab, var(--c) 20%, transparent) culori derivate din tokens
oklch() culori percepute uniform — palete mai bune
container queries responsive după părinte — Responsive
aspect-ratio proporție fixă
text-wrap: balance / pretty titluri echilibrate, fără cuvinte orfane
accent-color culoarea checkbox-urilor și radio-urilor native

Pe scurt

  • Nesting nativ cu &; :has() stilizează după conținut; :where() = specificitate zero.
  • Proprietăți logice (padding-inline, inset) în loc de stânga / dreapta.
  • @layer controlează cascada; color-mix, oklch, text-wrap: balance pentru detalii moderne.

Surse oficiale

Exerciții

Ți-a fost utilă pagina?

Un click — fără cont.