DEV Community

Cover image for Ukulele with CSS 🎨
Kirill Inoz
Kirill Inoz

Posted on

Ukulele with CSS 🎨

If you follow me on Twitter, you would probably know that I'm passionately learning to play ukulele. I always loved to listen to music but I was never interested in learning to play an instrument or even thinking of creating my own music. But that changed in the recent years and now I'm a proud owner of an ukulele.

Another thing that I really wanted to try out for a long time is CSS art. I saw a lot of beautiful art pieces on Twitter and they really inspired me to create my own. That's how I combined programming and music in this art piece.

HTML & CSS

Body

First I created the body of the ukulele using a div and pseudo-elements (after and before).

Alt Text

Bridge & Saddle

Before adding the neck, I've added a bridge at the bottom of the body. Using a pseudo-element I also added a saddle on top of the bridge where the strings are going to end.

Alt Text

Neck

Up next we have the neck of ukulele. It's a simple rectangular div.

Alt Text

Headstock

After creating the neck it was time to put the headstock on top. In this case the pseudo elements are just purple circles which give ukulele's headstock an interesting shape.

Alt Text

Tuning pegs

Now it was time to add the other end called turning pegs where the strings are going to be attached. I decided to split them into two rows with a pair in each row. Like that I could position them relative to each other.

Alt Text

Turners

With the same method as mentioned before, I added the turners themselves.

Alt Text

Strings

Now let's add the most important part the strings. Again positioned relative to each other but absolute in the global container. These are positioned exactly between the saddle and the nut.

Alt Text

Nut

Not a lot to say about the nut, just a div positioned absolute in the global container.

Alt Text

Rest of the strings

The part that took me the longest, I reckon. These are placed in a separate container. In this container they are placed absolute and under a specific angle, so they barely touch the pegs.

Alt Text

Frets

A lot of divs positioned relative to each other and absolute in the global container.

Alt Text

Animation and Audio

Now let's bring the whole thing to life with some animations and sounds. At first I wanted to make the strings realistic that means the animation would start at the point of interaction. But that would be too much effort for a project like this. So I went with a very simple animation in which the string would just move from side to side but get less momentum.

For the sounds I took my ukulele and my phone. I recorded each string separately and assigned each audio to each string.

Alt Text

If you want to try out the audio and animation, I made a separate website for this CSS art (desktop only).

If you want to use this art (with appropriate reference 😉), feel free to check it out on CodePen.

Thank you for your time! ❤

If you liked this article, consider following me on Twitter. I post tips and progress on my projects such as this one. If you have any questions, my DMs on Twitter are always open.

Top comments (5)

Collapse
 
heytimapple profile image
Tim Apple

I have a Uke hanging over my desk. I have had it for 10 plus years now and fiddle with it now and again. I really should take the time to learn to play properly.

Collapse
 
kirillinoz profile image
Kirill Inoz

I know the standard 4 chords (it's enough to play most of the songs) + some other chords for specific songs I wanted to learn.

I mostly use YT tutorials as I'm not good at note reading or coming up with suitable strumming patterns.

The most difficult part was to learn singing and playing at the same time. But it comes with practice.

Collapse
 
heytimapple profile image
Tim Apple

I think I will skip the singing part, I don't want to impart that kind of torture on those around me..lol

Collapse
 
devluc profile image
Devluc

Great work Kirill follow your passions

Collapse
 
kirillinoz profile image
Kirill Inoz

Thank you, Lucian!

Some comments may only be visible to logged-in visitors. Sign in to view all comments.