Jak korzystać z technik przycinania i maskowania CSS i SVG

Opublikowany: 2023-11-02

Pliki SVG doskonale nadają się do pracy w Internecie, a przycinanie i maskowanie umożliwiają ciekawe sposoby pokazywania lub ukrywania fragmentów grafiki internetowej. Korzystanie z tych technik pozwala również na większą elastyczność projektów, ponieważ nie trzeba ręcznie wprowadzać zmian i tworzyć nowych obrazów — wszystko odbywa się za pomocą kodu. Stosując kombinację technik przycinania i maskowania CSS, będziesz mieć wiele opcji grafiki swojej witryny.

Aby to wyjaśnić, maskowanie i przycinanie to dwa różne sposoby manipulowania obrazami za pomocą CSS. Zacznijmy od przycinania.

Podstawy przycinania

Jeśli kiedykolwiek korzystałeś z Photoshopa, prawdopodobnie znasz już maski przycinające. To podobne podejście. Przycinanie polega na umieszczeniu kształtu wektorowego, takiego jak okrąg lub trójkąt, na obrazie lub elemencie. Dowolna część obrazu znajdująca się za kształtem będzie widoczna, natomiast wszystko poza granicami kształtu będzie ukryte.

Na przykład, jeśli trójkątna maska ​​przycinająca znajduje się nad obrazem lasu, obraz lasu będzie widoczny w kształcie trójkąta. Granica kształtu nazywana jest ścieżką klipu i nie należy jej mylić ze amortyzowaną właściwością clip . Ścieżkę klipu tworzysz za pomocą właściwości clip-path .

Grafika przedstawiająca postęp obrazu, ścieżkę klipu o nieregularnym kształcie oraz zmiany obrazu po przycięciu

Uwaga: nie próbuj tego w swojej aktywnej witrynie

Pamiętaj: nigdy nie powinieneś zmieniać kodu bezpośrednio na swojej stronie, aby mieć pewność, że nic się nie zepsuje. Nasza bezpłatna aplikacja do programowania lokalnego, Local, pomoże Ci skonfigurować środowisko testowe, w którym możesz bezpiecznie postępować zgodnie z tym samouczkiem.


Przycinanie w akcji

Klipy są zawsze ścieżkami wektorowymi. Zrozumienie tego może być mylące, ale wszystko poza ścieżką będzie ukryte, a wszystko wewnątrz ścieżki będzie widoczne. Aby lepiej zrozumieć i przetestować to samodzielnie, zobacz próbkę na CodePen.

Zrzut ekranu przykładowego obrazu na CodePen

Oto fragment struktury HTML z przykładu:

 [html]

<svg class="clip-svg">
	<defs>
		<clipPath id=&wielokąt-przycięcie-trójkąt-równoboczny" klipPathUnits="objectBoundingBox">
			<punkty wielokąta=&0 0,87, 0,5 0, 0,5 0, 1 0,87" />
		</clipPath>
	</defs>
</svg>

[/html]

To jest CSS, który umożliwia przycinanie:

 [css]

.polygon-clip-trójkąt-równoboczny {
	- ścieżka-klipu webkit: wielokąt (0% 87%, 50% 0%, 50% 0%, 100% 87%);
	ścieżka klipu: wielokąt (0% 87%, 50% 0%, 50% 0%, 100% 87%);
	-webkit-clip-path: url("#polygon-clip-trójkąt-równoboczny");
	ścieżka-klipu: url("#polygon-clip-trójkąt-równoboczny");
}

[/css]

Możesz zobaczyć, gdzie w kodzie HTML znajduje się odwołanie do identyfikatora clipPath i w jaki sposób wykorzystuje on adres URL clip-path do wykonania przycinania.

Narzędzie Clippy

Clippy to świetne narzędzie do generowania ścieżek klipów CSS. Istnieje wiele różnych kształtów i rozmiarów starterów, które można dostosować.

zrzut ekranu ilustrujący ścieżkę wycinania o kształcie 7-stronnym

Podstawy maskowania

Maskowanie odbywa się za pomocą obrazu PNG, gradientu CSS lub elementu SVG w celu ukrycia części obrazu lub innego elementu na stronie. Skupimy się na grafice SVG, ale należy pamiętać, że można to zrobić w przypadku innych typów obrazów i stylów.

Właściwość maski i element maski

Dla przypomnienia, aby pomóc w wizualizacji, ważne jest, aby pamiętać, że zamaskowany element to „oryginalny” obraz (przed nałożeniem maski). Możesz nie chcieć widzieć całego obrazu, więc ukrywanie jego części odbywa się za pomocą właściwości mask CSS. mask to skrót CSS oznaczający grupę indywidualnych właściwości, którym zajmiemy się za chwilę. Element SVG <mask> jest używany wewnątrz grafiki SVG w celu dodania efektów maskowania. W tym przykładzie maską jest okrąg i zastosowano również gradient.

Używanie elementu maski SVG na grafice SVG

Aby zapoznać się z <mask> SVG, będziemy maskować grafiką SVG.

Na pierwszy rzut oka może to być nieco skomplikowane, ale wszystko razem maskuje podstawowy obraz. Mamy rzeczywisty obraz jako tło, więc gdzie w grę wchodzi SVG? W przeciwieństwie do przykładów przycinania, ten obraz tła technicznie rzecz biorąc znajduje się wewnątrz elementu SVG. Użyjemy CSS, aby zastosować tę maskę do obrazu. Właściwości będą pochodzić z elementu maski SVG i nadamy mu identyfikator masked-element w naszym CSS.

Aby zobaczyć to w akcji, sprawdź ten przykład Codepen. Oto działający kod zamaskowanej grafiki SVG:

 [html]

&amp;amp;amp;lt;svg class=&amp;quot;element-maskowany&amp;quot; szerokość=&amp;quot;300&amp;quot; wysokość=&amp;quot;300&amp;quot; viewBox=&amp;quot;0 0 300 300&amp;quot;&amp;amp;gt;
	&amp;amp;lt;obraz xlink:href=&amp;quot;link do zdjęcia&amp;quot; szerokość=&amp;quot;300px&amp;quot; wysokość=&amp;quot;300px&amp;quot; /&amp;amp;amp;gt;
&amp;amp;lt;/svg&amp;amp;amp;gt;

[/html] 
zrzut ekranu przedstawiający granice zamaskowanego elementu
jeśli przejdziesz do Inspektora, zobaczysz granice zamaskowanego elementu. Okrągły kształt tworzony jest za pomocą maski.

W tym CSS określamy, gdzie znaleźć maskę. Będzie szukać identyfikatora #mask-this:

 [css]
/* Oto CSS do maskowania */
.zamaskowany obraz elementu {
  maska: url(#maska1);
}

[/css] 
niebieski prostokąt, pośrodku znajduje się okrągły obraz lasu. Tekst na obrazie brzmi: To jest maska ​​SVG na elemencie SVG. Maska SVG na elemencie SVG. Obecnie działa w Webkit, Firefox i IE

Zauważasz gradient w kształcie okręgu? Zastosowano gradient i ustawiono kształt okręgu dla maski.

 [html]

&amp;amp;amp;lt;svg class=&amp;quot;svg-mask&amp;quot;&amp;amp;gt;
 	&amp;amp;amp;lt;defs&amp;amp;amp;gt;
 		&amp;amp;lt;id maski=&amp;quot;maska1&amp;quot; maskUnits=&amp;quot;objectBoundingBox&amp;quot; maskContentUnits=&amp;quot;objectBoundingBox&amp;quot;&amp;amp;amp;gt;
    &amp;amp;lt;linearGradient id=&amp;quot;grad&amp;quot; gradientUnits=&amp;quot;objectBoundingBox&amp;quot; x2=&amp;quot;0&rdquo; y2=&amp;1&amp;quot;&amp;amp;gt;
      &amp;amp;lt;stop stop-color=&amp;quot;biały&amp;quot; offset=&amp;quot;0&amp;quot;/&amp;amp;gt;
      &amp;amp;lt;stop stop-color=&amp;quot;zielony&amp;quot; stop-opacity=&amp;quot;0&amp;quot; offset=&amp;quot;1&amp;quot;/&amp;amp;gt;
    &amp;amp;amp;lt;/linearGradient&amp;amp;amp;gt;
    &amp;amp;lt;okrąg cx=&amp;quot;0,50&amp;quot; cy=&amp;quot;0,50&amp;quot; r=&quot;0,50&amp;quot; id=&amp;quot;okrąg&amp;quot; fill=&quot;url(#grad)&amp;quot;/&amp;amp;gt;
  	&amp;amp;amp;lt;/maska&amp;amp;amp;gt;
 	&amp;amp;amp;lt;/defs&amp;amp;amp;gt;
&amp;amp;lt;/svg&amp;amp;amp;gt;

[/html]

Maskowanie tekstu SVG

Maskowanie tekstu może zrobić całkiem fajne rzeczy, na przykład pokazać obraz przez blok tekstu. Dobra wiadomość jest taka, że ​​wewnątrz maski SVG można zastosować element tekstowy. Ponieważ w przyszłości obsługa przeglądarek będzie coraz większa, może to być naprawdę interesujący sposób łączenia obrazów i typografii.

obraz lasu z nakładką tekstową o treści: Mój tekst Maskowanie SVG z tekstem SVG i elementami maski: wyświetla się w Webkit, Firefox i IE

Oto podstawowe wyjaśnienie tego, co się dzieje. Wewnątrz maski SVG znajduje się element tekstowy SVG. Określiliśmy wartość RGB dla bieli, która tworzy owalny obszar wokół zamaskowanego tekstu. Wszystko, co znajduje się za owalnym obszarem, jest widoczne przez tekst, dając wrażenie wycięcia.

 [html]

&amp;amp;amp;lt;div class=&amp;quot;zawijanie tekstu&amp;quot;&amp;amp;gt;
    &amp;amp;amp;lt;svg class=&amp;quot;tekst-demo&amp;quot; viewBox=&amp;quot;0 0 600 400&quot; szerokość=&amp;quot;600&amp;quot; wysokość=&amp;quot;400&amp;quot;&amp;amp;gt;
    &amp;amp;amp;lt;defs&amp;amp;amp;gt;
      &amp;amp;lt;id maski = &amp;quot;mojaMaska&amp;quot;&amp;amp;gt;
        &amp;amp;lt;rect szerokość=&amp;quot;100%&amp;quot; wysokość=&amp;quot;100%&amp;quot; fill=&quot;#fff&amp;quot; /&amp;amp;amp;gt;
        &amp;amp;lt;tekst x=&amp;quot;50&amp;quot; y=&amp;quot;200&amp;quot; id=&amp;quot;mój tekst&amp;quot;&amp;amp;amp;gt;Mój tekst&amp;amp;lt;/text&amp;amp;gt;
        &amp;amp;lt;tekst x=&amp;quot;125&amp;quot; y=&amp;quot;293&amp;quot; id=&amp;quot;mójpodtekst&amp;quot;&amp;amp;gt;SVG&amp;amp;lt;/text&amp;amp;gt;
      &amp;amp;amp;lt;/maska&amp;amp;amp;gt;
    &amp;amp;amp;lt;/defs&amp;amp;amp;gt;
    &amp;amp;lt;elipsa class=&amp;quot;zamaskowany&amp;quot; cx=&amp;quot;300&quot; cy=&amp;quot;200&quot; rx=&amp;quot;300&quot; ry=&amp;quot;150&quot; fill=&quot;rgba(255, 255, 255, 0,8)&quot; /&amp;amp;amp;gt;
  &amp;amp;lt;/svg&amp;amp;amp;gt;
  &amp;amp;amp;lt;/div&amp;amp;amp;gt;

[/html]
 [css]

/* Oto kod CSS elementu tekstowego */
#mójTekst {
rozmiar czcionki: 125 pikseli;
styl czcionki: pogrubiony;
wypełnienie: #000;
}

/* Oto CSS do maskowania */
.zamaskowany {
maska: url(&quot;#myMask&amp;quot;);
}

[/css]

Aby w pełni zrozumieć, warto pobawić się i poeksperymentować z kodem. Spróbuj zmienić kolory, zmienić tekst i dostosować rozmiary w tym Codepen.

Właściwość obrazu-maski

Można zadeklarować obraz, a mask-image można ustawić na wartość adresu URL. mask-image może być plikiem PNG, SVG lub odniesieniem do elementu mask SVG, jak pokazałem w poprzednim przykładzie.

Ponieważ maskowanie służy do częściowego lub całkowitego ukrycia części obiektu lub elementu, najpierw potrzebujesz łącza obrazu do pliku elementu, który ma być maskowany. Oto jak wygląda ten obraz. Jest kolorowa, dzięki czemu wyraźnie widać, która część maski jest widoczna, a która ukrywa.

 [css]

&amp;amp;lt;img class=&amp;quot;maska-img przykładowa maska&amp;quot; src=&amp;quot;https://linktoimage.com/img/image-example.jpg&amp;quot; alt=&amp;quot;Zamaskowany obraz&amp;quot;&amp;amp;gt;

[/css] 
abstrakcyjny obraz z dużą ilością nakładających się kolorów

Jak dotąd pojawiło się dużo kodu SVG, ale ten przykład jest nieco inny, ponieważ obraz rastrowy będzie zamaskowany za pomocą SVG.

 [css]

.przykładowa maska ​​{
  obraz-maski: url(https://linktoimage.com/browser-icon-01.svg);
  webkit-mask-image: url(https://linktoimage.com/browser-icon-01.svg);
  tryb maski: alfa;
  tryb maski webkit: alfa;
  powtórzenie maski: brak powtórzeń;
  webkit-mask-repeat: brak powtórzeń;
  rozmiar maski: 200px;
  rozmiar maski webkit: 200px;
  pozycja maski: środkowa;
  pozycja maski webkit: środek;
}

[/css]

Właściwość mask-image służy do deklarowania kształtu maski. W tym przypadku obrazem maski jest grafika SVG. Uwzględnienie łącza URL określa sposób budowania maski.

grafika svg w kolorze czarnym i ta sama grafika pełna abstrakcyjnych kolorów

Tutaj jest na Codepen.

Łączenie wielu obrazów masek

Właśnie wtedy, gdy myślałeś, że maskowanie nie może być lepsze, istnieje możliwość ustawienia więcej niż jednej warstwy obrazu maski. Wszystko, co musisz zrobić, to dodać dwie wartości adresu URL (lub więcej, jeśli czujesz się ambitny) oddzielone przecinkiem.

Aby rozwinąć prostą maskę z góry, do oryginalnej grafiki zostanie dodana strzałka. Oto jak łączone są dwie maski.

 [css]

.maska-kombinowana {
   mask-image: url(https://linktoimage.com/arrow-01.svg), url(https://linktoimage.com/browser-icon-01.svg);
  webkit-mask-image: url(https://linktoimage.com/arrow-01.svg), url(https://linktoimage.com/browser-icon-01.svg);
}

[/css] 
inna grafika SVG z dużą ilością abstrakcyjnych kolorów

Wszystko, co musisz zrobić, to dodać dwie wartości (z przecinkiem), a teraz otrzymasz dwie połączone maski, dzięki czemu możliwości maskowania są nieograniczone.

Tutaj jest na Codepen.

Utwórz prosty gradient z mask-image

Nie wszystkie maski muszą mieć skomplikowany kształt. Czasami maską nie jest konkretny obraz, ale prosta maska, taka jak gradient. Jeśli szukasz szybkiego sposobu na osiągnięcie tego celu, opcją jest właściwość mask-image , która jest dość łatwa do wdrożenia.

W tym przykładzie zastosowano klasę do gradientu ustawionego jako właściwość mask-image . Dzięki tej prostej deklaracji łatwo było utworzyć na obrazie maskę gradientową.

 [css]

obraz-maski: gradient liniowy (czarny, biały, przezroczysty);
-webkit-mask-image: gradient liniowy (czarny, biały, przezroczysty);

[/css] 
ten sam abstrakcyjny obraz z góry z dużą ilością nakładających się kolorów

Zobacz to na Codepen.

Właściwość powtarzania maski

Kiedy już stworzysz jedną maskę, bardzo łatwo jest stworzyć więcej. To naprawdę przydaje się, jeśli chcesz stworzyć niestandardowy wzór. Właściwość mask-repeat pozwala na powtarzanie maski. Jeśli kiedykolwiek wcześniej tworzyłeś tło z kafelków, jest to podobne do tego.

Należy pamiętać o kilku ważnych kwestiach, takich jak rozmiar i rodzaj powtórzeń maski, które należy zadeklarować, aby powstał idealny wzór.

mask-size jest dość łatwy do wizualizacji, szczególnie przy ustawionej tutaj wartości piksela.

 [css]

rozmiar maski: 200px;
rozmiar maski webkit: 200px;

[/css] 
abstrakcyjny obraz z góry, ale zamiast być jednolitym obrazem, wiele powtarzających się konturów wypełnia przestrzeń, a abstrakcyjne tło je koloruje

Jeśli szukasz innego efektu dla wzoru, dostępnych jest jeszcze kilka opcji powtarzania maski:

  • repeat-x powtarza wzdłuż współrzędnej x.
  • Repeat-y powtarza współrzędną y.
  • space powtarza się i rozprzestrzenia na dostępnym obszarze.
  • round powtarza się kilka razy na dostępnym obszarze (skalowanie pomoże w razie potrzeby wypełnić przestrzeń)

Obsługa przeglądarki

Zanim zdecydujesz się na nowy sposób pracy z grafiką, należy pamiętać, że obsługa przeglądarek nie jest spójna z przycinaniem i maskowaniem. Przycinanie jest częściej obsługiwane niż maskowanie, ale program Internet Explorer nie obsługuje w pełni przycinania.

Obecna obsługa masek CSS w przeglądarkach jest również dość ograniczona, dlatego sugeruje się użycie ich jako ulepszenia kilku elementów dekoracyjnych. Dzięki temu, jeśli nie jest obsługiwana przez przeglądarkę użytkownika, nie wpływa to na komfort przeglądania treści.

Aby przetestować rozwiązanie i sprawdzić, czy Twoje maski i wycinki są obsługiwane, zalecamy utworzenie JSFiddle lub Codepen, a następnie wypróbowanie go w różnych przeglądarkach. W ostatnich latach wzrosło wsparcie dla przeglądarek i ostatecznie dojdzie do punktu, w którym będzie ono w pełni obsługiwane.

Nie pozwól, aby ograniczenia Cię ograniczały — zawsze dobrze jest wyprzedzać konkurencję, a gdy wsparcie stanie się bardziej popularne, będziesz wiedział dokładnie, jak zrewolucjonizować swoją grafikę. W razie wątpliwości skorzystaj z zaufanej witryny Can I Use.


Po przeprowadzeniu eksperymentów z tymi przykładami powinno to stanowić dobre wprowadzenie do maskowania i przycinania. Chociaż obsługa przeglądarek jest obecnie ograniczona, w przyszłości prawdopodobnie stanie się to powszechną praktyką.

Zawsze fajnie jest myśleć o tym, jak można wykorzystać te techniki do tworzenia ciekawych efektów wizualnych. Przyszłość grafiki internetowej sprawi, że będziemy mniej zależni od edytorów obrazów i umożliwią bardziej efektywne sposoby tworzenia i modyfikowania obrazów bezpośrednio w przeglądarce.

Jeśli chcesz, aby cała ciężka praca, którą włożyłeś w swoje witryny, naprawdę zabłysnęła, upewnij się, że wybierasz najlepszy możliwy hosting WordPress z WP Engine!