CSS/Tutorials/Masken und Beschneidungen/clip-path

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Oft möchte man bei Grafiken nur einen bestimmten Bildausschnitt darstellen. Die konventionelle Vorgehensweise war bisher, die Grafik in einem Bildbearbeitungsprogramm zuzuschneiden oder mit einem (teil)transparenten Hintergrund als gif oder png abzuspeichern.

Mit dem CSS Masking Module ist dies nun direkt im Browser möglich:

clip[Bearbeiten]

Die CSS-Eigenschaft clip ermöglicht es, den Anzeigebereich eines absolut positionierten Elementes rechteckig zu beschneiden.

  • Achtung
  • CSS 2.0
  • Chrome
  • Firefox
  • IE 8
  • Opera
  • Safari

Sie erwartet als Wert eine der Angaben

  • auto, Voreinstellung, keine Beschneidung des Anzeigebereiches
  • die Funktion rect(), Festlegung auf eine rechteckige Fläche zu beschneiden und vier durch Kommata separierte Längenangaben, die negativ jedoch keine Prozentangaben sein dürfen oder jeweils der Wert auto
    • erster Wert: Abstand der oberen Kante des Ausschnitts von der oberen Kante der Borderbox des Elements
    • zweiter Wert: Abstand der rechten Kante des Ausschnitts von der linken Kante der Borderbox des Elements
    • dritter Wert: Abstand der unteren Kante des Ausschnitts von der oberen Kante der Borderbox des Elements
    • vierter Wert: Abstand der linken Kante des Ausschnitts von der linken Kante der Borderbox des Elements

Die Angaben clip: auto; und clip: rect(auto, auto, auto, auto); erzeugen dabei unterschiedliche Darstellungen.


rechteckige Beschneidung mit clip ansehen …
img {
  position: absolute;
  overflow: hidden;
  clip: rect(100px, 135px, 125px, 90px);
}
img:hover { 
  clip: auto; 
}

In diesem Beispiel wird ein Bild dargestellt und auf einen kleinen Ausschnitt zugeschnitten. Mittels der Pseudoklasse :hover wird das gesamte Bild sichtbar gemacht.

Beachten Sie, nicht nur die Darstellung beeinflusst wird, sondern auch :hover zunächst nur über dem Ausschnitt wirkt.

Achtung!

Die Eigenschaft clip ist als "veraltet" bzw. "abgekündigt" (deprecated) eingestuft. Sie sollte bei neuen Projekten nicht verwendet und bei Bearbeitungen ersetzt werden.
In der CSS3-Spezifikation ist die Clip-Eigenschaft künftig durch clip-path ersetzt worden.

clip-path[Bearbeiten]

Die CSS-Eigenschaft clip-path ermöglicht es, festzulegen, dass nicht die gesamte Box des Elementes dargestellt wird.[1] Dabei sind, anders als bei der Vorgänger-Eigenschaft clip, auch andere Formen als Rechtecke möglich. Diese Beschneidungspfade werden als Grundformen oder SVG-Grafik definiert. Dabei sind aber nur scharfe Kanten möglich, weiche Übergänge können Sie mit mask-image erreichen.

  • Chrome
  • Edge
  • Firefox
  • Opera
  • Safari

Details: caniuse.com

Der Titel dieses Artikels ist mehrdeutig. Das gleichnamige SVG-Element finden Sie unter: SVG/clipPath.


Hinweis

Wenn Sie im Internet Code-Beispiele mit der Eigenschaft
  • clip-path: circle(50%, 50%, 50%); finden, dann ist dieser Code veraltet.

Code nach der neuen, gültigen Spezifikation kann man durch:

  • clip-path: circle(50% at 50% 50%); erkennen.

Grundformen (basic shapes)[Bearbeiten]

Als Wert für die clip-path-Eigenschaft können Sie Grundformen festlegen.

  • Chrome
  • Edge
  • Firefox
  • Opera
  • Safari

Details: caniuse.com

Folgende Angaben sind möglich:

  • none: (Standardwert) Bild wird nicht zugeschnitten, sondern normal dargestellt
  • inset: zeichnet ein Rechteck
    • 4 Angaben um wieviel die Seiten eingerückt werden sollen,
    • 2 optionale Angaben für einen (horizontalen und vertikalen) border-Radius
  • circle: zeichnet einen Kreis
    • 1 Angabe für die Größe des Kreisradius
    • das Schlüsselwort at,
    • gefolgt von 2 Angaben für die x- und y-Koordinaten des Mittelpunkts
  • ellipse: zeichnet eine Ellipse
    • 2 Angaben für die Größe der Ellipse
    • das Schlüsselwort at
    • gefolgt von 2 Angaben für die x- und y-Koordinaten des Mittelpunkts
  • polygon: zeichnet ein Vieleck
    • beliebig viele, durch Komma getrennte Koordinatenpaare


Beispiel ansehen …
.clip-rect {
  /* Rechteck */
  -webkit-clip-path: inset(100px 110px 200px 100px );
  clip-path: inset(100px 110px 200px 100px);
}
.clip-circle {
  /* Kreis */
  -webkit-clip-path: circle(35px at 135px 50px);
  clip-path: circle(30px at 35px 35px);
}
.clip-ellipse {
  /* Ellipse */
  -webkit-clip-path: ellipse(65px 30px at 125px 240px); 
  clip-path: ellipse(65px 30px at 125px 40px);
}
.clip-poly {
  /* unregelmäßige Form */
  -webkit-clip-path: polygon(75px 150px, -4px 150px, 60px 203px, 26px 288px, 120px 248px, 206px 298px,
                             177px 211px, 239px 150px, 158px 150px, 122px 36px, 77px 150px);
  clip-path: polygon(75px 150px, -4px 150px, 60px 203px, 26px 288px, 120px 248px, 206px 298px,
                     177px 211px, 239px 150px, 158px 150px, 122px 36px, 77px 150px);
}
img:hover {                                            
  -webkit-clip-path: none;
  clip-path: none;
}

Referenz-Box des Zuschneide-Pfads[Bearbeiten]

Diese Angaben können durch die optionale Angabe der Geometrie-Box, in dem das Zuschneiden stattfinden soll, erweitert werden. Diese Geometrie-Box wird nur für CSS-Formen als Zuschneidepfade festgelegt. Das Element clipPath in SVG verwendet die border box des HTML-Elements als Referenz.

Wenn das zugeschnittene Element ein HTML-Element ist sind folgende Schlüsselwerte möglich:

  • margin-box
  • border-box
  • padding-box
  • content-box

Wenn die Grundformen mit clip-path auf ein SVG-Element angewandt werden, kann die Geometriebox folgende Werte annehmen:

  • fill-box
  • stroke-box
  • view-box – falls keine viewBox festgelegt ist, wird die nächstgelegene Viewbox verwendet. Falls eine ViewBox festgelegt ist, wird das Koordinatensystem dieser ViewBox verwendet.

Referenzieren einer SVG-Grafik[Bearbeiten]

Alternativ können Sie in SVG ein clipPath-Element mit polygonalen Koordinaten definieren und über CSS einbinden. Sara Soueidan zeigt viele Beispiele und Anregungen, wie Bilder und selbst Texte als Formen zum Zuschneiden von Bildern verwendet werden können.[2]

  • Chrome
  • Edge
  • Firefox
  • Opera
  • Safari

Details: caniuse.com

Beispiel ansehen …
.clip-poly{
  -webkit-clip-path: url("#clipPolygon");
  clip-path: url("#clipPolygon");
}
<img class="clip-poly" src="Celsius.jpg" alt="Anders Celsius">

<svg width="0" height="0">
  <clipPath id="clipPolygon">
    <polygon points="75 150,0 150,60 203,26 288,120 248,206 298,177 211,239 150,158 150,122 36,77 150">
    </polygon>
  </clipPath>
</svg>

Anwendungsbeispiel[Bearbeiten]

Zusammenspiel von clip-path und shape-outside[Bearbeiten]

In diesem Beispiel wird ein Bild mit clip-path beschnitten und der Text umfließt dann das beschnittene Bild durch eine Festlegung mit shape-outside.

  • Chrome
  • Edge
  • Firefox
  • Opera
  • Safari

Details: caniuse.com

CSS-Shape-polygon.png

Beispiel ansehen …
img {
  float: left;
  clip-path: polygon(0% 0%, 100% 50%, 0% 100%, 0% 0%);
  shape-outside: polygon(0% 0%, 100% 50%, 0% 100%, 0% 0%);
}

img:hover {
    shape-outside:polygon(0% 0%, 100% 0, 0% 100%, 0% 0%);
    clip-path: polygon(0% 0%, 100% 0%, 0% 100%, 0% 0%);
  }
Wenn Sie mit der Maus über das Bild fahren, verändert sich der mit clip-path festgelegte Bildausschnitt sowie der mit shape-outside definierte Textumfluss.

Browsersupport[Bearbeiten]

Achtung!

Die Eigenschaft clip-path ist derzeit (Stand: Januar 2021) nur in den Browser Firefox implementiert, deshalb muss man proprietäre Eigenschaften verwenden.

für Chrome, Edge, Opera und Safari

  • -webkit-clip-path

Hinweis

Sie sollten bei der Definition solcher noch nicht umfassend verbreiteter Eigenschaften die herstellerspezifischen Angaben immer vor der standardisierten Form machen. Da später gemachte Angaben frühere überschreiben, ist so sichergestellt, dass die standardisierten Angaben von dem Zeitpunkt an, an dem sie unterstützt werden, auch verwendet werden.


Weblinks[Bearbeiten]

  1. W3C: the clip-path property
  2. Sara Soueidan Clipping in CSS and SVG – The clip-path Property


Generator


Artikel