Decoding CSS art (🎨+💻)
Tags: css, webdev, codenewbie, codepen
Published: 2020-07-29 11:56:33

## Backstory alert!!

When I joined Twitter, I came across people who were posting CSS illustrations and I was extremely intrigued and confused at the same time. It was not until a month later that I took a deep dive into CSS and started experimenting, that I actually felt like I had achieved a good enough understanding of CSS art. In this post, I've tried to list out all the important things that I've learnt and also some resources that I use frequently.

![CSS illustration of a girl](https://dev-to-uploads.s3.amazonaws.com/i/l7fslcfu1w0yxtmev6dn.png)

## What is CSS art anyways? 🤔

Making CSS art boils down to manipulating the shapes of HTML elements ( mostly divs or spans ) using CSS properties and getting them to look the way you want by gluing them together using CSS positioning.

With me till now? Great, now let's have a look at some CSS properties that I use the MOST while making CSS art and also some resources that will hopefully help you better visualize them.

#### Border radius
This property helps us round the corners of an otherwise rectangular-shaped div or span. I've tried to give you an overview of how this property works in the following image.

Through these numbers, we tell CSS how much of each side it should take to round a given corner.
![Border-radius explanation image](https://dev-to-uploads.s3.amazonaws.com/i/smqu97yjtwh42p2cmyna.png)

Here's a tool that helps in visualizing how border-radius works : [8 point border radius](https://9elements.github.io/fancy-border-radius/full-control.html)

#### Flexbox
I use flexbox heavily to center elements and for easy positioning of elements. In the following image, I applied a display of flex, flex-direction of column, justify-content center and align-items center to the container on the right side. On doing so, I could skip the extra positioning that I would have to do if I hadn't used Flexbox, like in the left container.

![Flex box on Ice-cream containers](https://dev-to-uploads.s3.amazonaws.com/i/n1bf5trl9cphujuqallm.png)

Personally, I learnt flex box from the [Freecodecamp](https://www.freecodecamp.org/learn/responsive-web-design/css-flexbox/) curriculum. Here are some other tools that are very useful to help gain a better grip on Flexbox:
1) [Flexbox visualizer by Paul Trone](https://codepen.io/paultrone/pen/xwxNmQ)
2) [Flexbox froggy](https://flexboxfroggy.com/)

#### Clip-path
Clip-path helps us create almost any polygon that we want. Using this, we can specify a given area on the div or span that we want to show rather than showing its entire rectangular shape.
[Bennett Feely's clip path maker](https://bennettfeely.com/clippy/) is an extremely handy tool that I use frequently to visualize and work with this property.

#### View port dimensions 
Something that I realized recently is to use view port dimensions ( vw, vh, vmin, vmax ) to make the illustrations responsive. View port dimensions help us declare lengths in terms of the view port width or height. The most important among these, at least in the context of CSS art, is the **_vmin_** unit.
It helps us declare the widths and heights of our HTML elements in terms of the minimum value among the view port width and the view port height. This way we can ensure that no matter what device you view the illustration on, it looks exactly the same.

#### Relative and absolute positioning
When we give a relative position to an HTML element, we move it with respect to itself. But when we talk about absolute positioning, we position the element with respect to its parent. In this case the parent should have relative positioning.
The following image illustrates what I'm talking about.
If I add **_right:10px;_** to the inner box in the CSS stylesheet, here is how the result would differ based on whether the inner box is positioned relatively or absolutely.

![Relative position](https://dev-to-uploads.s3.amazonaws.com/i/ulx6gqhpla9dh9gbtztz.png)

![Absolute position](https://dev-to-uploads.s3.amazonaws.com/i/brguj1gcj3fl4zv83v1e.png)

#### Pseudo elements
These refer to the ::before and ::after elements. Don't worry if you haven't heard of them or haven't used them before. Here is a series on YouTube by Kevin Powell, that does an amazing job at explaining the ins and outs of pseudo elements. 
[Part one](https://www.youtube.com/watch?v=zGiirUiWslI), [Part two](https://www.youtube.com/watch?v=xoRbkm8XgfQ) and [Part three](https://www.youtube.com/watch?v=djbtPnNmc0I). 

## Extras ✨

Some other CSS properties that you could use to add depth and definition to your illustrations :

#### Box-shadow
[Here](https://css-tricks.com/almanac/properties/b/box-shadow/) is an article from CSS Tricks which when read along with the [MDN docs on box-shadow](https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow) can help clear up a lot things about how box-shadows work. 
You can use this [Box shadow generator](https://www.cssmatic.com/box-shadow) to visualize how these work. 

#### Gradients ( linear and radial )
[Here's](https://css-tricks.com/css3-gradients/) one of my favorite articles on CSS gradients from CSS tricks.

## Brag alert⤵️⤵️⤵️😂😅

Here is a small collection of illustrations that I made using CSS.

![Scuba divers CSS illustration](https://dev-to-uploads.s3.amazonaws.com/i/0z4c1l513889z4a690sk.png)
![Guitar and sitar CSS illustration](https://dev-to-uploads.s3.amazonaws.com/i/nfqds4ojmg0y9gf8q3t8.png)
![CSS GIF Snapshot](https://dev-to-uploads.s3.amazonaws.com/i/fu202g9mfua7k90221dm.png)

*****

That's it folks! Thank you for reading till the end🎉🎉 I really hope you had something to take way. If this helped you in any way, I'd love to hear🔊 from you. You can catch me on [Twitter](https://twitter.com/thisismanaswini) or [Codepen](https://codepen.io/1832Manaswini) 😊

Have a great day( or night )!!👋👋