Wrapping text inside a circular shape

Temani Afif - Feb 17 '21 - - Dev Community

Find out more CSS tricks at css-tip.com

Yes, we are going to make a text wrap perfectly inside a circular shape. No JS, no SVG, no external plugin. Only few lines of CSS and a basic HTML structure.

Let's go!

Explanation

<div class="box">
  <i></i> 
  Lorem ipsum ..
</div>
Enter fullscreen mode Exit fullscreen mode
div.box {
  --s:450px;  /*Size of the circle */
  --p:15px;  /* padding */

  height: var(--s);
  width:  var(--s);
  border-radius: 50%;
}
.box i,
.box::before {
  content: '';
  float: left;
  height:100%;
  width: 50%;
  shape-outside: radial-gradient(farthest-side at right, transparent calc(100% - var(--p)), #fff 0);
}
.box i {
  float: right;
  shape-outside: radial-gradient(farthest-side at left,  transparent calc(100% - var(--p)), #fff 0);
}

Enter fullscreen mode Exit fullscreen mode

[box]

A basic div element having width=height and border-radius:50% to create a visual circle. I said "visual" because it's not the one that will make our text wrap around.

[i] & [box::before]

Two floating elements covering the whole div (full height and half width for each one) where we apply shape-outside to create half a circle inside each one. Below an illustration to better understand

Text inside circular shape

The red element floating to the left will have half a circle on its right and the blue one will simply have the opposite. We adjust the radius of the circle using the variable p to simulate padding with the visual circle created by box.

That's it!

We can easily extend this trick to consider different shapes. All we have to do is to adjust shape-outside and keep the symmetry.

Example with a Rhombus

Related posts for more shapes

CSS Challenges - Custom text shape

Stack Overflow - CSS rotate text by n degress, but not the boundary box?

Stack Overflow - How to wrap text around a shape with border-radius?

Stack Overflow - Containing text within border-radius blob


buy me a coffee

OR

Become a patron

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .