Ce face outline și outline-offset
outline seamănă cu border, dar are două diferențe importante: nu ocupă spațiu în layout (nu împinge nimic, nu schimbă mărimea elementului) și se aplică pe toate laturile odată (nu există outline-top).
Browserele folosesc outline pentru inelul de focus de la tastatură. De aceea este locul potrivit pentru stiluri de focus personalizate, de obicei împreună cu :focus-visible. outline-offset depărtează conturul de element (valoare pozitivă) sau îl mută spre interior (valoare negativă).
În browserele actuale (Chrome 94, Firefox 88, Safari 16.4 și mai noi) conturul urmează colțurile rotunjite date de border-radius; în versiunile mai vechi era mereu dreptunghiular.
Valori uzuale
| Valoare | Descriere |
|---|---|
outline-width |
Grosimea conturului (ex. 2px, thin, medium). |
outline-style |
Stilul liniei: solid, dashed, dotted, double, auto (stilul nativ al browserului). |
outline-color |
Culoarea conturului. |
outline-offset |
Distanța dintre contur și marginea elementului; poate fi negativă. |
outline: none |
Elimină conturul; acceptabil doar dacă oferi un alt indicator de focus. |
Exemple
Exemplul 1: Inel de focus vizibil, doar la navigarea cu tastatura
Conturul albastru apare când utilizatorul ajunge pe buton cu Tab, nu și la clic cu mouse-ul.
.buton {
border-radius: 8px;
}
.buton:focus-visible {
outline: 3px solid #2563eb;
outline-offset: 3px;
}
Efect vizual în browser
La apăsarea tastei Tab, în jurul butonului apare un contur albastru de 3px, rotunjit ca butonul, la 3px distanță de el. Butonul și vecinii lui nu se mișcă deloc.
Exemplul 2: Evidențierea unei zone fără să miști layout-ul
Un border adăugat la hover ar mări cardul cu 2px și ar împinge vecinii; un outline nu.
.card-oferta:hover {
outline: 2px dashed #f59e0b;
outline-offset: -6px;
}
Efect vizual în browser
La trecerea mouse-ului, în interiorul cardului apare un contur portocaliu punctat, la 6px de margine. Grila de carduri rămâne nemișcată.
Greșeli frecvente
*:focus { outline: none; }fără alt stil de focus; utilizatorii de tastatură nu mai văd unde se află pe pagină.- Așteptarea ca outline să ocupe loc (de exemplu ca să „lipească” două carduri); conturul se suprapune peste vecini, nu îi împinge.
- Căutarea unei proprietăți
outline-topsauoutline-left; outline este întotdeauna pe toate laturile. Pentru o singură latură foloseștebordersaubox-shadow.
Comenzi înrudite
border: Desenează o linie de contur în jurul conținutului și padding-ului unui element (grosime, stil, culoare).box-shadow: Aplică una sau mai multe umbre sub cutia unui element, adăugând adâncime și senzație de plutire (elevație).:focus-visible și :focus-within: Afișează conturul de focus doar când utilizatorul navighează cu tastatura (:focus-visible) și stilizează un părinte când un copil are focus.Pseudo-clase (:hover, :focus, :active, :nth-child): Stilizează un element în funcție de starea sa (interacțiune cu mouse-ul, tastatura) sau poziția structurală în listă.