Open In App

Create an Animated Social Media Icons in React and Tailwind CSS

Last Updated : 29 Jul, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

Adding animated social media icons using React and Tailwind CSS improves user experience by enhancing functionality and visual appeal. The icons will have a smooth and appealing animation, making them visually engaging for users.

Output Preview:Let us have a look at how the final output will look like.

ai
Preview

Approach to Create Animated Social Media Icons:

  • Create separate React elements for each social media icon, enhancing code organization.
  • Utilize the "react-icons" library to easily integrate a variety of social media icons into the component.
  • Integrate Tailwind CSS for efficient styling and animations, using pre-defined classes for quick customization.
  • Implement hover effects using CSS to enhance user interaction upon cursor hover.
  • Ensure responsiveness across devices by utilizing Tailwind CSS for design and layout.

Steps to Create Animated Social Media Icons

Step 1: Create a new React JS project using the following command

npx create-react-app animated
cd animated

Step 2: Install Tailwind CSS

npm install tailwindcss
npx tailwindcss init -p

Step 3: Configure Tailwind CSS

Add Tailwind CSS to your src/index.css file:

@tailwind base;
@tailwind components;
@tailwind utilities;

Step 4: Modify tailwind.config.js file:

module.exports = {
content: [
"./src/**/*.{js,jsx,ts,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}

Folder Structure:

pst

The updated dependencies in package.json file will look like:

"dependencies": {
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-icons": "^5.0.1",
"react-scripts": "5.0.1",
"tailwindcss": "^3.4.1",
"web-vitals": "^2.1.4"
}

Example: Illustration of Animated Social Media Icons in React and Tailwind CSS

CSS
/* index.css */
body {
    margin: 0;
    font-family: -apple-system, BlinkMacSystemFont,
        'Segoe UI', 'Roboto', 'Oxygen',
        'Ubuntu', 'Cantarell', 'Fira Sans',
        'Droid Sans', 'Helvetica Neue',
        sans-serif;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

@tailwind base;
@tailwind components;
@tailwind utilities;
CSS
/* App.css */
.icon {
    font-size: 2rem;
    transition: all 1.5s ease-out;
    cursor: pointer;
}

.h-300 {
    height: 300px;
}

.animation-stopped .icon {
    animation-play-state: paused;
}

.animation-stopped .icon:hover {
    animation-play-state: running;
}

.icon:hover {
    transition: all 0.3s ease-in;

    &.whatsapp {
        filter: drop-shadow(0px 0px 10px green);
    }

    &.fb {
        filter: drop-shadow(0px 0px 10px blue);
    }

    &.twitter {
        filter: drop-shadow(0px 0px 10px white);
    }

    &.insta {
        filter: drop-shadow(0px 0px 10px yellow);
    }

    &.telegram {
        filter: drop-shadow(0px 0px 10px #3390ec);
    }

    &.youtube {
        filter: drop-shadow(0px 0px 10px #ff0000);
    }

    &.linkedin {
        filter: drop-shadow(0px 0px 10px #0077b5);
    }
}

@media screen and (max-width:500px) {
    header>div {
        flex-wrap: wrap;
    }

    .icon {
        font-size: 1.5rem;
    }

    footer>div {
        flex-wrap: wrap;
    }
}

.swing-animation {
    animation: swingAnimation 1s ease-in-out infinite;
}

.pulse-animation {
    animation: pulseAnimation 1s linear infinite;
}

.rotate-animation {
    animation: rotateAnimation 1s linear infinite;
}

.bounce-animation {
    animation: bounceAnimation 1s ease-in-out infinite;
}

.flash-animation {
    animation: flashAnimation 1s linear infinite;
}

.shake-animation {
    animation: shakeAnimation 1s ease-in-out infinite;
}

.flip-animation {
    animation: flipAnimation 1s ease-in-out infinite;
}

@keyframes swingAnimation {
    0% {
        transform: rotate(0deg);
    }

    50% {
        transform: rotate(15deg);
    }

    100% {
        transform: rotate(0deg);
    }
}

@keyframes pulseAnimation {
    0% {
        transform: scale(1);
    }

    50% {
        transform: scale(1.2);
    }

    100% {
        transform: scale(1);
    }
}

@keyframes rotateAnimation {
    from {
        transform: rotate(0deg);
    }

    to {
        transform: rotate(360deg);
    }
}

@keyframes bounceAnimation {

    0%,
    100% {
        transform: translateY(0);
    }

    50% {
        transform: translateY(-20px);
    }
}

@keyframes flashAnimation {

    0%,
    50%,
    100% {
        opacity: 1;
    }

    25%,
    75% {
        opacity: 0;
    }
}

@keyframes shakeAnimation {

    0%,
    100% {
        transform: translateX(0);
    }

    20%,
    60% {
        transform: translateX(-10px);
    }

    40%,
    80% {
        transform: translateX(10px);
    }
}

@keyframes flipAnimation {
    0% {
        transform: rotateY(0);
    }

    50% {
        transform: rotateY(180deg);
    }

    100% {
        transform: rotateY(360deg);
    }
}
JavaScript
/* App.js*/
import "./App.css";
import SocialIcons from "./components/SocialIcons";
function App() {
	return (
		<>
			<div className="container mx-auto">
				<header className="bg-gray-800 text-white p-4">
					<div className="container mx-auto flex 
									justify-between items-center">
						<h1 className="text-2xl font-bold">
							Social Icons
						</h1>
						<nav>
							<SocialIcons />
						</nav>
					</div>
				</header>
				<main className="py-8 text-center h-300 
								flex items-center">
					<h1>
						A Computer Science portal for geeks.
						It contains well written, well thought
						and well explained computer science and
						programming articles, quizzes and
						practice/competitive programming/company
						interview Questions.
					</h1>
				</main>
				<footer className="bg-gray-800 text-white p-4">
					<div className="container mx-auto flex 
									justify-between items-center
									text-center">
						<nav>
							<ul className="flex space-x-4 
										animation-stopped">
								<SocialIcons />
							</ul>
						</nav>
						<p className="text-red-500">
							© 2024 All rights reserved.
						</p>
					</div>
				</footer>
			</div>
		</>
	);
}

export default App;
JavaScript
/* SocialIcons.js*/
import React from "react";
import { FaInstagram, FaTelegram, FaWhatsapp } from "react-icons/fa";
import { CiFacebook } from "react-icons/ci";
import { FaXTwitter } from "react-icons/fa6";
import { CiYoutube } from "react-icons/ci";
import { CiLinkedin } from "react-icons/ci";

const SocialIcons = () => {
	return (
		<div className="flex space-x-4">
			<FaTelegram
				className="icon text-blue-400 telegram
						swing-animation" />
			<FaXTwitter
				className="icon text-white twitter 
						pulse-animation" />
			<FaInstagram
				className="icon text-orange-500 insta
						rotate-animation" />
			<CiFacebook
				className="icon text-blue-500 fb 
						bounce-animation" />
			<FaWhatsapp
				className="icon text-green-500 whatsapp 
						flash-animation" />
			<CiYoutube
				className="icon text-red-400 youtube 
						shake-animation" />
			<CiLinkedin
				className="icon text-indigo-400 linkedin 
						flip-animation" />
		</div>
	);
};
export default SocialIcons;

Steps to run the application:

Step 1: Type the following command in the terminal.

npm start

Step 2: Open the web browser and type the following URL

http://localhost:3000/

Output:


Create an Animated Social Media Icons in React and Tailwind CSS

Similar Reads