Generator cienia CSS (box-shadow)

Dalej

Twórz po jednej regule box-shadow: ustaw poziomy i pionowy offset, rozmycie, rozszerzenie, kolor oraz opcjonalne inset, a potem skopiuj wynik. Prawdziwe cienie zwykle potrzebują dwóch lub trzech warstw, więc generuj każdą warstwę osobno i łącz reguły przecinkiem.

Jak zaprojektować cień (box-shadow)

  1. 1

    Ustaw wartości cienia

    Przesunięcie poziome, przesunięcie pionowe, promień rozmycia, rozszerzenie oraz kolor z przezroczystością.

  2. 2

    Przełącz inset

    Zmień cień na inset, aby uzyskać cień wewnętrzny, przydatne przy wciśniętych przyciskach i efektach wgłębienia.

  3. 3

    Wybierz kolor cienia

    Czerń o niskiej przezroczystości to klasyk. Kolorowe cienie (w odcieniu elementu, ciemniejsze) wyglądają bardziej naturalnie.

  4. 4

    Skopiuj CSS

    Skopiuj pojedynczą regułę cienia i wklej ją do arkusza stylów. Aby uzyskać cień warstwowy, generuj każdą warstwę osobno i łącz reguły przecinkiem.

Składnia box-shadow

box-shadow: <przesunięcie-x> <przesunięcie-y> <rozmycie> <rozszerzenie> <kolor> [inset];
  • przesunięcie-x: dodatnie = w prawo, ujemne = w lewo.
  • przesunięcie-y: dodatnie = w dół, ujemne = w górę.
  • rozmycie: 0 = ostra krawędź, większe = bardziej miękkie. Widoczny rozmiar to mniej więcej 1,5× rozmycia poza elementem.
  • rozszerzenie: dodatkowy rozmiar poza elementem. Dodatnie powiększa cień; ujemne go zmniejsza (przydatne do subtelnych otoczek).
  • kolor: obsługuje dowolny kolor CSS. rgba(0, 0, 0, 0.15) to chleb powszedni.
  • inset: słowo kluczowe odwracające cień do wnętrza elementu.

Warstwowe cienie wyglądają prawdziwie

Ten generator wypisuje po jednej regule cienia; aby zbudować cień warstwowy, generuj każdą warstwę osobno i łącz reguły przecinkiem.

Jeden cień z 0 0 40px wygląda mglisto. Dwa cienie, mały, ostry blisko elementu i większy, miękki dalej, naśladują to, jak rozprasza się prawdziwe światło.

box-shadow:
  0 1px 2px rgba(0, 0, 0, 0.08),
  0 4px 12px rgba(0, 0, 0, 0.08);

Pierwszy wiersz daje ciasny cień kontaktowy; drugi miększy cień otoczenia. Ten jeden wzorzec pokrywa 80% interfejsów w stylu kart.

Systemy uniesienia

Material Design używa 6 poziomów uniesienia, każdy z innym zestawem cieni. W uproszczeniu:

Uniesienie Cień
1 (spoczynek) 0 1px 3px rgba(0,0,0,.12), 0 1px 2px rgba(0,0,0,.24)
2 0 3px 6px rgba(0,0,0,.16), 0 3px 6px rgba(0,0,0,.23)
3 0 10px 20px rgba(0,0,0,.19), 0 6px 6px rgba(0,0,0,.23)
4 (uniesione) 0 14px 28px rgba(0,0,0,.25), 0 10px 10px rgba(0,0,0,.22)
5 (unoszące się) 0 19px 38px rgba(0,0,0,.30), 0 15px 12px rgba(0,0,0,.22)

Wybierz jeden na rolę uniesienia i używaj go konsekwentnie.

Kolorowe cienie wyglądają bardziej naturalnie

Czysto czarne cienie wyglądają sztucznie, bo prawdziwe cienie są podbarwione przez powierzchnię pod nimi. Spróbuj:

box-shadow: 0 12px 24px rgba(40, 80, 120, 0.18);
  • chłodna niebieskoszarość zamiast czystej czerni. Na ciepłych tłach użyj cieplejszego odcienia.

Wydajność

Cienie box-shadow są malowane przy każdym przemalowaniu. Duże, ciężkie cienie na wielu elementach mogą spowalniać przewijanie. Sposoby zaradcze:

  • Użyj transform: translateZ(0) na elemencie, aby wymusić warstwę kompozytową.
  • Zastąp złożone cienie przez filter: drop-shadow() tylko wtedy, gdy cień ma podążać za clip-path (ogólnie jest wolniejszy).
  • Ogranicz cienie na elementach, które często się przerysowują.

Inset dla stanów wciśnięcia

.button:active {
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.12);
}

Cienie inset udają wgłębienie, przycisk wygląda jak wciśnięty w powierzchnię. Połącz z małym przesunięciem w dół transform: translateY(1px), aby uzyskać dotykowe kliknięcie.

Najczęściej zadawane pytania

Zwykle dlatego, że rozmycie jest za niskie albo rozszerzenie za wysokie. Cień o ostrej krawędzi bez rozmycia wygląda jak duplikat elementu. Zwiększ rozmycie (20-30px to częsty punkt wyjścia) i trzymaj rozszerzenie na 0 albo bardzo małych wartościach ujemnych.

Box-shadow podąża za border-box elementu, włącznie z border-radius, więc zaokrąglone karty automatycznie dostają ładnie zaokrąglone cienie. Dla kształtów clip-path box-shadow nie podąża za przycięciem; użyj zamiast tego filter: drop-shadow().

Przesuń cień mocno w wybranym kierunku i użyj ujemnego rozszerzenia, aby ukryć przeciwną stronę. Albo użyj dwóch cieni, jeden widoczny po docelowej stronie, drugi z ujemnym rozszerzeniem, aby “zjeść” niechciany wyciek.

Nie ma twardego limitu, ale każdy cień to kolejny przebieg malowania. Trzy do czterech warstw to praktyczny sufit; przy większej liczbie rozważ użycie obrazu tła albo SVG.

Powiązane narzędzia