Skip to main content
Photography of Alvaro Montoro being a doofus
Alvaro Montoro

Coffee Connoisseur

The flag of Togo

Drawing Togo's Flag with CSS

Drawing a flag can be a great styling exercise. It combines many CSS features that can be later used in "real-life" projects: gradients, pseudo-elements, positioning, clip paths...

css html webdev

Checking the Wikipedia page for the Flag of Togo, it describes it as:

  • Five horizontal stripes alternating between green and yellow
  • A squared red field on the top left corner
  • A five-pointed white star on the red field
  • It has a 3:5 proportion (5 width units for each 3 height units)

The flag of Togo

As for the colors, we will use:

  • #006a4e for the green
  • #ffce00 for the yellow
  • #d21034 for the red
  • #fff for the white

HTML

We will code this flag using a single HTML element:

<div role="img" aria-label="Flag of Togo" class="flag togo"></div>

For accessibility reasons, we added a couple of attributes:
role="img" to indicate the element represents an image.
aria-label="Flag of Togo" so assistive technologies can announce the image as Togo's flag.

Maybe it would be better to have a second visually-hidden element with the flag's "alternative text" linked with an aria-labelledby, but we'll keep it as a single element for simplicity.

CSS

Let's start by setting the flag properties that will be needed:

.flag.togo {
  aspect-ratio: 5 / 3;
  position: relative;
}

With aspect-ratio we set the flag's proportion (width goes first in this case). And we set a relative position because we will draw the star using an absolute-positioned pseudo-element and we want to keep it within the flag container.

For the background, we need five horizontal strips: green, yellow, green, yellow, and green. This is a repetitive pattern of greens and yellows that can be easily coded using a repeating linear gradient:

.flag.togo {
  aspect-ratio: 5 / 3;
  position: relative;
  background: repeating-linear-gradient(#006a4e 0 20%, #ffce00 0 40%);
}

Green and yellow stripes

Now that we have the bars, we need the red square at the top left. We could use a pseudo-element, but instead, we will add another gradient to the background:

.flag.togo {
  aspect-ratio: 5 / 3;
  position: relative;
  background: 
    linear-gradient(#d21034 0 0) 0 0 / 36% 60% no-repeat,
    repeating-linear-gradient(#006a4e 0 20%, #ffce00 0 40%);
}

This new gradient will be completely red (#d21034 0 0), positioned at the top left of the flag (0 0), with a width of 36% and a height of 60% of the flag (36% 60%) so it keeps the 3:5 proportion that will make it a square (36 = 60 * 3 / 5). And we need to make sure that it doesn't repeat (no-repeat), otherwise, it will occupy the whole container and everything will be red.

Green and yellow stripes with a red square at the top left corner

With this, we have the base for the flag, and we need to draw the star. We could do it with conic gradients, but that would be a small pain in the neck. Instead, we will use a pseudo-element and then crop it into the star shape using clip-path:

.flag.togo::before {
  content: "";
  width: 20%;
  aspect-ratio: 1;
  position: absolute;
  /* half of the size of the red square */
  left: 18%;
  top: 30%;
  /* translated half its size to top and left to center it */
  transform: translate(-50%, -50%);
  background: #fff;
  clip-path: polygon(50% 2%, 62% 39%, 100% 39%, 69% 61%, 81% 98%, 
                     50% 75%, 19% 98%, 31% 61%, 0% 39%, 38% 39%);
}

Note: These are approximate points for the star. We could use trigonometry to make it perfect. But this will work as a good enough approximation.
With that, we are done! The whole CSS code for the flag of Togo would be:

.flag.togo {
  aspect-ratio: 5 / 3;
  position: relative;
  background: 
    linear-gradient(#d21034 0 0) 0 0 / 36% 60% no-repeat,
    repeating-linear-gradient(#006a4e 0 20%, #ffce00 0 40%);

  &::before {
    content: "";
    width: 20%;
    aspect-ratio: 1;
    position: absolute;
    left: 18%;
    top: 30%;
    background: #fff;
    clip-path: polygon(50% 2%, 62% 39%, 100% 39%, 69% 61%, 81% 98%, 
                       50% 75%, 19% 98%, 31% 61%, 0% 39%, 38% 39%);
  }
}

The flag of Togo

Some Thoughts

If we add a display: inline-block to the flag's styles, we will be able to have it in line with the text. In that case, we will need to set a height or a width so the aspect-ratio property can do its magic and automatically set the other value.

By drawing this flag, we have practiced:

  • Positioning: relative and absolute
  • Gradients: linear and repeating linear
  • Aspect ratios: to set the flag and star's sizes
  • Clip-paths: to shape the star
  • Pseudo-elements: to create the star itself

I hope you enjoyed this short tutorial. I plan to release a new one shortly with other flags, explaining how the different gradients work —and not only the linear ones. Keep an eye out for it!

Article originally published on