Create an Animated Button with HTML and CSS: Step-by-Step Tutorial


By Faraz -

Learn how to create an animated button using HTML and CSS with our step-by-step tutorial. Design visually appealing buttons that engage users on your website.

Animated button created with HTML and CSS.jpg

Table of Contents

  1. Project Introduction
  2. HTML Code
  3. CSS Code
  4. Preview
  5. Conclusion

Animated buttons have become an increasingly popular element in web design, as they add a touch of interactivity and visual appeal to websites. By incorporating dynamic effects and transitions using HTML and CSS, animated buttons can enhance the user experience and make your website more engaging.

In this step-by-step tutorial, we will guide you through the process of creating an animated button using HTML and CSS. Whether you are a beginner or an experienced web developer, this tutorial will provide you with the necessary knowledge and skills to design eye-catching buttons that captivate your audience.

Why are animated buttons worth considering? Well, in today's digital landscape, users have high expectations when it comes to the overall experience they have on a website. Static buttons may not always be enough to grab their attention or convey important information effectively. On the other hand, animated buttons provide a dynamic and interactive element that can instantly draw the user's eye, guide their attention, and encourage them to take action.

Adding animation to buttons can serve various purposes. It can create visual feedback, indicating to the user that an action has been triggered or completed successfully. This feedback helps users understand the system's response and provides a sense of accomplishment. Moreover, animated buttons can also enhance call-to-action elements by making them more compelling and enticing users to click.

Designing an animated button involves combining HTML, CSS, and optionally JavaScript. While HTML provides the structure and content of the button, CSS is responsible for the visual styling, including colors, typography, and layout. JavaScript can be used to add interactivity to the button, such as triggering animations on hover or click events.

This tutorial will cover the essential steps to create an animated button. We will begin with the HTML markup, where you will learn how to structure the button element. Then, we will move on to basic CSS styling, where you will discover how to customize the appearance of the button. Lastly, we will dive into CSS animation, exploring various animation properties and effects.

So, if you are ready to bring your button to life and make them stand out on your website, let's get started with the step-by-step process of creating an animated button with HTML and CSS.

Join My Telegram Channel to Download the Projects Source Code: Click Here


Before starting this tutorial, you should have a basic understanding of HTML and CSS. Additionally, you will need a code editor such as Visual Studio Code or Sublime Text to write and save your code.

Source Code

Step 1 (HTML Code):

To get started, we will first need to create a basic HTML file. In this file, we will include the main structure for our button.

After creating the files just paste the following codes into your file. Make sure to save your HTML document with a .html extension, so that it can be properly viewed in a web browser.

Let's break it down step by step:

1. <!DOCTYPE html>: This is the document type declaration and indicates that the document is an HTML file.

2. <html lang="en">: This tag defines the root element of the HTML document and specifies the language as English.

3. <head>: This is the head section of the HTML document. It contains meta-information and external resources used by the webpage.

4. <title>Animated Button</title>: This tag sets the title of the webpage, which is displayed on the browser's title bar or tab.

5. <meta charset="UTF-8" />: This meta tag specifies the character encoding for the HTML document, ensuring that the text is interpreted correctly.

6. <meta name="viewport" content="width=device-width" />: This meta tag sets the viewport properties, which determine how the webpage is displayed on different devices with varying screen sizes.

7. <link rel="stylesheet" href="styles.css" />: This line links an external CSS (Cascading Style Sheets) file named "styles.css" to the HTML document. The CSS file contains style rules that define the appearance and layout of the webpage.

8. <body>: This is the body section of the HTML document. It contains the visible content of the webpage.

9. <div class="center">: This div element represents a container with the CSS class "center". It is used to center-align the content within it.

10. <button class="fancy">: This button element represents a clickable button with the CSS class "fancy". The class is used to apply specific styles to the button.

11. <span class="top-key"></span>: This span element with the CSS class "top-key" represents an empty container used for styling purposes. It could be used to display a graphical element, such as an arrow or an icon.

12. <a href="#" target="_blank" class="">Download Code</a>: This anchor (link) element represents a hyperlink with the text "Download Code". The "href" attribute is set to "#" which indicates a link to the current page itself. The "target" attribute is set to "_blank", which opens the link in a new browser tab. The "class" attribute is empty, so no specific styles are applied.

13. <span class="bottom-key-1"></span> and <span class="bottom-key-2"></span>: These span elements with CSS classes "bottom-key-1" and "bottom-key-2" represent empty containers used for styling purposes, similar to the "top-key" span.

14. </button>: This closing tag ends the button element.

15. </div>: This closing tag ends the div element.

16. </body>: This closing tag ends the body section of the HTML document.

17. </html>: This closing tag ends the HTML document.

This is the basic structure of our button using HTML, and now we can move on to styling it using CSS.

Step 2 (CSS Code):

Once the basic HTML structure of the button is in place, the next step is to add styling to the button using CSS.

Next, we will create our CSS file. In this file, we will use some basic CSS rules to create our button.

1. The .center class is used to center an element on the page. It uses Flexbox properties to align the content both horizontally and vertically, and it adds a top margin of 50 pixels.

2. The button.fancy class is used to style a button element with a fancy appearance. Here's a breakdown of its properties:

  • -webkit-appearance: button; sets the button to have the default appearance defined by the browser.
  • background-color: transparent; makes the background of the button transparent.
  • border: 2px solid #000; sets a black border with a thickness of 2 pixels.
  • border-radius: 0; removes any border radius, making the corners sharp.
  • box-sizing: border-box; includes the border and padding within the button's total width and height.
  • color: #fff; sets the text color to white.
  • cursor: pointer; changes the cursor to a pointer when hovering over the button.
  • display: inline-block; makes the button behave like an inline element but allows setting width and height.
  • font-weight: 700; sets the font weight to bold.
  • letter-spacing: 0.05em; adds a small amount of space between each letter.
  • margin: 0; removes any margin around the button.
  • outline: none; removes the default outline when the button is focused.
  • overflow: visible; allows content to overflow outside the button's boundaries.
  • padding: 1.25em 2em; sets the padding inside the button to 1.25em (top and bottom) and 2em (left and right).
  • position: relative; positions the button relative to its normal position.
  • text-align: center; centers the text horizontally within the button.
  • text-decoration: none; removes any text decoration, such as underlines.
  • text-transform: none; preserves the original capitalization of the text.
  • transition: all 0.3s ease-in-out; applies a smooth transition effect to all properties over 0.3 seconds.
  • user-select: none; prevents the button's text from being selected.
  • width: 16.8125rem; sets the width of the button to a specific size.

3. The button.fancy::before selector is used to style a pseudo-element that appears before the button's content. It creates a horizontal line at the top of the button:

  • content: " "; adds an empty content before the button's content.
  • width: 1.5625rem; sets the width of the line.
  • height: 2px; sets the height of the line.
  • background: black; sets the background color of the line to black.
  • top: 50%; positions the line at the vertical center of the button.
  • left: 1.5em; positions the line with a left offset of 1.5em.
  • position: absolute; positions the line absolutely within the button.
  • transform: translateY(-50%); vertically centers the line using a translation.
  • transform-origin: center; sets the transformation origin to the center of the line.

4. The button.fancy a selector styles the anchor element within the button. It sets the font size, line height, padding, and other properties:

  • font-size: 1.125em; sets the font size of the anchor text.
  • line-height: 1.33333em; sets the line height of the anchor text.
  • padding-left: 2em; adds padding to the left side of the anchor text.
  • display: block; makes the anchor element a block-level element, taking up the full width available.
  • text-align: left; aligns the text to the left within the anchor element.
  • transition: all 0.3s ease-in-out; applies a smooth transition effect to all properties over 0.3 seconds.
  • text-transform: uppercase; transforms the text to uppercase.
  • text-decoration: none; removes any text decoration, such as underlines.
  • color: black; sets the text color to black.

5. The button.fancy .top-key, button.fancy .bottom-key-1, and button.fancy .bottom-key-2 selectors style additional elements within the button, creating horizontal lines at the top and bottom:

  • .top-key sets a white line at the top of the button, with specific positioning and transition properties.
  • .bottom-key-1 sets a white line at the bottom of the button with different positioning and transition properties.
  • .bottom-key-2 sets a shorter white line at the bottom of the button with different positioning and transition properties.

6. The button.fancy:hover selector styles the button when it is being hovered over by the mouse. It changes the text color to white and the background color to black.

7. Several button.fancy:hover selectors with additional selectors target the pseudo-element, anchor element, and other lines within the button. These selectors modify their properties when the button is hovered over to create various visual effects like changing sizes, positions, and colors.

This will give our button an upgraded presentation. Create a CSS file with the name of styles.css and paste the given codes into your CSS file. Remember that you must create a file with the .css extension.

.center {
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 50px;

button.fancy {
  -webkit-appearance: button;
  background-color: transparent;
  border: 2px solid #000;
  border-radius: 0;
  box-sizing: border-box;
  color: #fff;
  cursor: pointer;
  display: inline-block;
  font-weight: 700;
  letter-spacing: 0.05em;
  margin: 0;
  outline: none;
  overflow: visible;
  padding: 1.25em 2em;
  position: relative;
  text-align: center;
  text-decoration: none;
  text-transform: none;
  transition: all 0.3s ease-in-out;
  user-select: none;
  width: 16.8125rem;
button.fancy::before {
  content: ' ';
  width: 1.5625rem;
  height: 2px;
  background: black;
  top: 50%;
  left: 1.5em;
  position: absolute;
  -webkit-transform: translateY(-50%);
  transform: translateY(-50%);
  -webkit-transform-origin: center;
  transform-origin: center;
button.fancy a {
  font-size: 1.125em;
  line-height: 1.33333em;
  padding-left: 2em;
  display: block;
  text-align: left;
  -webkit-transition: all 0.3s ease-in-out;
  transition: all 0.3s ease-in-out;
  text-transform: uppercase;
  text-decoration: none;
  color: black;
button.fancy .top-key {
  height: 2px;
  width: 1.5625rem;
  top: -2px;
  left: 0.625rem;
  position: absolute;
  background: white;
  -webkit-transition: width 0.5s ease-out, left 0.3s ease-out;
  transition: width 0.5s ease-out, left 0.3s ease-out;
button.fancy .bottom-key-1 {
  height: 2px;
  width: 1.5625rem;
  right: 1.875rem;
  bottom: -2px;
  position: absolute;
  background: white;
  -webkit-transition: width 0.5s ease-out, right 0.3s ease-out;
  transition: width 0.5s ease-out, right 0.3s ease-out;
button.fancy .bottom-key-2 {
  height: 2px;
  width: 0.625rem;
  right: 0.625rem;
  bottom: -2px;
  position: absolute;
  background: white;
  -webkit-transition: width 0.5s ease-out, right 0.3s ease-out;
  transition: width 0.5s ease-out, right 0.3s ease-out;
button.fancy:hover {
  color: white;
  background: black;
button.fancy:hover::before {
  width: 0.9375rem;
  background: white;
button.fancy:hover a {
  color: white;
  padding-left: 1.5em;
button.fancy:hover .top-key {
  left: -2px;
  width: 0px;
button.fancy:hover .bottom-key-1,
button.fancy:hover .bottom-key-2 {
  right: 0;
  width: 0;

Final Output:

Animated button created with HTML and CSS.gif


In conclusion, an animated button can significantly enhance your website's visual appeal and user experience. By leveraging the power of HTML and CSS, you can create an engaging and interactive button that leaves a lasting impression on your audience.

Throughout this tutorial, we have explored the step-by-step process of creating an animated button. We began by understanding the concept of an animated button and its benefits, including improved user experience, visual feedback, enhanced call-to-action, and aesthetic appeal.

We then delved into the practical implementation of an animated button. Starting with the HTML markup, we learned how to structure the button element and add relevant text or icons. Moving on to CSS styling, we discovered how to customize the button's size, shape, colors, and typography to match our design preferences.

The real magic happened when we explored CSS animation. By utilizing keyframes, animation properties, and effects, we were able to breathe life into our button. The possibilities were endless, whether it was a subtle fade-in animation, a playful bounce effect, or a captivating pulsating motion.

Throughout the tutorial, we provided examples of an animated button to spark your creativity and showcase the diverse range of possibilities. Remember, experimentation is key! Feel free to explore different animations, effects, and combinations to find the perfect fit for your website.

Incorporating an animated button into your web design arsenal can elevate your website's overall experience and make a lasting impression on your visitors. So, go ahead and unleash your creativity, implement an animated button wisely, and engage your audience with a visually stunning and interactive button.

Now it's your turn to apply what you've learned to your projects. We encourage you to experiment, iterate, and refine your animated button until they perfectly align with your website's goals and aesthetic. Embrace the power of animation, and let your buttons shine!

Thank you for joining us on this journey of creating an animated button with HTML and CSS. We hope this tutorial has provided you with the knowledge and inspiration to take your web design skills to the next level. Happy animating!

That’s a wrap!

I hope you enjoyed this post. Now, with these examples, you can create your own amazing page.

Did you like it? Let me know in the comments below 🔥 and you can support me by buying me a coffee.

And don’t forget to sign up to our email newsletter so you can get useful content like this sent right to your inbox!

Faraz 😊

End of the article

Subscribe to my Newsletter

Get the latest posts delivered right to your inbox

Latest Post