DEV Community

Cover image for Liquorice Allsorts
Mads Stoumann
Mads Stoumann

Posted on

13 5 4 3 5

Liquorice Allsorts

This is a submission for DEV Challenge v24.03.20, CSS Art: Favorite Snack.

Inspiration

Liquorice allsorts — my favourite snack, although not good for my blood pressure 😁

Demo

Journey

Each delicious piece is a <ul>-tag with a <li> for each "layer":

Layers

<ul>
  <li style="--bg:#61442c"></li>
  <li style="--bg:#262626"></li>
  <li style="--bg:#61442c"></li>
  <li style="--bg:#262626"></li>
  <li style="--bg:#61442c"></li>
</ul>
Enter fullscreen mode Exit fullscreen mode

And CSS:

li {
  --h: calc(var(--w) / 6);
  background: var(--bg);
  grid-area: 1 / 1;
  height: var(--w);
  list-style: none;
  width: var(--w);
  position: relative;
}

ul {
  all: unset;
  display: grid;
}
Enter fullscreen mode Exit fullscreen mode

To position the layers with an offset, --h (a sixth of the width), I use:

  &:nth-of-type(1) {
    left: calc(0px - (2 * var(--h)));
    top: calc(0px - (2 * var(--h)));
  }
  &:nth-of-type(2) {
    left: calc(0px - var(--h));
    top: calc(0px - var(--h));
  }
  &:nth-of-type(4) {
    left: calc(0px - (-1 * var(--h)));
    top: calc(0px - (-1 * var(--h)));
  }
  &:nth-of-type(5) {
    left: calc(0px - (-2 * var(--h)));
    top: calc(0px - (-2 * var(--h)));
  }
Enter fullscreen mode Exit fullscreen mode

Next, apply transform: skewX(-20deg) to the <ul>:

Skew

Add small "triangles" to the edges with ::before and ::after pseudo-elements — using clip-path for the triangles:

li {
  &::after, &::before {
    background: var(--bg);
    content: '';
    height: var(--h);
    position: absolute;
    width: var(--h);
  }
  &::after {
    clip-path: polygon(0 0, 0 100%, 100% 100%);
    right: 1px;
    top: calc(1px - var(--h));
  }
  &::before {
    bottom: 1px;
    clip-path: polygon(0 0, 100% 0, 100% 100%);
    left: calc(1px - var(--h));
  }
}
Enter fullscreen mode Exit fullscreen mode

Before and after

… and finally, apply a box-shadow to each <li>:

li {
   box-shadow: calc(0px - var(--h)) calc(0px - var(--h)) 0 0px var(--bg);
}
Enter fullscreen mode Exit fullscreen mode

Box Shadow

And that's it! All there's left to do is to add or remove layers, change colors (yellow, orange, pink, white) — and rotate them:

@keyframes rotate {
  0% { rotate: var(--d); }
  100% { rotate: calc(360deg + var(--d)); }
}
Enter fullscreen mode Exit fullscreen mode

— where --d is a rotation angle set on each <ul>:

<ul style="--d:91deg;"> ... </ul>
Enter fullscreen mode Exit fullscreen mode

Enjoy your snack!

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (4)

Collapse
 
philiphow profile image
Philip How

Amazing work. I do love liquorice allsorts!

Collapse
 
madsstoumann profile image
Mads Stoumann

Thank you!

Collapse
 
jitendrachoudhary profile image
Jitendra Choudhary

It's 👍 good, Mads

Collapse
 
madsstoumann profile image
Mads Stoumann

Thanks!

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay