CSS
Przycinanie i maskowanie
Szukaj…
Składnia
- Obrzynek
- ścieżka-ścieżki: <clip-source> | [<podstawowy>> <clip-geometry-box>] Żaden
- Maskowanie
- mask-image: [brak | <mask-reference>] #
- tryb maski: [<mask-tryb>] #
- mask-repeat: [<repeat-style] #
- mask-position: [<pozycja>] #
- mask-clip: [<geometry-box> | bez klipu] #
- mask-origin: [<geometry-box>] #
- mask-size: [<bg-size>] #
- mask-composite: [<compositing-operator>] #
- mask: [<mask-reference> <masking-mode>? || <pozycja> [/ <bg-size>]? || <repeat-style> || <skrzynka geometrii> || [<geometry-box> | bez klipu] || <compositing-operator>] #
Parametry
Parametr | Detale |
---|---|
źródło klipu | Adres URL, który może wskazywać na wbudowany element SVG (lub) element SVG w zewnętrznym pliku zawierającym definicję ścieżki klipu. |
podstawowy kształt | Odnosi się do jednego spośród inset() , circle() , ellipse() lub polygon() . Za pomocą jednej z tych funkcji definiuje się ścieżkę przycinającą. Te funkcje kształtu działają dokładnie tak samo, jak w Kształty dla pływaków |
klip-geometria-box | Może to być jeden content-box padding-box , border-box margin-box , margin-box fill-box , stroke-box view-box jako wartości. Jeśli jest to podane bez wartości <basic-shape>, krawędzie odpowiedniego pola są używane jako ścieżka do obcinania. W przypadku użycia z <kształtem podstawowym> działa to jako pole odniesienia dla kształtu. |
odniesienie do maski | Może to być none obrazu lub URL-a referencyjnego do źródła obrazu maski. |
powtarzalny styl | Określa, w jaki sposób maska powinna być powtarzana lub sąsiadująco w osiach X i Y. Obsługiwane wartości to repeat-x , repeat-y , repeat , space , round , no-repeat . |
tryb maski | Może być alpha lub luminance lub auto i wskazuje, czy maska powinna być traktowana jak maska alfa czy maska luminancji. Jeśli nie podano żadnej wartości, a odniesienie do maski jest obrazem bezpośrednim, wówczas byłoby traktowane jako maska alfa (lub), jeśli odniesieniem do maski jest adres URL, wówczas byłoby to uważane za maskę luminancji. |
pozycja | Określa pozycję każdej warstwy maski i jest podobny w zachowaniu do właściwości background-position . Wartość można podać w składni 1 wartości (np. U top , 10% ) lub w składni 2 wartości (jak u top right , 50% 50% ). |
skrzynka geometrii | Określa pole, do którego maska powinna zostać przycięta ( obszar malowania maski ) lub pole, które powinno być używane jako odniesienie dla początku maski ( obszar pozycjonowania maski ) w zależności od właściwości. Lista możliwych wartości to: content-box , padding-box , border-box , margin-box , fill-box , stroke-box , view-box . Szczegółowe objaśnienie działania każdej z tych wartości jest dostępne w specyfikacji W3C . |
rozmiar bg | Reprezentuje rozmiar każdej warstwy obrazu maski i ma taką samą składnię jak background-size . Wartość może być długością lub procentem, wartością automatyczną lub zakryciem lub zawierać. Długość, procent i auto mogą być podawane jako pojedyncza wartość lub jako jedna dla każdej osi. |
operator-kompozytor | Może to być dowolna spośród opcji add , subtract , exclude , multiply na warstwę i określa rodzaj operacji łączenia, która powinna być stosowana dla tej warstwy z tymi pod nią. Szczegółowe objaśnienie każdej wartości jest dostępne w Specyfikacjach W3C . |
Uwagi
Obcinanie i maskowanie CSS to bardzo nowe koncepcje, więc obsługa tych właściwości w przeglądarce jest bardzo niska.
Maski:
W momencie pisania (lipiec '16) Chrome, Safari i Opera obsługują te właściwości z prefiksem -webkit-
.
Firefox nie wymaga prefiksów, ale obsługuje maski tylko wtedy, gdy jest używany z elementami mask
SVG. W przypadku wbudowanych elementów mask
SVG składnia to mask: url(#msk)
natomiast w przypadku użycia elementów mask
w zewnętrznym pliku SVG składnia to mask: url('yourfilepath/yourfilename.svg#msk')
. #msk
w obu przypadkach odnosi się do id
elementu mask
, o którym mowa. Jak wskazano w tej odpowiedzi , Firefox nie obsługuje obecnie żadnego parametru innego niż mask-reference
do mask
właściwości mask
.
Internet Explorer (i Edge) nie oferuje jeszcze żadnej obsługi tej właściwości.
Właściwość mask-mode
nie jest obecnie obsługiwana przez żadną przeglądarkę z prefiksem lub bez .
Ścieżka klipu:
W chwili pisania (lipiec 2016 r.) Chrome, Safari i Opera obsługują clip-path
gdy ścieżka jest tworzona przy użyciu podstawowych kształtów (takich jak circle
, polygon
) lub składni url(#clipper)
z wbudowanym SVG. Nie obsługują przycinania opartego na kształtach, które są częścią zewnętrznych plików SVG. Wymagają także -webkit
prefiksu -webkit
.
Firefox obsługuje tylko składnię url()
dla clip-path
podczas gdy Internet Explorer (i Edge) nie obsługują.
Obcinanie (wielokąt)
CSS:
div{
width:200px;
height:200px;
background:teal;
clip-path: polygon(0 0, 0 100%, 100% 50%); /* refer remarks before usage */
}
HTML:
<div></div>
W powyższym przykładzie wielokątna ścieżka przycinająca służy do przycięcia kwadratowego elementu (200 x 200) do kształtu trójkąta. Kształt wyjściowy jest trójkątem, ponieważ ścieżka zaczyna się od (tzn. Pierwsze współrzędne są w) 0 0
- co jest lewym górnym rogiem pola, a następnie przechodzi do 0 100%
- co jest lewym dolnym rogiem pola a następnie w końcu do 100% 50%
co jest niczym innym jak prawym środkowym punktem pudełka. Ścieżki te zamykają się samoczynnie (tzn. Punktem początkowym będzie punkt końcowy), a zatem końcowy kształt ma kształt trójkąta.
Można to również zastosować do elementu z obrazem lub gradientem jako tłem.
Wynik:
Obcinanie (koło)
CSS:
div{
width: 200px;
height: 200px;
background: teal;
clip-path: circle(30% at 50% 50%); /* refer remarks before usage */
}
HTML
<div></div>
Ten przykład pokazuje, jak przypiąć div do okręgu. Element jest przycięty do koła, którego promień wynosi 30% w oparciu o wymiary pola odniesienia, a jego środek znajduje się na środku pola odniesienia. Tutaj, ponieważ nie podano <skrzynki klipu geodezyjnego> (innymi słowy, pola odniesienia), border-box
elementu zostanie użyta jako pole odniesienia.
Kształt okręgu musi mieć promień i środek o współrzędnych (x,y)
:
circle(radius at x y)
Wynik:
Przycinanie i maskowanie: przegląd i różnica
Dzięki Clipping and Masking możesz sprawić, że niektóre określone elementy elementów będą przezroczyste lub nieprzezroczyste. Oba można zastosować do dowolnego elementu HTML.
Obrzynek
Klipy są ścieżkami wektorowymi. Poza tą ścieżką element będzie przezroczysty, w środku jest nieprzezroczysty. Dlatego możesz zdefiniować właściwość clip-path
na elementach. Każdy element graficzny, który również istnieje w SVG, możesz użyć tutaj jako funkcji do zdefiniowania ścieżki. Przykładami są circle()
, polygon()
lub ellipse()
.
clip-path: circle(100px at center);
Element będzie widoczny tylko wewnątrz tego koła, które jest umieszczone na środku elementu i ma promień 100 pikseli.
Maskowanie
Maski są podobne do klipów, ale zamiast definiować ścieżkę, definiujesz maskę, które warstwy nad elementem. Możesz sobie wyobrazić tę maskę jako obraz, który składa się głównie z dwóch kolorów: czarno-białego.
Maska luminancji : czarny oznacza, że region jest nieprzezroczysty, a biały, że jest przezroczysty, ale jest też szary obszar, który jest półprzezroczysty, dzięki czemu można wykonywać płynne przejścia.
Maska alfa : Tylko w przezroczystych obszarach maski element będzie nieprzezroczysty.
Ten obraz można na przykład wykorzystać jako maskę luminancji, aby uzyskać bardzo płynne przejście elementu od prawej do lewej i od nieprzezroczystego do przezroczystego.
Właściwość mask
pozwala określić typ maski i obraz, który będzie używany jako warstwa.
mask: url(masks.svg#rectangle) luminance;
Element o nazwie rectangle
zdefiniowany w masks.svg
zostanie użyty jako maska luminancji na elemencie.
Prosta maska, która zmienia obraz z jednolitego na przezroczysty
CSS
div {
height: 200px;
width: 200px;
background: url(http://lorempixel.com/200/200/nature/1);
mask-image: linear-gradient(to right, white, transparent);
}
HTML
<div></div>
W powyższym przykładzie jest element z obrazem jako tłem. Maska zastosowana na obrazie (za pomocą CSS) sprawia, że wygląda on tak, jakby zanikał od lewej do prawej.
Maskowanie uzyskuje się za pomocą linear-gradient
który przechodzi od białego (po lewej) do przezroczystego (po prawej) jako maski. Ponieważ jest to maska alfa, obraz staje się przezroczysty tam, gdzie maska jest przezroczysta.
Wyjście bez maski:
Wyjście z maską:
Uwaga: jak wspomniano w uwagach, powyższy przykład działałby w Chrome, Safari i Operze tylko w -webkit
prefiksem -webkit
. Ten przykład (z linear-gradient
jako obrazem maski) nie jest jeszcze obsługiwany w przeglądarce Firefox.
Używanie masek do wycinania dziury w środku obrazu
CSS
div {
width: 200px;
height: 200px;
background: url(http://lorempixel.com/200/200/abstract/6);
mask-image: radial-gradient(circle farthest-side at center, transparent 49%, white 50%); /* check remarks before using */
}
HTML
W powyższym przykładzie przezroczysty okrąg jest tworzony w środku za pomocą radial-gradient
a następnie jest używany jako maska do uzyskania efektu wycięcia koła ze środka obrazu.
Obraz bez maski:
Obraz z maską:
Używanie masek do tworzenia obrazów o nieregularnych kształtach
CSS
div { /* check remarks before usage */
height: 200px;
width: 400px;
background-image: url(http://lorempixel.com/400/200/nature/4);
mask-image: linear-gradient(to top right, transparent 49.5%, white 50.5%), linear-gradient(to top left, transparent 49.5%, white 50.5%), linear-gradient(white, white);
mask-size: 75% 25%, 25% 25%, 100% 75%;
mask-position: bottom left, bottom right, top left;
mask-repeat: no-repeat;
}
HTML
<div></div>
W powyższym przykładzie trzy obrazy linear-gradient
(które po umieszczeniu w odpowiednich pozycjach obejmowałyby 100% x 100% wielkości pojemnika) są używane jako maski do utworzenia przezroczystego trójkątnego wycięcia u dołu obrazu.
Obraz bez maski:
Obraz z maską: