NANDHOO.

CSS Shapes & Figures

Chapter 12: CSS Shapes & Figures


CSS is not just for boxes. With a few creative properties, you can draw complex geometric figures, create organic shapes, and even clip images into unique silhouettes. This chapter explores how to move beyond the rectangle to create a more dynamic visual language.




1. Circles and Ellipses with border-radius


The most common way to create shapes is by manipulating the corners of a box.


Basic Circle


.circle {
  width: 100px;
  height: 100px;
  background: #2563eb;
  border-radius: 50%; /* Half of the width/height creates a circle */
}

Basic Ellipsis


.ellipse {
  width: 150px;
  height: 80px;
  background: #10b981;
  border-radius: 50%; /* On a non-square box, 50% creates an ellipse */
}

CircleEllipse



2. Polygons and Custom Shapes with clip-path


clip-path is the most powerful tool for drawing. It defines a specific region of an element that should be visible, effectively "cutting out" the rest.


Common Polygons


/* Triangle */
.triangle {
  clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}

/* Diamond */ .diamond { clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); }


/* Hexagon */ .hexagon { clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%); }


TriangleDiamondHexagon



3. Organic Shapes with border-radius (Eight Values)


You can specify different radii for each corner, and even different horizontal and vertical radii for each corner using the slash / syntax.


.blob {
  width: 200px;
  height: 200px;
  background: linear-gradient(135deg, #f472b6, #db2777);
  border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%;
}

This creates "blob" shapes that feel natural and organic, perfect for modern background decorations.




4. Drawing with ::before and ::after


Pseudo-elements allow you to add extra shapes to an element without adding more HTML tags. This is how many complex CSS icons and figures are built.


Example: A Speech Bubble


.speech-bubble {
  position: relative;
  background: #f1f5f9;
  border-radius: 12px;
  padding: 1rem;
}

.speech-bubble::after { content: ""; position: absolute; bottom: -15px; left: 20px; border-width: 15px 15px 0; border-style: solid; border-color: #f1f5f9 transparent; }




5. CSS Patterns with Gradients


By repeating small shapes created with gradients, you can build complex patterns.


.polka-dot {
  background-image: radial-gradient(#cbd5e1 20%, transparent 20%);
  background-size: 20px 20px;
}

.stripes { background: repeating-linear-gradient( 45deg, #f8fafc, #f8fafc 10px, #f1f5f9 10px, #f1f5f9 20px ); }




6. Debugging Checklist


  1. Is the shape invisible? (Check overflow: hidden or incorrect clip-path coordinates).
  2. Is the clip-path affecting mouse clicks? (Only the visible area is clickable).
  3. Do border-radius: 50% shapes look like ovals? (Check if width and height are equal).
  4. Is the pseudo-element missing? (Check if content: "" and display are set).
  5. Are complex shapes slowing down performance? (Use will-change: clip-path sparingly).