The CSS Podcast - 017: Shadows
Załóżmy, że otrzymasz projekt do opracowania, w którym znajduje się wycięty obraz koszulki z cieniowaniem. Projektant informuje, że zdjęcie produktu jest dynamiczne i można je aktualizować za pomocą systemu zarządzania treścią, więc cień musi też być dynamiczny. Zamiast koszulki możesz użyć wizerunku daszka lub spodenek lub dowolnego innego produktu. Jak to zrobić w usłudze porównywania cen?
W CSS dostępne są właściwości box-shadow
i text-shadow
, ale obraz nie jest tekstem, więc nie można użyć text-shadow
.
Jeśli użyjesz box-shadow
, cień będzie padał na pudełko, a nie na koszulkę.
Na szczęście jest inna opcja: filtr drop-shadow()
.
Dzięki temu możesz zrobić dokładnie to, o co prosi projektant.
W przypadku cieni w CSS dostępnych jest wiele opcji, z których każda jest przeznaczona do innego zastosowania.
Cień ramki
Właściwość box-shadow
służy do dodawania cieni do pola elementu HTML.
Działa na elementach blokowych i wbudowanych.
.my-element {
box-shadow: 5px 5px 20px 5px #000;
}
Kolejność wartości w polu box-shadow
:
- Odcięcie poziome: liczba dodatnia przesuwa element w lewo, a liczba ujemna przesuwa go w prawo.
- Odsunięcie pionowe: liczba dodatnia przesuwa element w dół od góry, a ujemna przesuwa go w górę od dołu.
- Promień rozmycia: im większa wartość, tym bardziej rozmyty cień, a im mniejsza, tym cień ostrzejszy.
- Promień rozchodzenia się cienia (opcjonalnie): większa liczba zwiększa rozmiar cienia, a mniejsza go zmniejsza, przy czym przy wartości 0 ma taki sam rozmiar jak promień rozmycia.
- Kolor: dowolna prawidłowa wartość koloru. Jeśli nie jest zdefiniowany, zostanie użyty obliczony kolor tekstu.
Aby zmienić cień skoku na cień wewnętrzny zamiast domyślnego cienia zewnętrznego, dodaj słowo kluczowe inset
przed innymi właściwościami.
/* Outer shadow */
.my-element {
box-shadow: 5px 5px 20px 5px #000;
}
/* Inner shadow */
.my-element {
box-shadow: inset 5px 5px 20px 5px #000;
}
Wiele cieni
Za pomocą box-shadow
możesz dodać dowolną liczbę cieni.
Aby to zrobić, dodaj zbiór zbiorów wartości rozdzielonych przecinkami:
.my-element {
box-shadow: 5px 5px 20px 5px darkslateblue, -5px -5px 20px 5px dodgerblue,
inset 0px 0px 10px 2px darkslategray, inset 0px 0px 20px 10px steelblue;
}
Właściwości wpływające na box-shadow
Dodanie border-radius
do pola spowoduje też zmianę kształtu cienia pola.
Dzieje się tak, ponieważ CSS tworzy cień na podstawie kształtu pola, tak jakby padało na nie światło.
.my-element {
box-shadow: 0px 0px 20px 5px darkslateblue;
border-radius: 25px;
}
Jeśli pole box-shadow
znajduje się w kontenerze overflow: hidden
, cień nie będzie wychodzić poza ten przepełniony obszar.
<div class="my-parent">
<div class="my-shadow">My shadow is hidden by my parent.</div>
</div>
.my-parent,
.my-shadow {
width: 250px;
height: 250px;
}
.my-shadow {
box-shadow: 0px 0px 20px 5px darkslateblue;
}
.my-parent {
overflow: hidden;
}
Cień tekstu
Właściwość text-shadow
jest bardzo podobna do właściwości box-shadow
.
Działa tylko na węzłach tekstowych.
.my-element {
text-shadow: 3px 3px 3px hotpink;
}
Wartości w kolumnie text-shadow
są takie same jak w kolumnie box-shadow
i występują w tej samej kolejności.
Jedyną różnicą jest to, że text-shadow
nie ma wartości spread
ani słowa kluczowego inset
.
Gdy dodasz box-shadow
, zostanie on przycięty do kształtu pola, ale text-shadow
nie będzie przycięty.
Oznacza to, że jeśli tekst jest w pełni lub częściowo przezroczysty, przez niego widać cień.
.my-element {
text-shadow: 3px 3px 3px gold;
color: rgb(0 0 0 / 70%);
}
Wiele cieni
Podobnie jak w przypadku box-shadow
, za pomocą text-shadow
możesz dodać dowolną liczbę cieni.
Dodaj kolekcję zbiorów wartości rozdzielonych przecinkami,
aby tworzyć naprawdę fajne efekty tekstowe, takie jak tekst 3D.
.my-element {
text-shadow: 1px 1px 0px white,
2px 2px 0px firebrick;
color: darkslategray;
}
Z cieniem
Aby uzyskać cień, który podąża za wszelkimi możliwymi zakrzywieniami obrazu, użyj filtra CSS drop-shadow
.
Cień jest stosowany do maski alfa, co pozwala na dodanie cienia do wyciętego obrazu, jak w przypadku wprowadzenia do tego modułu.
.my-image {
filter: drop-shadow(0px 0px 10px rgba(0 0 0 / 30%))
}
Filtr drop-shadow
ma te same wartości co box-shadow
, ale słowo kluczowe inset
i wartość spread
są niedozwolone. Możesz dodać dowolną liczbę cieni, dodając do właściwości filter
wiele wystąpień wartości drop-shadow
.
Każdy cień będzie używać ostatniego cienia jako punktu odniesienia do pozycjonowania.
Sprawdź swoją wiedzę
Sprawdź swoją wiedzę o cieniach
Która z poniższych wartości cieni jest unikalna dla kolumny box-shadow
?
inset
inset
to słowo kluczowe, które jest też unikalne dla box-shadow
.Dozwolone jest tylko 13 cieni na jednym elemencie.