Es bleibt bei float
Der umfließende Text erklärt das Wesentliche an diesem Beispiel. Er verschweigt aber, dass der gefüllte Kreis
in Wirklichkeit eine Box ist, die nach links floatet. Ihre Farbe erhält sie ganz normal per CSS.
Schauen wir uns mal den HTML- und CSS-Code an.
HTML
<div class="examplecover">
<div class="myshape" ></div>
Dieser Text erscheint sauber fließend ...
- weiterer Text -
</div>
CSS
.examplecover {
font-family: sans-serif;
font-size: 14pt;
padding: 20pt;
display: flow-root;
max-width: 400pt;
text-align: justify;
border:1pt solid green;
}
div.myshape {
width: 140pt;
height: 140pt;
background-color: #C8C87E;
float: left;
shape-outside: circle(60pt at 60pt);
clip-path: circle(60pt at 60pt);
shape-margin: 4pt;
}
Das äußere div-Element (.examplecover
) umhüllt das Beispiel
und grenzt es nur auf eine sinnvolle Größe ein.
Das innere div-Element (.myshape
) enthält keinen Inhalt,
wird aber links gefloatet und erhält per CSS Breite und Höhe sowie Hintergrundfarbe.
Es ist jetzt unser Shape.
Seine kreisrunde Form erhält es
von der CSS-Regel
clip-path: circle(60pt at 60pt);
.
Der erste Wert ist der Radius, der zweite die Mittelpunktposition
des Kreises von der linken Seite (in diesem Beispiel) des umgebenden Elements.
Näheres dazu im
MDN zu clip-path.
Gleich zu Anfang findet man ein Beispiel, mit dem demonstriert wird, dass außer Kreis auch Ellipse, Polygon und andere Formen
realisierbar sind.
Wäre noch die Regel
shape-margin
zu erwähnen, mit der man den Abstand zwische Shape und Text bestimmen kann.
Die andere entscheidende Regel ist
shape-outside: circle(60pt at 60pt);
.
Diese Regel hält den Text auf Abstand vom Shape. Die Regel arbeitet völlig unabhängig von
clip-path
,
daher wurde die circle-Funktion mit denselben Werten zugewiesen. Das lässt sich leicht demonstrieren: