In order to avoid breaking up a css-shape from the surrounding wrapping text to another column, (… which is far from pretty), when using CSS-Shapes (to make text flow around an image or an object) within a multi-column layout: one can use the property break-inside
with the value avoid-column
on the wrapping element:
.wrap-module {
break-inside: avoid-column;
}
Consider the following HTML-markup one would need in order to achieve this:
<div class="wrap-module">
<div class="shape-rect"></div>
<p class="has-pullquote" data-pullquote="Eligendi cumque ...">
Lorem ipsum ...
</p>
</div>
That is quite some extra HTML-markup for pretty decoration. In this example 1 those elements are inserted into the page with (jQuery) javascript, to keep the HTML clean (here is a fork of this pen in plain-vanilla javascript, with slightly different nesting of elements). Here the CSS-Shape is combined with the classic pullquote with data-attributes trick, which will even make more sense in the near future. 2
Here the .shape-rect
could be a rectangle made with the property shape-outside
with the polygon
values:
.shape-rect {
shape-outside: polygon(0 0, 100% 0, 100% 100%, 0 100%);
float: right;
shape-margin: 1em;
width: 16em;
height: 16em;
}
This is what makes it all work: wrapping the text around the shape.
Examples
Notes
- Disclaimer: the example has many pullquotes: normally one wouldn’t use this many pullquotes on one page, but this is just in order to show it not breaking the layout. One can test this by dragging the browser-window, and maybe also see what happens when removing the
.wrap-module
declaration from the CSS. - One day we will be able to use
shape-inside
and css exclusions for this, but here and now, the pullquote-text pseudo-element is positionedabsolute
right on top of the css-shape itself.
This article was also published on Codepen