├── LICENSE
├── README.md
├── _config.yml
├── google7521b4b8a878888b.html
├── project-10_404_error_page
├── css
│ └── index.css
├── img
│ └── error.png
├── index.html
└── js
│ └── index.js
├── project-11_analog_clock
├── css
│ └── index.css
├── index.html
└── js
│ └── index.js
├── project-12_contact_form
├── css
│ └── index.css
├── index.html
└── js
│ └── index.js
├── project-13_profile_card
├── css
│ └── index.css
├── img
│ └── profile.jpg
├── index.html
└── js
│ └── index.js
├── project-14_music_loader
├── css
│ └── index.css
├── index.html
└── js
│ └── index.js
├── project-15_currrency_convertor
├── css
│ └── index.css
├── index.html
└── js
│ ├── country.js
│ └── index.js
├── project-16_pricing_component
├── app.js
├── images
│ ├── bg-bottom.svg
│ ├── bg-top.svg
│ ├── favicon-32x32.png
│ └── project-preview.png
├── index.html
└── styles.css
├── project-17_remove_Signature_bg
├── favicon.png
├── images
│ └── remove_bg.png
├── index.html
├── script.js
└── styles.css
├── project-18_toggle_dark_light_mode
├── index.html
├── script.js
└── style.css
├── project-19_weather_app
├── img
│ ├── clear.png
│ ├── clouds.png
│ ├── demo.png
│ ├── drizzle.png
│ ├── haze.png
│ ├── humidity.png
│ ├── mist.png
│ ├── rain.png
│ ├── search.png
│ ├── snow.png
│ └── wind.png
├── index.html
├── script.js
└── style.css
├── project-1_landing-page
├── css
│ └── index.css
├── img
│ ├── features.png
│ └── hero-bg.svg
├── index.html
├── js
│ └── index.js
└── scss
│ └── index.scss
├── project-20_bubble_game
├── index.html
├── index.js
└── style.css
├── project-2_calculator
├── css
│ └── index.css
├── index.html
└── js
│ └── index.js
├── project-3_wavy_login_form
├── css
│ └── index.css
├── index.html
└── js
│ └── index.js
├── project-4_random_quote_generator
├── css
│ └── index.css
├── index.html
└── js
│ └── index.js
├── project-5_random_color_changer
├── css
│ └── index.css
├── index.html
└── js
│ └── index.js
├── project-6_qr_code_generator
├── css
│ ├── index.css
│ └── index.scss
├── index.html
└── js
│ └── index.js
├── project-7_stopwatch_timer
├── css
│ └── index.css
├── index.html
└── js
│ └── index.js
├── project-8_password_generator
├── css
│ └── index.css
├── index.html
└── js
│ └── index.js
├── project-9_responsive_navbar
├── css
│ └── index.css
├── index.html
└── js
│ └── index.js
└── sitemap.xml
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Arman Idrisi
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Frontend Projects 🌐
2 |
3 | [](https://github.com/ArmanIdrisi/frontend-projects/graphs/contributors)
4 | [](https://github.com/ArmanIdrisi/frontend-projects/commits/main)
5 |
6 | This repository contains a collection of frontend projects.Each project is built using HTML, CSS, and JavaScript.
7 |
8 | ## Projects 📂
9 |
10 |
11 |
12 | #
13 | Project Name
14 | Link
15 |
16 |
17 | 01
18 | Landing Page
19 | Click Here
20 |
21 |
22 | 02
23 | Calculator
24 | Click Here
25 |
26 |
27 | 03
28 | Wavy Login Form
29 | Click Here
30 |
31 |
32 | 04
33 | Random Quote Generator
34 | Click Here
35 |
36 |
37 | 05
38 | Random Background Changer
39 | Click Here
40 |
41 |
42 | 06
43 | Qr Code Generator
44 | Click Here
45 |
46 |
47 | 07
48 | Stopwatch Timer
49 | Click Here
50 |
51 |
52 | 08
53 | Password Generator
54 | Click Here
55 |
56 |
57 | 09
58 | Responsive Navbar
59 | Click Here
60 |
61 |
62 | 10
63 | 404 Error Page
64 | Click Here
65 |
66 |
67 | 11
68 | Analog Clock
69 | Click Here
70 |
71 |
72 | 12
73 | Contact Form
74 | Click Here
75 |
76 |
77 | 13
78 | Profile Card
79 | Click Here
80 |
81 |
82 | 14
83 | Music Preloader
84 | Click Here
85 |
86 |
87 | 15
88 | Currency Converter
89 | Click Here
90 |
91 |
92 | 16
93 | Pricing card
94 | Click Here
95 |
96 |
97 | 17
98 | Background Remover App
99 | Click Here
100 |
101 |
102 | 18
103 | Toggle Dark & Light Mode
104 | Click Here
105 |
106 |
107 | 19
108 | Weather App
109 | Click Here
110 |
111 |
112 | 20
113 | Bubble Game
114 | Click Here
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 | ## Installation 🚀
123 |
124 | To run any of the projects locally, simply clone this repository using the following command:
125 |
126 | ```bash
127 | git clone https://github.com/ArmanIdrisi/frontend-projects.git
128 | ```
129 |
130 | ## Usage 💻
131 |
132 | Each project is contained in its own directory, and can be opened and run directly in a web browser.
133 |
134 | ## Contributing 🤝
135 |
136 | Contributions to this repository are welcome! If you have a project you'd like to add, simply create a new branch, add your project, and create a pull request.
137 |
138 | ## License 📝
139 |
140 | This repository is licensed under the MIT license. See [LICENSE](/LICENSE) for more information.
141 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-cayman
2 |
3 | title: Explore Engaging HTML, CSS, and JavaScript Frontend Projects for Your Next Web Development Adventure
4 |
5 | show_downloads: false
6 |
7 | include: [README.md]
8 |
9 | plugins:
10 |
11 | - jemoji
--------------------------------------------------------------------------------
/google7521b4b8a878888b.html:
--------------------------------------------------------------------------------
1 | google-site-verification: google7521b4b8a878888b.html
--------------------------------------------------------------------------------
/project-10_404_error_page/css/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css?family=Open+Sans:400,700,800|Roboto");
2 |
3 | * {
4 | margin: 0;
5 | padding: 0;
6 | box-sizing: border-box;
7 | font-family: "Open Sans", sans-serif;
8 | font-weight: 400;
9 | }
10 | body {
11 | height: 100vh;
12 | display: flex;
13 | justify-content: center;
14 | align-items: center;
15 | background-color: #e8e8e8;
16 | }
17 | .container {
18 | text-align: center;
19 | }
20 | .container img {
21 | width: 550px;
22 | }
23 | .container h1 {
24 | font-size: 45px;
25 | }
26 | .container p {
27 | font-size: 25px;
28 | margin: 20px 0;
29 | color: #004273;
30 | }
31 | .container button {
32 | padding: 5px;
33 | width: 30%;
34 | height: 40px;
35 | border: none;
36 | outline: none;
37 | border-radius: 3px;
38 | background: #004273;
39 | color: white;
40 | margin: 10px 0 0 0;
41 | }
42 |
43 | /*For Responsiveness*/
44 | @media (max-width: 760px) {
45 | .container img {
46 | width: 100%;
47 | }
48 | .container h1 {
49 | font-size: 33px;
50 | }
51 | .container p {
52 | font-size: 15px;
53 | padding: 0 10px;
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/project-10_404_error_page/img/error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-10_404_error_page/img/error.png
--------------------------------------------------------------------------------
/project-10_404_error_page/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 404 Error Occurred
8 |
9 |
10 |
11 |
12 |
Didn’t find anything here!
13 |
Sorry! The Request Url Not Found On The Server
14 |
Go Back
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/project-10_404_error_page/js/index.js:
--------------------------------------------------------------------------------
1 | //For Go Back Button : (It's Optional You Can Also Use Anchor Tag Of Html)
2 | let btn = document.getElementById("btn");
3 | btn.addEventListener("click", () => {
4 | window.location.href="/"
5 | });
6 |
--------------------------------------------------------------------------------
/project-11_analog_clock/css/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | box-sizing: border-box;
5 | }
6 |
7 | body {
8 | height: 100vh;
9 | display: flex;
10 | justify-content: center;
11 | align-items: center;
12 | }
13 |
14 | #clockContainer {
15 | position: relative;
16 | height: 40vw;
17 | width: 40vw;
18 | background: url(https://i.ibb.co/K7wS7TF/imgonlinecomua-Compress-To-Size-Om-NATj-UMFKw-300x300.jpg) no-repeat;
19 | background-size: 100%;
20 | }
21 |
22 | #clockContainer #hour,
23 | #clockContainer #minute,
24 | #clockContainer #second {
25 | position: absolute;
26 | background: black;
27 | border-radius: 10px;
28 | transform-origin: bottom;
29 | }
30 |
31 | #clockContainer #hour {
32 | width: 1.8%;
33 | height: 25%;
34 | top: 25%;
35 | left: 48.85%;
36 | opacity: 0.8;
37 | }
38 |
39 | #clockContainer #minute {
40 | width: 1.6%;
41 | height: 30%;
42 | top: 19%;
43 | left: 48.9%;
44 | opacity: 0.8;
45 | }
46 |
47 | #clockContainer #second {
48 | width: 1%;
49 | height: 40%;
50 | top: 9%;
51 | left: 49.25%;
52 | opacity: 0.8;
53 | }
54 |
--------------------------------------------------------------------------------
/project-11_analog_clock/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | project-11_analog_clock
8 |
9 |
10 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/project-11_analog_clock/js/index.js:
--------------------------------------------------------------------------------
1 | // Selecting the hour, minute, and second elements by their IDs
2 | const hour = document.getElementById("hour");
3 | const minute = document.getElementById("minute");
4 | const second = document.getElementById("second");
5 |
6 | // Setting up an interval to update the clock every second
7 | setInterval(() => {
8 | // Creating a new Date object to get the current time
9 | const now = new Date();
10 |
11 | // Extracting the hours, minutes, and seconds from the Date object
12 | const hours = now.getHours();
13 | const minutes = now.getMinutes();
14 | const seconds = now.getSeconds();
15 |
16 | // Calculating the rotation angles for the hour, minute, and second hands
17 | const hourRotation = 30 * hours + minutes / 2;
18 | const minuteRotation = 6 * minutes;
19 | const secondRotation = 6 * seconds;
20 |
21 | // Setting the transform property of the hour, minute, and second elements to rotate them to their respective angles
22 | hour.style.transform = `rotate(${hourRotation}deg)`;
23 | minute.style.transform = `rotate(${minuteRotation}deg)`;
24 | second.style.transform = `rotate(${secondRotation}deg)`;
25 | }, 1000);
26 |
--------------------------------------------------------------------------------
/project-12_contact_form/css/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=swap");
2 | * {
3 | margin: 0px;
4 | padding: 0px;
5 | font-family: "Poppins", sans-serif;
6 | }
7 |
8 | body {
9 | height: 100vh;
10 | display: flex;
11 | justify-content: center;
12 | align-items: center;
13 | background-color: #142457;
14 | }
15 | .container {
16 | background: white;
17 | height: 550px;
18 | width: 100%;
19 | max-width: 430px;
20 | padding: 20px;
21 | text-align: center;
22 | border-radius: 8px;
23 | }
24 | .container input,
25 | textarea {
26 | width: 100%;
27 | outline: none;
28 | margin: 15px 0;
29 | border-radius: 8px;
30 | border: 1px solid #ccc;
31 | padding: 10px 5px;
32 | }
33 | .container button {
34 | width: 100%;
35 | outline: none;
36 | border-radius: 8px;
37 | border: 2px solid #142457;
38 | padding: 10px 5px;
39 | color: black;
40 | background: transparent;
41 | transition: 0.5s ease-in-out;
42 | }
43 | .container input:focus,textarea:focus {
44 | border: 2px solid #142457;
45 | }
46 | .container button:hover {
47 | background: #142457;
48 | color: white;
49 | }
50 |
--------------------------------------------------------------------------------
/project-12_contact_form/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Contact Us -
9 |
10 |
11 |
12 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/project-12_contact_form/js/index.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-12_contact_form/js/index.js
--------------------------------------------------------------------------------
/project-13_profile_card/css/index.css:
--------------------------------------------------------------------------------
1 | /* Google Fonts - Poppins */
2 | @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap");
3 |
4 | * {
5 | margin: 0;
6 | padding: 0;
7 | box-sizing: border-box;
8 | font-family: "Poppins", sans-serif;
9 | }
10 | body {
11 | height: 100vh;
12 | display: flex;
13 | align-items: center;
14 | justify-content: center;
15 | background-color: #f4f4f4;
16 | }
17 | .profile-card {
18 | display: flex;
19 | flex-direction: column;
20 | align-items: center;
21 | max-width: 350px;
22 | width: 100%;
23 | background: #fff;
24 | padding: 25px;
25 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);
26 | position: relative;
27 | }
28 | .profile-card::before {
29 | content: "";
30 | position: absolute;
31 | top: 0;
32 | left: 0;
33 | height: 36%;
34 | width: 100%;
35 | background-color: #4070f4;
36 | }
37 | .profile-card .image {
38 | position: relative;
39 | height: 150px;
40 | width: 150px;
41 | border-radius: 50%;
42 | background-color: #4070f4;
43 | padding: 3px;
44 | margin-bottom: 10px;
45 | }
46 | .profile-card .image .profile-img {
47 | height: 100%;
48 | width: 100%;
49 | object-fit: cover;
50 | border-radius: 50%;
51 | border: 3px solid #fff;
52 | }
53 | .profile-card .text-data {
54 | display: flex;
55 | flex-direction: column;
56 | align-items: center;
57 | color: #333;
58 | margin-bottom: 20px;
59 | }
60 | .profile-card .text-data .name {
61 | font-size: 22px;
62 | font-weight: 500;
63 | }
64 | .profile-card ul {
65 | list-style: none;
66 | }
67 | .profile-card ul li {
68 | margin-bottom: 10px;
69 | }
70 | .profile-card .media-buttons {
71 | display: flex;
72 | align-items: center;
73 | margin-top: 15px;
74 | }
75 | .profile-card .media-buttons .link {
76 | display: flex;
77 | align-items: center;
78 | justify-content: center;
79 | color: #fff;
80 | font-size: 18px;
81 | height: 34px;
82 | width: 34px;
83 | border-radius: 50%;
84 | margin: 0 8px;
85 | background-color: #4070f4;
86 | text-decoration: none;
87 | }
88 |
--------------------------------------------------------------------------------
/project-13_profile_card/img/profile.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-13_profile_card/img/profile.jpg
--------------------------------------------------------------------------------
/project-13_profile_card/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | User Profile
8 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | John Doe
21 |
22 |
23 |
24 | john.doe@example.com
25 | +1 555-555-5555
26 | www.johndoe.com
27 | 123 Main Street, Anytown, USA
28 |
29 |
30 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/project-13_profile_card/js/index.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-13_profile_card/js/index.js
--------------------------------------------------------------------------------
/project-14_music_loader/css/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | display: flex;
3 | justify-content: center;
4 | align-items: center;
5 | height: 100vh;
6 | }
7 | .loader {
8 | display: flex;
9 | }
10 |
11 | .bar {
12 | width: 6px;
13 | height: 20px;
14 | margin: 0 4px;
15 | background-color: #000;
16 | border-radius: 4px;
17 | animation: loader 1s ease-in-out infinite;
18 | }
19 | .bar:nth-child(1) {
20 | animation-delay: 0s;
21 | }
22 |
23 | .bar:nth-child(2) {
24 | animation-delay: 0.1s;
25 | }
26 |
27 | .bar:nth-child(3) {
28 | animation-delay: 0.2s;
29 | }
30 |
31 | .bar:nth-child(4) {
32 | animation-delay: 0.3s;
33 | }
34 |
35 | .bar:nth-child(5) {
36 | animation-delay: 0.4s;
37 | }
38 | @keyframes loader {
39 | 0% {
40 | transform: scale(1);
41 | }
42 | 20% {
43 | transform: scale(1, 2);
44 | }
45 | 40% {
46 | transform: scale(1);
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/project-14_music_loader/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | CSS Music Loader
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/project-14_music_loader/js/index.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-14_music_loader/js/index.js
--------------------------------------------------------------------------------
/project-15_currrency_convertor/css/index.css:
--------------------------------------------------------------------------------
1 | /* Global styles */
2 | body {
3 | height: 100vh;
4 | display: flex;
5 | justify-content: center;
6 | align-items: center;
7 | background-color: steelblue;
8 | }
9 |
10 | /* Container for the entire form */
11 | .wrapper {
12 | text-align: center;
13 | background: rgba(0, 0, 0, 0.3);
14 | padding: 30px 0;
15 | max-width: 430px;
16 | width: 100%;
17 | border-radius: 8px;
18 | }
19 |
20 | /* Header style */
21 | h2 {
22 | font-weight: 500;
23 | color: white;
24 | }
25 |
26 | /* Styles for currency input section */
27 | .currency-input {
28 | display: flex;
29 | flex-direction: column;
30 | align-items: center;
31 | margin-top: 20px;
32 | }
33 |
34 | .currency-input label {
35 | color: white;
36 | font-weight: 400;
37 | font-size: 18px;
38 | text-transform: uppercase;
39 | margin-bottom: 5px;
40 | }
41 |
42 | .currency-input input {
43 | width: 50%;
44 | padding: 10px;
45 | margin-top: 3px;
46 | outline: none;
47 | border: 1px solid #ccc;
48 | border-radius: 5px;
49 | font-size: 16px;
50 | }
51 |
52 | /* Styles for currency select boxes */
53 | .select-box {
54 | display: flex;
55 | gap: 10px;
56 | flex-direction: row;
57 | justify-content: center;
58 | padding: 10px;
59 | margin: 10px 0;
60 | }
61 |
62 | .select {
63 | display: flex;
64 | flex-direction: column;
65 | align-items: center;
66 | width: 50%;
67 | }
68 |
69 | .select label {
70 | color: white;
71 | font-weight: 400;
72 | font-size: 18px;
73 | text-transform: uppercase;
74 | }
75 |
76 | .select select {
77 | width: 100%;
78 | margin-top: 3px;
79 | padding: 10px;
80 | outline: none;
81 | }
82 |
83 | /* Button styles */
84 | button {
85 | cursor: pointer;
86 | display: inline-block;
87 | margin: 0 10px;
88 | background: lightblue;
89 | padding: 15px;
90 | font-family: inherit;
91 | font-size: 16px;
92 | border: 0;
93 | border-radius: 5px;
94 | }
95 |
96 | /* Output paragraph style */
97 | p.output {
98 | font-weight: 300;
99 | color: white;
100 | display: none;
101 | }
102 |
--------------------------------------------------------------------------------
/project-15_currrency_convertor/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Stopwatch Timer
8 |
9 |
10 |
11 |
Currency converter
12 |
13 | Amount:
14 |
15 |
16 |
17 |
18 | from
19 |
20 |
21 |
22 | to
23 |
24 |
25 |
26 |
Get exchange rate
27 |
₹99
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/project-15_currrency_convertor/js/country.js:
--------------------------------------------------------------------------------
1 | const currencyCodes = [
2 | "AED",
3 | "AFN",
4 | "XCD",
5 | "ALL",
6 | "AMD",
7 | "ANG",
8 | "AOA",
9 | "AQD",
10 | "ARS",
11 | "AUD",
12 | "AZN",
13 | "BAM",
14 | "BBD",
15 | "BDT",
16 | "XOF",
17 | "BGN",
18 | "BHD",
19 | "BIF",
20 | "BMD",
21 | "BND",
22 | "BOB",
23 | "BRL",
24 | "BSD",
25 | "NOK",
26 | "BWP",
27 | "BYR",
28 | "BZD",
29 | "CAD",
30 | "CDF",
31 | "XAF",
32 | "CHF",
33 | "CLP",
34 | "CNY",
35 | "COP",
36 | "CRC",
37 | "CUP",
38 | "CVE",
39 | "CYP",
40 | "CZK",
41 | "DJF",
42 | "DKK",
43 | "DOP",
44 | "DZD",
45 | "ECS",
46 | "EEK",
47 | "EGP",
48 | "ETB",
49 | "EUR",
50 | "FJD",
51 | "FKP",
52 | "GBP",
53 | "GEL",
54 | "GGP",
55 | "GHS",
56 | "GIP",
57 | "GMD",
58 | "GNF",
59 | "GTQ",
60 | "GYD",
61 | "HKD",
62 | "HNL",
63 | "HRK",
64 | "HTG",
65 | "HUF",
66 | "IDR",
67 | "ILS",
68 | "INR",
69 | "IQD",
70 | "IRR",
71 | "ISK",
72 | "JMD",
73 | "JOD",
74 | "JPY",
75 | "KES",
76 | "KGS",
77 | "KHR",
78 | "KMF",
79 | "KPW",
80 | "KRW",
81 | "KWD",
82 | "KYD",
83 | "KZT",
84 | "LAK",
85 | "LBP",
86 | "LKR",
87 | "LRD",
88 | "LSL",
89 | "LTL",
90 | "LVL",
91 | "LYD",
92 | "MAD",
93 | "MDL",
94 | "MGA",
95 | "MKD",
96 | "MMK",
97 | "MNT",
98 | "MOP",
99 | "MRO",
100 | "MTL",
101 | "MUR",
102 | "MVR",
103 | "MWK",
104 | "MXN",
105 | "MYR",
106 | "MZN",
107 | "NAD",
108 | "XPF",
109 | "NGN",
110 | "NIO",
111 | "NPR",
112 | "NZD",
113 | "OMR",
114 | "PAB",
115 | "PEN",
116 | "PGK",
117 | "PHP",
118 | "PKR",
119 | "PLN",
120 | "PYG",
121 | "QAR",
122 | "RON",
123 | "RSD",
124 | "RUB",
125 | "RWF",
126 | "SAR",
127 | "SBD",
128 | "SCR",
129 | "SDG",
130 | "SEK",
131 | "SGD",
132 | "SKK",
133 | "SLL",
134 | "SOS",
135 | "SRD",
136 | "STD",
137 | "SVC",
138 | "SYP",
139 | "SZL",
140 | "THB",
141 | "TJS",
142 | "TMT",
143 | "TND",
144 | "TOP",
145 | "TRY",
146 | "TTD",
147 | "TWD",
148 | "TZS",
149 | "UAH",
150 | "UGX",
151 | "USD",
152 | "UYU",
153 | "UZS",
154 | "VEF",
155 | "VND",
156 | "VUV",
157 | "YER",
158 | "ZAR",
159 | "ZMK",
160 | "ZWD",
161 | ];
162 |
163 | // Get a NodeList of all select inputs on the page
164 | let selectInputs = document.querySelectorAll("select");
165 | console.log(selectInputs);
166 | // Loop through each select input
167 | selectInputs.forEach((selectInput) => {
168 | for (let i=0;i {
8 | const amount = amountInput.value;
9 | const from = fromCurrencySelect.value;
10 | const to = toCurrencySelect.value;
11 |
12 | if (amount < 1) {
13 | alert("Invalid amount");
14 | return;
15 | }
16 |
17 | fetch(`https://v6.exchangerate-api.com/v6/814385ebe55498d47ded4e4f/latest/${from}`)
18 | .then((res) => res.json())
19 | .then((response) => {
20 | const conversionRate = response.conversion_rates[to];
21 | if (conversionRate !== undefined) {
22 | const result = amount * conversionRate;
23 | outputElement.textContent = `${amount} ${from} = ${result} ${to}`;
24 | outputElement.style.display = "block";
25 | } else {
26 | alert("Invalid currency selection");
27 | }
28 | })
29 | .catch((e) => {
30 | alert("Something went wrong");
31 | });
32 | });
--------------------------------------------------------------------------------
/project-16_pricing_component/app.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const toggleBtn = document.querySelector(".toggle-btn");
4 | const toggleArea = document.querySelector(".toggle-area");
5 | const basicPrice = document.querySelector(".price-1");
6 | const profPrice = document.querySelector(".price-2");
7 | const masterPrice = document.querySelector(".price-3");
8 |
9 | toggleArea.addEventListener("click", function (e) {
10 | e.preventDefault();
11 | if (toggleArea.classList.contains("monthly")) {
12 | toggleArea.classList.remove("monthly");
13 | toggleArea.classList.add("anually");
14 | basicPrice.innerHTML = ` $ 199.99
`;
15 | profPrice.innerHTML = ` $ 249.99
`;
16 | masterPrice.innerHTML = ` $ 399.99
`;
17 | } else {
18 | toggleArea.classList.add("monthly");
19 | toggleArea.classList.remove("anually");
20 | basicPrice.innerHTML = ` $ 19.99
`;
21 | profPrice.innerHTML = ` $ 24.99
`;
22 | masterPrice.innerHTML = ` $ 39.99
`;
23 | }
24 | });
25 |
--------------------------------------------------------------------------------
/project-16_pricing_component/images/bg-bottom.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/project-16_pricing_component/images/bg-top.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/project-16_pricing_component/images/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-16_pricing_component/images/favicon-32x32.png
--------------------------------------------------------------------------------
/project-16_pricing_component/images/project-preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-16_pricing_component/images/project-preview.png
--------------------------------------------------------------------------------
/project-16_pricing_component/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Pricing Component With Toggle
12 |
13 |
14 |
15 |
16 |
17 | Our Pricing
18 |
19 | Annually
20 |
21 |
22 |
23 | Monthly
24 |
25 |
26 |
27 |
28 |
29 |
30 | Basic
31 | $ 19.99
32 |
33 |
34 | 500 GB Storage
35 |
36 | 2 Users Allowed
37 |
38 | Send up to 3 GB
39 |
40 |
41 | Learn more
42 |
43 |
44 |
45 | Professional
46 | $ 24.99
47 |
48 |
49 | 1 TB Storage
50 |
51 | 5 Users Allowed
52 |
53 | Send up to 10 GB
54 |
55 |
56 | Learn more
57 |
58 |
59 |
60 | Master
61 | $ 39.99
62 |
63 |
64 | 2 TB Storage
65 |
66 | 10 Users Allowed
67 |
68 | Send up to 20 GB
69 |
70 |
71 | Learn more
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/project-16_pricing_component/styles.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@700&display=swap");
2 |
3 | :root {
4 | --gradient: hsl(236, 72%, 79%), hsl(237, 63%, 64%);
5 | --purple: hsl(237, 63%, 64%);
6 | --very-light-grayish-blue: hsl(240, 78%, 98%);
7 | --light-grayish-blue: hsl(234, 14%, 74%);
8 | --grayish-blue: hsl(233, 13%, 49%);
9 | --dark-grayish-blue: hsl(232, 13%, 33%);
10 | --white: white;
11 | --body-font: "Montserrat", sans-serif;
12 | --transition: all ease-in-out 0.3s;
13 | }
14 |
15 | * {
16 | margin: 0;
17 | padding: 0;
18 | }
19 |
20 | html {
21 | font-size: 15px;
22 | }
23 |
24 | body {
25 | -ms-overflow-style: none; /* for Internet Explorer, Edge */
26 | scrollbar-width: none; /* for Firefox */
27 | overflow-y: scroll;
28 | box-sizing: border-box;
29 | font-family: var(--body-font);
30 | background-color: var(--very-light-grayish-blue);
31 | background-image: url("images/bg-top.svg"), url("images/bg-bottom.svg");
32 | background-repeat: no-repeat, no-repeat;
33 | background-size: 26.5%, 26.5%;
34 | background-position:
35 | top 0 right -1rem,
36 | bottom -4.7rem left -1.9rem;
37 | }
38 |
39 | body::-webkit-scrollbar {
40 | display: none; /* for Chrome, Safari, and Opera */
41 | }
42 |
43 | main {
44 | width: 100%;
45 | margin: 0 auto;
46 | text-align: center;
47 | margin-top: 5rem;
48 | margin-bottom: 5rem;
49 | }
50 |
51 | h1 {
52 | color: var(--grayish-blue);
53 | font-size: 2rem;
54 | font-weight: 700;
55 | letter-spacing: 1px;
56 | }
57 | header {
58 | display: flex;
59 | flex-direction: column;
60 | margin: 0 auto;
61 | justify-content: center;
62 | align-items: center;
63 | padding: 5rem;
64 | padding-bottom: 0;
65 | gap: 2.6rem;
66 | }
67 | /* Toggle Section */
68 | nav {
69 | display: inline-flex;
70 | flex-direction: row;
71 | gap: 1.9rem;
72 | align-items: center;
73 | }
74 |
75 | .toggle-area {
76 | border: none;
77 | position: relative;
78 | display: inline-flex;
79 | align-items: center;
80 | cursor: pointer;
81 | width: 3.8rem;
82 | height: 2.3rem;
83 | border-radius: 25px;
84 | background: linear-gradient(var(--gradient));
85 | }
86 |
87 | .toggle-btn {
88 | cursor: pointer;
89 | position: relative;
90 | width: 1.7rem;
91 | height: 1.7rem;
92 | margin: 5%;
93 | border-radius: 50%;
94 | background-color: var(--very-light-grayish-blue);
95 | }
96 |
97 | .toggle-area.monthly {
98 | justify-content: flex-end;
99 | align-content: flex-end;
100 | }
101 |
102 | .toggle-area.anually {
103 | justify-content: flex-start;
104 | align-content: flex-start;
105 | }
106 |
107 | .toggle-section p {
108 | color: var(--light-grayish-blue);
109 | }
110 |
111 | /* Pricing Section */
112 |
113 | .pricing-container {
114 | display: grid;
115 | width: 72%;
116 | grid-template-columns: repeat(3, 1fr);
117 | margin: 0 auto;
118 | margin-top: 5.8rem;
119 | max-width: 1440px;
120 | }
121 |
122 | .pricing {
123 | display: grid;
124 | grid-template-columns: 1fr;
125 | align-items: center;
126 | border-radius: 10px;
127 | padding: 2.1rem 0.8rem;
128 | }
129 |
130 | .container-2 {
131 | background: linear-gradient(var(--gradient));
132 | color: var(--white);
133 | margin-top: -1.6rem;
134 | margin-bottom: -1.6rem;
135 | padding: 3rem 1rem;
136 | }
137 | .container-1,
138 | .container-3 {
139 | background-color: var(--white);
140 | gap: 1.3rem;
141 | }
142 |
143 | .pricing h2 {
144 | font-size: 1.23rem;
145 | font-weight: 700;
146 | }
147 |
148 | .container-1 h2,
149 | .container-1 li,
150 | .container-3 h2,
151 | .container-3 li {
152 | color: var(--light-grayish-blue);
153 | }
154 | .pricing p {
155 | display: flex;
156 | align-items: center;
157 | gap: 6px;
158 | margin: 0 auto;
159 | font-size: 4.6rem;
160 | }
161 |
162 | .dollar-sign {
163 | font-size: 2.5rem;
164 | }
165 |
166 | .container-1 p,
167 | .container-3 p {
168 | color: var(--dark-grayish-blue);
169 | }
170 |
171 | hr {
172 | width: 90%;
173 | border-width: 0.5px;
174 | margin: 0 auto;
175 | border-color: transparent;
176 | border-color: var(--light-grayish-blue);
177 | border-style: solid;
178 | opacity: 0.5;
179 | }
180 | .pricing ul {
181 | list-style: none;
182 | margin-top: 10px;
183 | }
184 |
185 | .pricing ul li {
186 | padding: 1.06rem;
187 | }
188 |
189 | .pricing button {
190 | cursor: pointer;
191 | width: 90%;
192 | margin: 0 auto;
193 | margin-top: 1rem;
194 | border-radius: 5px;
195 | border-color: transparent;
196 | border-style: solid;
197 | border-width: 1px;
198 | padding: 0.8rem;
199 | text-transform: uppercase;
200 | letter-spacing: 1.5px;
201 | word-spacing: 3px;
202 | font-weight: 700;
203 | text-align: center;
204 | }
205 |
206 | .container-2 button {
207 | color: var(--purple);
208 | background-color: var(--white);
209 | transition: var(--transition);
210 | }
211 | .container-1 button,
212 | .container-3 button {
213 | color: var(--white);
214 | background: linear-gradient(var(--gradient));
215 | background-repeat: no-repeat;
216 | transition: background ease-in-out 0.3s;
217 | transition: color ease-in-out 0.3s;
218 | }
219 |
220 | @media (hover: hover) {
221 | .container-1 button:hover,
222 | .container-3 button:hover {
223 | background: transparent;
224 | border-color: var(--light-grayish-blue);
225 | color: var(--purple);
226 | border-width: 1px;
227 | transition: background ease-in-out 0.3s;
228 | transition: color ease-in-out 0.3s;
229 | }
230 | .container-2 button:hover {
231 | background-color: transparent;
232 | border-color: var(--white);
233 | color: var(--white);
234 | border-width: 1px;
235 | transition: var(--transition);
236 | }
237 | }
238 |
239 | @media screen and (max-width: 1025px) {
240 | .pricing-container {
241 | width: 50%;
242 | grid-template-columns: 1fr;
243 | margin-top: 5.8rem;
244 | gap: 5rem;
245 | }
246 |
247 | .container-2 {
248 | margin-top: initial;
249 | margin-bottom: initial;
250 | }
251 | .container-2 ul li {
252 | padding: 1.06rem;
253 | }
254 |
255 | .container-2 h2 {
256 | padding-top: initial;
257 | }
258 | .container-2 p {
259 | margin-top: initial;
260 | }
261 | }
262 |
263 | @media screen and (max-width: 800px) {
264 | body {
265 | background-size: 80%, 26.5%;
266 | background-position:
267 | top 0 right -10rem,
268 | bottom -4.7rem left -1.9rem;
269 | }
270 | .pricing-container {
271 | width: 60%;
272 | }
273 | }
274 |
275 | @media screen and (max-width: 600px) {
276 | .pricing-container {
277 | width: 90%;
278 | }
279 | }
280 |
--------------------------------------------------------------------------------
/project-17_remove_Signature_bg/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-17_remove_Signature_bg/favicon.png
--------------------------------------------------------------------------------
/project-17_remove_Signature_bg/images/remove_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-17_remove_Signature_bg/images/remove_bg.png
--------------------------------------------------------------------------------
/project-17_remove_Signature_bg/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | remove_bg
9 |
10 |
11 |
12 |
Remove Background From Your Image
13 |
Upload your image here
14 |
15 |
16 |
17 |
18 |
19 |
20 |
26 |
Choose File
29 |
30 |
36 | Upload
37 |
38 |
39 |
40 |
45 | Reset
46 |
47 |
52 | Download
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/project-17_remove_Signature_bg/script.js:
--------------------------------------------------------------------------------
1 | let imageURL;
2 |
3 | const fileInput = document.getElementById("fileInput");
4 | const file = document.getElementById("file");
5 | const uploadedImage = document.getElementById("uploadedImage");
6 | const removeBgButton = document.getElementById("removeBgButton");
7 | const downloadButton = document.getElementById("downloadBtn");
8 | const reloadButton = document.getElementById("reloadBtn");
9 |
10 | // Hide the download button initially
11 | reloadButton.style.display = "none";
12 | downloadButton.style.display = "none";
13 |
14 | fileInput.addEventListener("change", function (event) {
15 | if (event.target.files && event.target.files[0]) {
16 | const reader = new FileReader();
17 |
18 | reader.onload = function (e) {
19 | uploadedImage.src = e.target.result;
20 | };
21 | reader.readAsDataURL(event.target.files[0]);
22 | }
23 | });
24 |
25 | function submitHandler() {
26 | removeBgButton.classList.toggle("btn_loading");
27 | const fileInput = document.getElementById("fileInput");
28 | console.log(fileInput.files);
29 | const image = fileInput.files[0];
30 |
31 | if (!fileInput.files || fileInput.files.length === 0) {
32 | alert("Please select an image before submitting.");
33 | return;
34 | }
35 |
36 | // Multipart file
37 | const formData = new FormData();
38 | formData.append("image_file", image);
39 | formData.append("size", "auto");
40 |
41 | const apiKey = "5V4yNGbdJ9Dr83u6GAbxD8Vw";
42 |
43 | fetch("https://api.remove.bg/v1.0/removebg", {
44 | method: "POST",
45 | headers: {
46 | "X-Api-Key": apiKey,
47 | },
48 | body: formData,
49 | })
50 | .then(function (response) {
51 | return response.blob();
52 | })
53 | .then(function (blob) {
54 | console.log(blob);
55 | const url = URL.createObjectURL(blob);
56 | imageURL = url;
57 | uploadedImage.src = url;
58 | reloadButton.style.display = "block";
59 | file.style.display = "none";
60 |
61 | downloadButton.style.display = "block";
62 | removeBgButton.style.display = "none";
63 | })
64 | .catch();
65 | }
66 |
67 | function downloadFile() {
68 | var anchorElement = document.createElement("a");
69 | anchorElement.href = imageURL;
70 | anchorElement.download = "removed_bg.png";
71 | document.body.appendChild(anchorElement);
72 |
73 | anchorElement.click();
74 |
75 | document.body.removeChild(anchorElement);
76 | }
77 |
78 | function reset() {
79 | window.location.reload();
80 | }
81 |
--------------------------------------------------------------------------------
/project-17_remove_Signature_bg/styles.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | }
5 |
6 | body {
7 | height: 100vh;
8 | font-size: 62.5%;
9 | display: flex;
10 | align-items: center;
11 | justify-content: center;
12 | text-align: center;
13 | box-sizing: border-box;
14 | background: #f8edfa;
15 | }
16 |
17 | h1 {
18 | font: 2rem "Cambria", "Cochin", Georgia, Times, "Times New Roman", serif;
19 | color: #38464c;
20 | letter-spacing: 0.2rem;
21 | padding: 0.3rem;
22 | }
23 |
24 | h4 {
25 | font: 1rem "Lucida Sans", "Lucida Sans Regular", "Lucida Grande",
26 | "Lucida Sans Unicode", Geneva, Verdana, sans-serif;
27 | color: #455a64;
28 | text-align: center;
29 | padding: 0.5rem;
30 | margin: 1rem;
31 | }
32 |
33 | .img {
34 | height: 300px;
35 | /* width: auto; */
36 | padding: 0.8rem 1.6rem;
37 | border-radius: 1.5rem;
38 | display: flex;
39 | align-items: center;
40 | justify-content: center;
41 | overflow: hidden;
42 | box-shadow: rgba(0, 0, 0, 0.16) 0px 3px 6px, rgba(0, 0, 0, 0.23) 0px 3px 6px;
43 | }
44 |
45 | img {
46 | object-fit: contain;
47 | width: 90%;
48 | height: 90%;
49 | }
50 |
51 | .custom-file-input {
52 | display: inline-block;
53 | padding: 0.8rem 1.5rem;
54 | color: #ffffff;
55 | background-color: #f5af09;
56 | cursor: pointer;
57 | border-radius: 0.4rem;
58 | font: bold 15px "Quicksand", sans-serif;
59 | transition: all 0.3s ease;
60 | }
61 |
62 | .custom-file-input:hover {
63 | background-color: #e09707;
64 | }
65 |
66 | .btn {
67 | padding: 1rem;
68 | text-align: center;
69 | }
70 |
71 | .btn-container {
72 | display: flex;
73 | justify-content: center;
74 | }
75 |
76 | button {
77 | position: relative;
78 | padding: 0.8rem 1.6rem;
79 | margin: 1rem;
80 | border: none;
81 | outline: none;
82 | border-radius: 0.5rem;
83 | cursor: pointer;
84 | font: bold 1.2rem "Quicksand", sans-serif;
85 | color: #ffffff;
86 | transition: all 0.2s;
87 | }
88 |
89 | .btn_loading .btn__text {
90 | visibility: hidden;
91 | opacity: 0;
92 | }
93 |
94 | .btn_loading::after {
95 | content: " ";
96 | position: absolute;
97 | width: 1.5rem;
98 | height: 1.5rem;
99 | top: 0;
100 | bottom: 0;
101 | left: 0;
102 | right: 0;
103 | margin: auto;
104 | border: 0.4rem solid transparent;
105 | border-radius: 50%;
106 | border-top-color: #ffffff;
107 | animation: loader 1s ease infinite;
108 | }
109 |
110 | #removeBgButton:active {
111 | background: #007a63;
112 | }
113 |
114 | @keyframes loader {
115 | from {
116 | transform: rotate(0turn);
117 | }
118 | to {
119 | transform: rotate(1turn);
120 | }
121 | }
122 |
123 | @media screen and (max-width: 760px) {
124 | body {
125 | font-size: 45%;
126 | }
127 | h1 {
128 | font-size: 1.8rem;
129 | }
130 | button {
131 | font-size: 1rem;
132 | }
133 | .img {
134 | margin: 16px;
135 | padding: 0;
136 | }
137 | }
138 |
--------------------------------------------------------------------------------
/project-18_toggle_dark_light_mode/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Dark & Light Mode
5 |
6 |
7 |
8 |
9 |
10 |
11 | Toggle Mode
12 |
13 |
14 |
15 |
19 |
20 |
21 | lorem ipsum dolor sit amet consectetur adipiscing elit
22 | namaste namaste
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/project-18_toggle_dark_light_mode/script.js:
--------------------------------------------------------------------------------
1 | document.addEventListener("DOMContentLoaded", function () {
2 | const button = document.getElementById("mode-toggle");
3 | const body = document.body;
4 | const isDarkMode = localStorage.getItem("darkMode") === "true";
5 |
6 | // Function to set dark mode state
7 | function setDarkMode(isDark) {
8 | if (isDark) {
9 | body.classList.add("dark");
10 | localStorage.setItem("darkMode", "true");
11 | } else {
12 | body.classList.remove("dark");
13 | localStorage.setItem("darkMode", "false");
14 | }
15 | }
16 |
17 | // Initial state based on local storage
18 | setDarkMode(isDarkMode);
19 |
20 | // Toggle dark mode when button is clicked
21 | button.addEventListener("click", () => {
22 | const newMode = !body.classList.contains("dark");
23 | setDarkMode(newMode);
24 | });
25 | });
26 |
27 |
--------------------------------------------------------------------------------
/project-18_toggle_dark_light_mode/style.css:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | }
4 |
5 | body {
6 | height: 100vh;
7 | display: flex;
8 | justify-content: center;
9 | align-items: center;
10 | flex-direction: column;
11 | }
12 | body.dark {
13 | background-color: #121212;
14 | color: #ffffff;
15 | }
16 |
17 | body.dark .card {
18 | background: #1e1e1e;
19 | border: 0px;
20 | }
21 |
22 | button#mode-toggle {
23 | margin-bottom: 5px;
24 | padding: 10px 20px;
25 | background-color: #007bff;
26 | color: #fff;
27 | border: none;
28 | border-radius: 5px;
29 | cursor: pointer;
30 | transition: background-color 0.3s ease;
31 | }
32 |
33 | button#mode-toggle:hover {
34 | background-color: #0056b3;
35 | }
36 |
37 | .card {
38 | width: 250px;
39 | border: 1px solid #ccc;
40 | border-radius: 5px;
41 | padding: 20px;
42 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
43 | background-color: #ececec;
44 | }
45 |
46 | .img {
47 | text-align: center;
48 | }
49 |
50 | .img img {
51 | max-width: 100%;
52 | height: auto;
53 | border-radius: 50%;
54 | }
55 |
56 | p {
57 | margin-top: 15px;
58 | font-size: 14px;
59 | line-height: 1.5;
60 | }
61 |
62 |
--------------------------------------------------------------------------------
/project-19_weather_app/img/clear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-19_weather_app/img/clear.png
--------------------------------------------------------------------------------
/project-19_weather_app/img/clouds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-19_weather_app/img/clouds.png
--------------------------------------------------------------------------------
/project-19_weather_app/img/demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-19_weather_app/img/demo.png
--------------------------------------------------------------------------------
/project-19_weather_app/img/drizzle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-19_weather_app/img/drizzle.png
--------------------------------------------------------------------------------
/project-19_weather_app/img/haze.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-19_weather_app/img/haze.png
--------------------------------------------------------------------------------
/project-19_weather_app/img/humidity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-19_weather_app/img/humidity.png
--------------------------------------------------------------------------------
/project-19_weather_app/img/mist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-19_weather_app/img/mist.png
--------------------------------------------------------------------------------
/project-19_weather_app/img/rain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-19_weather_app/img/rain.png
--------------------------------------------------------------------------------
/project-19_weather_app/img/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-19_weather_app/img/search.png
--------------------------------------------------------------------------------
/project-19_weather_app/img/snow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-19_weather_app/img/snow.png
--------------------------------------------------------------------------------
/project-19_weather_app/img/wind.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-19_weather_app/img/wind.png
--------------------------------------------------------------------------------
/project-19_weather_app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Weather App
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
Weather App
17 |
Check Weather searching City Name
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/project-19_weather_app/script.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const apiURL = `https://api.openweathermap.org/data/2.5/weather?units=metric`;
4 | const appKey = `&appid=1dc02c2cda3d32eda98eede7405d0e42`;
5 |
6 | const searchField = document.querySelector(".searchArea input");
7 | const searchBtn = document.querySelector(".searchArea button");
8 | const weatherIcon = document.querySelector(".Weather-Icon");
9 |
10 |
11 | function city() {
12 | const inputName = document.querySelector("#impTXT");
13 | const city = `&q=${inputName.value}`;
14 | checkWeather(city);
15 | }
16 |
17 | // document.querySelector(".WeatherDisplay").style.display = "block";
18 |
19 |
20 | async function checkWeather(city) {
21 | const response = await fetch(apiURL + appKey + city);
22 | var data = await response.json();
23 | console.log(data);
24 |
25 | document.querySelector(".city").innerHTML = data.name;
26 | document.querySelector(".temperature").innerHTML = Math.round(data.main.temp) + "°C";
27 | document.querySelector(".humidity").innerHTML = data.main.humidity + "%";
28 | document.querySelector(".wind").innerHTML = data.wind.speed + "km/h";
29 |
30 | if (data.weather[0].main == "Clouds") {
31 | weatherIcon.src = "img/clouds.png";
32 | }
33 |
34 | if (data.weather[0].main == "Mist") {
35 | weatherIcon.src = "img/Mist.png";
36 | }
37 |
38 | if (data.weather[0].main == "Rain") {
39 | weatherIcon.src = "img/rain.png";
40 | }
41 |
42 | if (data.weather[0].main == "Drizzle") {
43 | weatherIcon.src = "img/drizzle.png";
44 | }
45 |
46 | if (data.weather[0].main == "Clear") {
47 | weatherIcon.src = "img/clear.png";
48 | }
49 |
50 | if (data.weather[0].main == "Snow") {
51 | weatherIcon.src = "img/snow.png";
52 | }
53 |
54 | if (data.weather[0].main == "Haze") {
55 | weatherIcon.src = "img/haze.png";
56 | }
57 |
58 | document.querySelector(".WeatherDisplay").style.display = "block";
59 | };
60 |
61 | searchBtn.addEventListener("click", city); // addEventlistener e funcion call korle () lage na
62 |
63 |
64 | // const input = document.getElementById("impTXT");
65 | searchField.addEventListener("keypress", function (event) {
66 | if (event.key === "Enter") {
67 | event.preventDefault();
68 | city();
69 | }
70 | });
71 |
72 |
--------------------------------------------------------------------------------
/project-19_weather_app/style.css:
--------------------------------------------------------------------------------
1 |
2 | *{
3 | margin: 0;
4 | padding: 0;
5 | font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
6 | box-sizing: border-box;
7 | }
8 |
9 | body{
10 | background: #222;
11 | }
12 | .AppCard{
13 | width: 90%;
14 | max-width: 470px;
15 | background: linear-gradient(200deg, #fe9000, #8a5469);
16 | color: #fefffe;
17 | margin: 100px auto 0;
18 |
19 | border-radius: 15px;
20 |
21 | padding: 40px 40px;
22 |
23 | text-align: center;
24 | border: 1px solid white;
25 | }
26 |
27 | .searchArea{
28 |
29 | width: 100%;
30 | display: flex;
31 | align-items: center;
32 | justify-content: space-between;
33 |
34 |
35 | }
36 |
37 | .searchArea input{
38 | border: 0;
39 | outline: 0;
40 | background: #35282d;
41 | color: #7a7171;
42 |
43 | padding: 15px 25px;
44 |
45 | height: 60px;
46 |
47 | border-radius: 30px;
48 | flex: 1;
49 | /* This property is used to make the input field flexible,
50 | so that it can adjust its size according to the available space. */
51 |
52 | margin-right: 16px;
53 | font-size: large;
54 |
55 |
56 | }
57 |
58 |
59 | .Weather-Icon{
60 |
61 | width: 170px;
62 | margin-top: 30px;
63 | }
64 |
65 | .searchArea button{
66 | border: 0;
67 | outline: 0;
68 | background: #35282d;
69 | border-radius: 50%;
70 | width: 60px;
71 | height: 60px;
72 | cursor: pointer;
73 | }
74 | .searchArea button img{
75 | width: 20px;
76 | padding-top: 5px;
77 | }
78 |
79 | .WeatherDisplay h1{
80 | font-size: 80px;
81 | font-weight: 500;
82 | }
83 | .WeatherDisplay h2{
84 | font-size: 45px;
85 | font-weight: 400;
86 | margin-top: -10px;
87 | }
88 |
89 |
90 | .detailsInfo{
91 | display: flex;
92 |
93 | align-items: center;
94 | justify-content: space-between;
95 | padding: 0 20px;
96 | margin-top: 50px;
97 |
98 | }
99 |
100 | .column{
101 | display: flex;
102 | align-items: center;
103 | text-align: left;
104 | }
105 |
106 | .column img{
107 | width: 50px;
108 | margin-right: 10px;
109 | }
110 |
111 | .humidity, .wind{
112 | font-size: larger;
113 | margin-top: -5px;
114 | }
115 |
116 |
117 | .WeatherDisplay{
118 | display: none;
119 | }
120 |
121 | .title{
122 | margin-top: -30px;
123 | margin-bottom: 15px;
124 | }
125 |
126 | .title p{
127 | font-size: 18px;
128 | }
129 |
130 | .title p span{
131 | color:#35282d;
132 | font-weight: 800;
133 | }
134 |
135 |
136 |
--------------------------------------------------------------------------------
/project-1_landing-page/css/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css?family=Source+Sans+Pro");
2 | * {
3 | margin: 0;
4 | padding: 0;
5 | }
6 |
7 | body {
8 | background: #f1f1f1;
9 | }
10 |
11 | header .navbar {
12 | height: 70px;
13 | display: flex;
14 | justify-content: space-between;
15 | align-items: center;
16 | background: transparent;
17 | padding: 10px 26px;
18 | }
19 |
20 | header .navbar .logo {
21 | font-size: 2rem;
22 | font-weight: 600;
23 | font-family: "Source Sans Pro", sans-serif;
24 | color: #1f3569;
25 | }
26 |
27 | header .navbar #check {
28 | display: none;
29 | }
30 |
31 | header .navbar #check:checked ~ .menu-items {
32 | left: 0;
33 | }
34 |
35 | header .navbar #checkbtn {
36 | font-size: 33px;
37 | display: none;
38 | }
39 |
40 | header .navbar .menu-items {
41 | display: flex;
42 | align-items: center;
43 | justify-content: center;
44 | transition: 0.3s all ease-in-out;
45 | }
46 |
47 | header .navbar .menu-items li {
48 | list-style: none;
49 | padding: 0 20px;
50 | }
51 |
52 | header .navbar .menu-items li a {
53 | text-decoration-line: none;
54 | font-size: 18px;
55 | color: #1f3569;
56 | text-transform: uppercase;
57 | }
58 |
59 | #hero {
60 | margin: auto;
61 | display: flex;
62 | flex-direction: row;
63 | padding: 30px;
64 | height: 550px;
65 | justify-content: space-between;
66 | width: 100%;
67 | }
68 |
69 | #hero .text {
70 | margin: auto;
71 | font-family: "Source Sans Pro", sans-serif;
72 | text-align: center;
73 | }
74 |
75 | #hero .text h1 {
76 | font-size: 55px;
77 | color: #1f3569;
78 | padding: 10px;
79 | margin-bottom: 10px;
80 | }
81 |
82 | #hero .text p {
83 | font-size: 18px;
84 | padding: 18px;
85 | }
86 |
87 | #hero .text button {
88 | padding: 8px;
89 | width: 40%;
90 | border-radius: 40px;
91 | border: none;
92 | outline: none;
93 | background: #1f3569;
94 | color: white;
95 | }
96 |
97 | #hero .img {
98 | margin: auto;
99 | }
100 |
101 | #hero .img img {
102 | width: 550px;
103 | }
104 |
105 | #features {
106 | margin: auto;
107 | width: 100%;
108 | height: max-content;
109 | display: flex;
110 | flex-direction: column;
111 | align-items: center;
112 | padding: 30px;
113 | }
114 |
115 | #features .content {
116 | text-align: center;
117 | font-family: "Source Sans Pro", sans-serif;
118 | }
119 |
120 | #features .content p {
121 | font-size: 23px;
122 | margin-bottom: 10px;
123 | color: #5e80d2;
124 | }
125 |
126 | #features .content h2 {
127 | font-size: 33px;
128 | color: #1f3569;
129 | }
130 |
131 | #features .content img {
132 | width: 650px;
133 | margin-top: 30px;
134 | }
135 |
136 | #features .cards {
137 | display: grid;
138 | grid-template-columns: repeat(2, 1fr);
139 | grid-gap: 10px;
140 | margin: 40px 0;
141 | }
142 |
143 | #features .cards .card {
144 | display: flex;
145 | flex-direction: row;
146 | align-items: center;
147 | justify-content: center;
148 | width: 300px;
149 | padding: 20px;
150 | box-shadow: 0px 2px 0px rgba(0, 0, 0, 0.1);
151 | border-radius: 5px;
152 | text-align: left;
153 | background-color: #fff;
154 | font-family: "Source Sans Pro", sans-serif;
155 | color: #1f3569;
156 | }
157 |
158 | #features .cards .card i {
159 | font-size: 40px;
160 | }
161 |
162 | #services {
163 | margin: auto;
164 | width: 100%;
165 | height: max-content;
166 | display: flex;
167 | flex-direction: column;
168 | align-items: center;
169 | padding: 30px;
170 | }
171 |
172 | #services .content {
173 | text-align: center;
174 | font-family: "Source Sans Pro", sans-serif;
175 | }
176 |
177 | #services .content p {
178 | font-size: 23px;
179 | margin-bottom: 10px;
180 | color: #5e80d2;
181 | }
182 |
183 | #services .content h2 {
184 | font-size: 33px;
185 | color: #1f3569;
186 | }
187 |
188 | #services .cards {
189 | display: grid;
190 | grid-template-columns: repeat(2, 1fr);
191 | grid-gap: 10px;
192 | margin: 40px 0;
193 | }
194 |
195 | #services .cards .card {
196 | border: none;
197 | padding: 40px;
198 | background-color: #fff;
199 | box-shadow: 0px 2px 0px rgba(0, 0, 0, 0.1);
200 | border-radius: 5px;
201 | place-items: center;
202 | width: 250px;
203 | }
204 |
205 | #services .cards .card-android {
206 | border-bottom: 2px solid #3ddc84;
207 | }
208 |
209 | #services .cards .card-website {
210 | border-bottom: 2px solid #ff3a00;
211 | }
212 |
213 | #services .cards .card-others {
214 | border-bottom: 2px solid #5e80d2;
215 | }
216 |
217 | #services .cards .card-body {
218 | display: flex;
219 | align-items: center;
220 | flex-direction: column;
221 | }
222 |
223 | #services .cards .bi {
224 | font-size: 5rem;
225 | padding: 0 10px;
226 | }
227 |
228 | #services .cards .bi-android {
229 | color: #3ddc84;
230 | }
231 |
232 | #services .cards .bi-code-square {
233 | color: #ff3a00;
234 | }
235 |
236 | #services .cards .bi-chat-right {
237 | color: #5e80d2;
238 | }
239 |
240 | #services .cards h2 {
241 | margin: 0;
242 | font-size: 1.5rem;
243 | font-weight: bold;
244 | }
245 |
246 | #services .cards p {
247 | margin-top: 10px;
248 | font-size: 1rem;
249 | }
250 |
251 | #contact {
252 | margin: auto;
253 | width: 100%;
254 | height: max-content;
255 | display: flex;
256 | flex-direction: column;
257 | align-items: center;
258 | padding: 30px;
259 | }
260 |
261 | #contact .content {
262 | text-align: center;
263 | font-family: "Source Sans Pro", sans-serif;
264 | }
265 |
266 | #contact .content p {
267 | font-size: 23px;
268 | margin-bottom: 10px;
269 | color: #5e80d2;
270 | }
271 |
272 | #contact .content h2 {
273 | font-size: 33px;
274 | color: #1f3569;
275 | }
276 |
277 | #contact form {
278 | display: flex;
279 | justify-content: center;
280 | flex-direction: column;
281 | width: 600px;
282 | padding: 2rem;
283 | }
284 |
285 | #contact form label {
286 | font-size: 18px;
287 | font-family: "Source Sans Pro", sans-serif;
288 | margin: 10px 0;
289 | }
290 |
291 | #contact form input {
292 | width: 100%;
293 | margin: 0.5rem 0;
294 | height: 50px;
295 | border: none;
296 | outline: none;
297 | border-radius: 4px;
298 | }
299 |
300 | #contact form textarea {
301 | width: 100%;
302 | margin: 0.5rem 0;
303 | border: none;
304 | outline: none;
305 | border-radius: 4px;
306 | }
307 |
308 | #contact form button {
309 | width: 100%;
310 | background: #1f3569;
311 | border: none;
312 | outline: none;
313 | color: white;
314 | margin: 8px 0 0 0;
315 | height: 50px;
316 | font-size: 18px;
317 | border-radius: 4px;
318 | }
319 |
320 | footer {
321 | width: 100vw;
322 | overflow: hidden;
323 | padding: 20px;
324 | font-family: "Source Sans Pro", sans-serif;
325 | background: #fff;
326 | margin: 0;
327 | }
328 |
329 | footer .footer-content {
330 | display: flex;
331 | width: 100%;
332 | justify-content: center;
333 | flex-direction: column;
334 | text-align: center;
335 | }
336 |
337 | footer .footer-content h3 {
338 | font-size: 2rem;
339 | color: #1f3569;
340 | margin-bottom: 1rem;
341 | }
342 |
343 | footer .footer-content p {
344 | font-size: 18px;
345 | color: #5e80d2;
346 | margin-bottom: 1rem;
347 | }
348 |
349 | footer .socials {
350 | display: flex;
351 | justify-content: center;
352 | gap: 12px;
353 | }
354 |
355 | footer .socials li {
356 | list-style: none;
357 | }
358 |
359 | footer .socials li a {
360 | text-decoration: none;
361 | font-size: 1.5rem;
362 | }
363 |
364 | footer .socials li .bi-facebook {
365 | color: #1877f2;
366 | }
367 |
368 | footer .socials li .bi-twitter {
369 | color: #1da1f2;
370 | }
371 |
372 | footer .socials li .bi-github {
373 | color: #181717;
374 | }
375 |
376 | footer .socials li .bi-youtube {
377 | color: #ff0000;
378 | }
379 |
380 | footer .socials li .bi-linkedin {
381 | color: #0a66c2;
382 | }
383 |
384 | @media (max-width: 760px) {
385 | header .navbar {
386 | margin: auto;
387 | text-align: center;
388 | background: white;
389 | box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3);
390 | }
391 | header .navbar #checkbtn {
392 | display: block;
393 | }
394 | header .navbar .menu-items {
395 | position: absolute;
396 | background: #1f3569;
397 | flex-direction: column;
398 | display: block;
399 | top: 90px;
400 | left: -100%;
401 | height: max-content;
402 | width: 100%;
403 | }
404 | header .navbar .menu-items li {
405 | padding: 25px;
406 | }
407 | header .navbar .menu-items li a {
408 | color: white;
409 | }
410 | #hero {
411 | flex-direction: column;
412 | text-align: center;
413 | padding: 0;
414 | margin-top: 33px;
415 | height: max-content;
416 | }
417 | #hero .img img {
418 | width: 370px;
419 | margin-top: 30px;
420 | }
421 | #features {
422 | padding: 0;
423 | margin-top: 33px;
424 | overflow: hidden;
425 | }
426 | #features .content h2 {
427 | padding: 10px;
428 | }
429 | #features .content img {
430 | width: 350px;
431 | }
432 | #features .cards {
433 | grid-template-columns: repeat(1, 1fr);
434 | }
435 | #services {
436 | padding: 0;
437 | margin-top: 33px;
438 | overflow: hidden;
439 | }
440 | #services .content h2 {
441 | padding: 10px;
442 | }
443 | #services .cards {
444 | grid-template-columns: repeat(1, 1fr);
445 | place-items: center;
446 | }
447 | #contact {
448 | padding: 0;
449 | margin-top: 33px;
450 | overflow: hidden;
451 | }
452 | #contact .content h2 {
453 | padding: 10px;
454 | }
455 | #contact form {
456 | width: 350px;
457 | }
458 | footer {
459 | padding: 0;
460 | padding: 20px 0;
461 | text-align: center;
462 | }
463 | footer .footer-content p {
464 | padding: 10px;
465 | }
466 | }
467 |
--------------------------------------------------------------------------------
/project-1_landing-page/img/features.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Armanidrisi/frontend-projects/cb924a7369285695549eee72a242e9a76cb0efa1/project-1_landing-page/img/features.png
--------------------------------------------------------------------------------
/project-1_landing-page/img/hero-bg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/project-1_landing-page/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 | Landing - AppDev
13 |
14 |
15 |
29 |
30 |
31 |
excepteur nostrud excepteur sunt
32 |
33 | deserunt minim velit pariatur exercitation laborum ipsum cillum aliqua
34 | dolor nisi ullamco sunt deserunt qui occaecat cupidatat quis ea id
35 | aliqua exercitation adipisicing officia amet eu fugiat aliquip culpa
36 | cillum
37 |
38 |
Get Started
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
Features
47 |
Quality Products is our promise..
48 |
49 |
50 |
51 |
52 |
53 |
Friendly Behaviour
54 |
55 |
56 |
57 |
Budget Friendly
58 |
59 |
60 |
61 |
Quality Developers
62 |
63 |
64 |
65 |
Maintenance Support
66 |
67 |
68 |
69 |
Correct time completion
70 |
71 |
72 |
73 |
Error Solving
74 |
75 |
76 |
77 |
78 |
79 |
Services
80 |
Grow your business with us
81 |
82 |
83 |
84 |
85 |
Android Apps
86 |
87 | We have a very experienced team for app development, We offer
88 | you a very attractive user interface and functions for your
89 | application.
90 |
91 |
92 |
93 |
94 |
95 |
96 |
Website
97 |
98 | Need a website for your bussiness or personal use ? why are you
99 | waiting drop a project request now!
100 |
101 |
102 |
103 |
104 |
105 |
106 |
Other
107 |
108 | We provide you any type of technical services as you need, for
109 | more details please contact us
110 |
111 |
112 |
113 |
114 |
115 |
116 |
133 |
160 |
161 |
162 |
--------------------------------------------------------------------------------
/project-1_landing-page/js/index.js:
--------------------------------------------------------------------------------
1 | //JavaScript code here
2 |
--------------------------------------------------------------------------------
/project-1_landing-page/scss/index.scss:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css?family=Source+Sans+Pro");
2 | * {
3 | margin: 0;
4 | padding: 0;
5 | }
6 | body {
7 | background: #f1f1f1;
8 | }
9 | header {
10 | .navbar {
11 | height: 70px;
12 | display: flex;
13 | justify-content: space-between;
14 | align-items: center;
15 | background: transparent;
16 |
17 | padding: 10px 26px;
18 | .logo {
19 | font-size: 2rem;
20 | font-weight: 600;
21 | font-family: "Source Sans Pro", sans-serif;
22 | color: #1f3569;
23 | }
24 | #check {
25 | display: none;
26 | }
27 | #check:checked ~ .menu-items {
28 | left: 0;
29 | }
30 | #checkbtn {
31 | font-size: 33px;
32 | display: none;
33 | }
34 | .menu-items {
35 | display: flex;
36 | align-items: center;
37 | justify-content: center;
38 | transition: 0.3s all ease-in-out;
39 | li {
40 | list-style: none;
41 | padding: 0 20px;
42 | a {
43 | text-decoration-line: none;
44 | font-size: 18px;
45 | color: #1f3569;
46 | text-transform: uppercase;
47 | }
48 | }
49 | }
50 | }
51 | }
52 | #hero {
53 | margin: auto;
54 |
55 | display: flex;
56 | flex-direction: row;
57 | padding: 30px;
58 | height: 550px;
59 | justify-content: space-between;
60 | width: 100%;
61 | .text {
62 | margin: auto;
63 | font-family: "Source Sans Pro", sans-serif;
64 | text-align: center;
65 | h1 {
66 | font-size: 55px;
67 | color: #1f3569;
68 | padding: 10px;
69 | margin-bottom: 10px;
70 | }
71 | p {
72 | font-size: 18px;
73 | padding: 18px;
74 | }
75 | button {
76 | padding: 8px;
77 | width: 40%;
78 | border-radius: 40px;
79 | border: none;
80 | outline: none;
81 | background: #1f3569;
82 | color: white;
83 | }
84 | }
85 | .img {
86 | margin: auto;
87 | img {
88 | width: 550px;
89 | }
90 | }
91 | }
92 | #features {
93 | margin: auto;
94 | width: 100%;
95 |
96 | height: max-content;
97 | display: flex;
98 | flex-direction: column;
99 | align-items: center;
100 | padding: 30px;
101 | .content {
102 | text-align: center;
103 | font-family: "Source Sans Pro", sans-serif;
104 | p {
105 | font-size: 23px;
106 | margin-bottom: 10px;
107 | color: #5e80d2;
108 | }
109 | h2 {
110 | font-size: 33px;
111 | color: #1f3569;
112 | }
113 | img {
114 | width: 650px;
115 | margin-top: 30px;
116 | }
117 | }
118 | .cards {
119 | display: grid;
120 | grid-template-columns: repeat(2, 1fr);
121 | grid-gap: 10px;
122 | margin: 40px 0;
123 | .card {
124 | display: flex;
125 | flex-direction: row;
126 | align-items: center;
127 | justify-content: center;
128 | width: 300px;
129 | padding: 20px;
130 | box-shadow: 0px 2px 0px rgba(0, 0, 0, 0.1);
131 | border-radius: 5px;
132 | text-align: left;
133 | background-color: #fff;
134 | font-family: "Source Sans Pro", sans-serif;
135 | color: #1f3569;
136 | i {
137 | font-size: 40px;
138 | }
139 | }
140 | }
141 | }
142 | #services {
143 | margin: auto;
144 | width: 100%;
145 |
146 | height: max-content;
147 | display: flex;
148 | flex-direction: column;
149 | align-items: center;
150 | padding: 30px;
151 | .content {
152 | text-align: center;
153 | font-family: "Source Sans Pro", sans-serif;
154 | p {
155 | font-size: 23px;
156 | margin-bottom: 10px;
157 | color: #5e80d2;
158 | }
159 | h2 {
160 | font-size: 33px;
161 | color: #1f3569;
162 | }
163 | }
164 | .cards {
165 | display: grid;
166 | grid-template-columns: repeat(2, 1fr);
167 | grid-gap: 10px;
168 | margin: 40px 0;
169 | .card {
170 | border: none;
171 | padding: 40px;
172 | background-color: #fff;
173 | box-shadow: 0px 2px 0px rgba(0, 0, 0, 0.1);
174 | border-radius: 5px;
175 | place-items: center;
176 | width: 250px;
177 | }
178 | .card-android {
179 | border-bottom: 2px solid #3ddc84;
180 | }
181 | .card-website {
182 | border-bottom: 2px solid #ff3a00;
183 | }
184 | .card-others {
185 | border-bottom: 2px solid #5e80d2;
186 | }
187 | .card-body {
188 | display: flex;
189 | align-items: center;
190 | flex-direction: column;
191 | }
192 |
193 | .bi {
194 | font-size: 5rem;
195 | padding: 0 10px;
196 | }
197 | .bi-android {
198 | color: #3ddc84;
199 | }
200 | .bi-code-square {
201 | color: #ff3a00;
202 | }
203 | .bi-chat-right {
204 | color: #5e80d2;
205 | }
206 | h2 {
207 | margin: 0;
208 | font-size: 1.5rem;
209 | font-weight: bold;
210 | }
211 |
212 | p {
213 | margin-top: 10px;
214 | font-size: 1rem;
215 | }
216 | }
217 | }
218 | #contact {
219 | margin: auto;
220 | width: 100%;
221 | height: max-content;
222 | display: flex;
223 | flex-direction: column;
224 | align-items: center;
225 | padding: 30px;
226 |
227 | .content {
228 | text-align: center;
229 | font-family: "Source Sans Pro", sans-serif;
230 | p {
231 | font-size: 23px;
232 | margin-bottom: 10px;
233 | color: #5e80d2;
234 | }
235 | h2 {
236 | font-size: 33px;
237 | color: #1f3569;
238 | }
239 | }
240 | form {
241 | display: flex;
242 | justify-content: center;
243 | flex-direction: column;
244 | width: 600px;
245 | padding: 2rem;
246 | label {
247 | font-size: 18px;
248 | font-family: "Source Sans Pro", sans-serif;
249 | margin: 10px 0;
250 | }
251 | input {
252 | width: 100%;
253 | margin: 0.5rem 0;
254 | height: 50px;
255 | border: none;
256 | outline: none;
257 | border-radius: 4px;
258 | }
259 | textarea {
260 | width: 100%;
261 | margin: 0.5rem 0;
262 | border: none;
263 | outline: none;
264 | border-radius: 4px;
265 | }
266 | button {
267 | width: 100%;
268 | background: #1f3569;
269 | border: none;
270 | outline: none;
271 | color: white;
272 | margin: 8px 0 0 0;
273 | height: 50px;
274 | font-size: 18px;
275 | border-radius: 4px;
276 | }
277 | }
278 | }
279 | footer {
280 | width: 100vw;
281 | overflow: hidden;
282 | padding: 20px;
283 | font-family: "Source Sans Pro", sans-serif;
284 | background: #fff;
285 | margin: 0;
286 | .footer-content {
287 | display: flex;
288 | width: 100%;
289 | justify-content: center;
290 | flex-direction: column;
291 | text-align: center;
292 | h3 {
293 | font-size: 2rem;
294 | color: #1f3569;
295 | margin-bottom: 1rem;
296 | }
297 | p {
298 | font-size: 18px;
299 | color: #5e80d2;
300 | margin-bottom: 1rem;
301 | }
302 | }
303 | .socials {
304 | display: flex;
305 | justify-content: center;
306 | gap: 12px;
307 | li {
308 | list-style: none;
309 |
310 | a {
311 | text-decoration: none;
312 | font-size: 1.5rem;
313 | }
314 | .bi-facebook {
315 | color: #1877f2;
316 | }
317 | .bi-twitter {
318 | color: #1da1f2;
319 | }
320 | .bi-github {
321 | color: #181717;
322 | }
323 | .bi-youtube {
324 | color: #ff0000;
325 | }
326 | .bi-linkedin {
327 | color: #0a66c2;
328 | }
329 | }
330 | }
331 | }
332 | @media (max-width: 760px) {
333 | header {
334 | .navbar {
335 | margin: auto;
336 | text-align: center;
337 | background: white;
338 | box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3);
339 | #checkbtn {
340 | display: block;
341 | }
342 | .menu-items {
343 | position: absolute;
344 | background: #1f3569;
345 |
346 | flex-direction: column;
347 | display: block;
348 | top: 90px;
349 | left: -100%;
350 | height: max-content;
351 | width: 100%;
352 |
353 | li {
354 | padding: 25px;
355 | a {
356 | color: white;
357 | }
358 | }
359 | }
360 | }
361 | }
362 | #hero {
363 | flex-direction: column;
364 | text-align: center;
365 | padding: 0;
366 | margin-top: 33px;
367 | height: max-content;
368 | .img {
369 | img {
370 | width: 370px;
371 | margin-top: 30px;
372 | }
373 | }
374 | }
375 | #features {
376 | padding: 0;
377 | margin-top: 33px;
378 | overflow: hidden;
379 | .content {
380 | h2 {
381 | padding: 10px;
382 | }
383 | img {
384 | width: 350px;
385 | }
386 | }
387 | .cards {
388 | grid-template-columns: repeat(1, 1fr);
389 | }
390 | }
391 | #services {
392 | padding: 0;
393 | margin-top: 33px;
394 | overflow: hidden;
395 | .content {
396 | h2 {
397 | padding: 10px;
398 | }
399 | }
400 | .cards {
401 | grid-template-columns: repeat(1, 1fr);
402 | place-items: center;
403 | }
404 | }
405 | #contact {
406 | padding: 0;
407 | margin-top: 33px;
408 | overflow: hidden;
409 | .content {
410 | h2 {
411 | padding: 10px;
412 | }
413 | }
414 | form {
415 | width: 350px;
416 | }
417 | }
418 | footer {
419 | padding: 0;
420 | padding-top: 20px;
421 | text-align: center;
422 | }
423 | }
424 |
--------------------------------------------------------------------------------
/project-20_bubble_game/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Bubble Game
8 |
9 |
10 |
11 |
12 |
13 |
14 |
28 |
29 |
30 | Start
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/project-20_bubble_game/index.js:
--------------------------------------------------------------------------------
1 | var timerValue = 30;
2 | var scoreValue = 0;
3 | var hitsValue = 0;
4 | const createBubble = () => {
5 | var contentbox = '';
6 | for (let i = 1; i < 208; i++) {
7 | contentbox += `${Math.floor(Math.random() * 10)}
`;
8 |
9 | }
10 | document.querySelector('.content').innerHTML = contentbox;
11 | }
12 | const setTimeing = () => {
13 | var timerNode = document.querySelector('.timer');
14 | const timeInterval = setInterval(() => {
15 | if (timerValue > 0) {
16 | timerValue--;
17 | timerNode.textContent = timerValue;
18 | }
19 | else {
20 | clearInterval(timeInterval);
21 | document.querySelector('.content').innerHTML = 'Game Over Restart ';
22 | }
23 | }, 1000);
24 | }
25 | const hitsgenerate = () => {
26 | hitsValue = Math.floor(Math.random() * 10);
27 | console.log(hitsValue);
28 | document.querySelector('.hitsvalue').textContent = hitsValue;
29 |
30 | }
31 | const score = () => {
32 | scoreValue += 10;
33 | document.querySelector('.scoreValue').textContent = scoreValue;
34 |
35 | }
36 |
37 | document.querySelector('.content').addEventListener('click', (e) => {
38 | if (Number(e.target.textContent) === hitsValue) {
39 | score();
40 | createBubble();
41 | hitsgenerate();
42 | }
43 | // console.log(Number(e.target.textContent));
44 | })
45 | const restartGame = () => {
46 | scoreValue = 0;
47 | document.querySelector('.scoreValue').textContent = scoreValue;
48 | timerValue = 30;
49 | createBubble();
50 | setTimeing();
51 | hitsgenerate();
52 | }
53 | const Startingfun = () => {
54 |
55 | createBubble();
56 | setTimeing();
57 | hitsgenerate();
58 | }
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/project-20_bubble_game/style.css:
--------------------------------------------------------------------------------
1 | * {
2 | padding: 0;
3 | margin: 0;
4 | }
5 |
6 | .main {
7 | background-color: aqua;
8 | width: 100vw;
9 | height: 100vh;
10 | display: flex;
11 | align-items: center;
12 | justify-content: center;
13 | }
14 |
15 | .outer-box {
16 | border: 2px solid black;
17 | width: 70vw;
18 | height: 59%;
19 | overflow: hidden;
20 | border-radius: 10px;
21 | }
22 |
23 | .navbar {
24 | background-color: #55a555;
25 | width: 100%;
26 | height: 15%;
27 | display: flex;
28 | justify-content: space-evenly;
29 |
30 | }
31 |
32 | .value-box {
33 | background-color: white;
34 | width: 30px;
35 | text-align: center;
36 | font-weight: 700;
37 | }
38 |
39 | .mr-2 h3,
40 | p {
41 | margin-top: 20px;
42 | display: inline-block;
43 | }
44 |
45 | .content {
46 | background-color: white;
47 | width: 100%;
48 | height: 100%;
49 | display: flex;
50 | flex-wrap: wrap;
51 |
52 |
53 | }
54 |
55 | .bubble {
56 | text-align: center;
57 | display: flex;
58 | align-items: center;
59 | justify-content: center;
60 | height: 30px;
61 | width: 30px;
62 | border: 1.5px solid black;
63 | border-radius: 50%;
64 | background-color: #55a555;
65 | margin: 5px 5px;
66 |
67 | }
68 |
69 | .bubble:hover {
70 | background-color: #40a140;
71 | cursor: pointer;
72 | }
73 |
74 | .gameOver {
75 | text-align: center;
76 | /* display: flex; */
77 | /* justify-content: center; */
78 | /* border: 2p x solid; */
79 | /* align-items: center; */
80 | position: absolute;
81 | top: 50%;
82 | left: 0;
83 | width: 100%;
84 | /* height: 80%; */
85 | }
86 |
87 | .gameOver button {
88 | width: 16%;
89 | height: 40px;
90 | }
91 |
92 | .Starting {
93 | display: flex;
94 | justify-content: center;
95 | align-items: center;
96 |
97 | width: 100%;
98 | }
99 |
100 | .starting-text {
101 | width: 16%;
102 | height: 40px;
103 | }
--------------------------------------------------------------------------------
/project-2_calculator/css/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | outline: none;
5 | box-sizing: border-box;
6 | }
7 | body {
8 | font-family: montserrat;
9 | display: flex;
10 | text-align: center;
11 | justify-content: center;
12 | align-items: center;
13 | min-height: 100vh;
14 | background: linear-gradient(#9cebfc, #6ae1fb);
15 | }
16 | .center {
17 | /* display: none; */
18 | width: 350px;
19 | background: black;
20 | border-radius: 20px;
21 | }
22 | input[type="text"] {
23 | height: 60px;
24 | width: 300px;
25 | margin-top: 40px;
26 | border-radius: 1px;
27 | border: 1px solid #e1e7ea;
28 | color: black;
29 | font-size: 22px;
30 | font-weight: bold;
31 | text-align: right;
32 | padding-right: 20px;
33 | background: linear-gradient(#d1dce0, #dfe6e9);
34 | }
35 | form .buttons {
36 | width: 300px;
37 | margin: 10px 25px 0 25px;
38 | padding: 10px 0;
39 | }
40 | input[type="button"] {
41 | width: 58px;
42 | height: 55px;
43 | margin: 5px;
44 | font-size: 22px;
45 | line-height: 55px;
46 | border-radius: 3px;
47 | border: 1px solid #d9d9d9;
48 | background: linear-gradient(#d9d9d9, #bfbfbf);
49 | }
50 | input[type="button"]:hover {
51 | transition: 0.5s;
52 | background: linear-gradient(#bfbfbf, #d9d9d9);
53 | }
54 | input#clear {
55 | background: #ff1a1a;
56 | border: 1px solid #cc0000;
57 | color: white;
58 | }
59 | input#equal {
60 | width: 275px;
61 | margin: 10px 0 10px 0;
62 | font-size: 30px;
63 | color: white;
64 | background: #ff3d00;
65 | border: 1px solid #b32a00;
66 | }
67 |
--------------------------------------------------------------------------------
/project-2_calculator/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Calculator
6 |
7 |
8 |
9 |
10 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/project-2_calculator/js/index.js:
--------------------------------------------------------------------------------
1 | const buttons = document.querySelectorAll("#btn");
2 | const display = document.getElementById("display");
3 | buttons.forEach((button) => {
4 | button.addEventListener("click", () => {
5 | display.value += button.value;
6 | });
7 | });
--------------------------------------------------------------------------------
/project-3_wavy_login_form/css/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css?family=Muli&display=swap");
2 |
3 | * {
4 | box-sizing: border-box;
5 | }
6 |
7 | body {
8 | background-color: steelblue;
9 | color: #fff;
10 | font-family: "Muli", sans-serif;
11 | display: flex;
12 | flex-direction: column;
13 | align-items: center;
14 | justify-content: center;
15 | height: 100vh;
16 | overflow: hidden;
17 | margin: 0;
18 | }
19 | .container {
20 | background-color: rgba(0, 0, 0, 0.3);
21 | padding: 20px 40px;
22 | border-radius: 5px;
23 | }
24 | .container h1 {
25 | text-align: center;
26 | margin-bottom: 30px;
27 | }
28 | .container form .form-control {
29 | position: relative;
30 | margin: 20px 0 40px;
31 | width: 300px;
32 | }
33 | .container form .form-control label {
34 | position: absolute;
35 | top: 15px;
36 | left: 0;
37 | }
38 | .container form .form-control label span {
39 | display: inline-block;
40 | font-size: 18px;
41 | min-width: 5px;
42 | transition: 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
43 | }
44 |
45 | .container form .form-control input:focus + label span,
46 | .container form .form-control input:valid + label span {
47 | color: lightblue;
48 | transform: translateY(-30px);
49 | }
50 | .container form .form-control input {
51 | background-color: transparent;
52 | border: 0;
53 | border-bottom: 2px #fff solid;
54 | display: block;
55 | width: 100%;
56 | padding: 15px 0;
57 | font-size: 18px;
58 | color: #fff;
59 | outline: none;
60 | }
61 | .container form .form-control input:focus,
62 | .container form .form-control input:valid {
63 | outline: 0;
64 | border-bottom-color: lightblue;
65 | }
66 | .container form .btn {
67 | cursor: pointer;
68 | display: inline-block;
69 | width: 100%;
70 | background: lightblue;
71 | padding: 15px;
72 | font-family: inherit;
73 | font-size: 16px;
74 | border: 0;
75 | border-radius: 5px;
76 | }
77 |
78 | .container form .btn:focus {
79 | outline: 0;
80 | }
81 |
82 | .container form .btn:active {
83 | transform: scale(0.98);
84 | }
85 | .container form .text {
86 | margin-top: 30px;
87 | }
88 | .container form a {
89 | text-decoration: none;
90 | color: lightblue;
91 | }
92 |
--------------------------------------------------------------------------------
/project-3_wavy_login_form/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Login Form
8 |
9 |
10 |
11 |
Login Form
12 |
13 |
14 |
15 | Email
16 |
17 |
18 |
19 | Password
20 |
21 | Login
22 |
23 | Don't have an account? Register
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/project-3_wavy_login_form/js/index.js:
--------------------------------------------------------------------------------
1 | const labels = document.querySelectorAll(".form-control label");
2 |
3 | labels.forEach((label) => {
4 | label.innerHTML = label.innerText
5 | .split("")
6 | .map(
7 | (letter, idx) =>
8 | `${letter} `
9 |
10 | )
11 | .join("");
12 | });
13 |
--------------------------------------------------------------------------------
/project-4_random_quote_generator/css/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap");
2 |
3 | * {
4 | box-sizing: border-box;
5 | }
6 | body {
7 | background-color: #252525;
8 | font-family: "Roboto", sans-serif;
9 | display: flex;
10 | flex-direction: column;
11 | align-items: center;
12 | justify-content: center;
13 | height: 100vh;
14 | overflow: hidden;
15 | margin: 0;
16 | padding: 20px;
17 | }
18 | .container {
19 | background-color: #fff;
20 | border-radius: 10px;
21 |
22 | padding: 50px 20px;
23 | text-align: center;
24 | max-width: 100%;
25 | width: 800px;
26 | }
27 | h3 {
28 | margin: 0;
29 | opacity: 0.5;
30 | letter-spacing: 2px;
31 | }
32 |
33 | .quote {
34 | font-size: 30px;
35 | letter-spacing: 1px;
36 | line-height: 40px;
37 | margin: 50px auto;
38 | max-width: 600px;
39 | }
40 |
41 | .btn {
42 | background-color: #1b1b1b;
43 | color: #fff;
44 | border: 0;
45 | border-radius: 10px;
46 | box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
47 | padding: 14px 40px;
48 | font-size: 16px;
49 | cursor: pointer;
50 | }
51 |
52 | .btn:active {
53 | transform: scale(0.98);
54 | }
55 |
56 | .btn:focus {
57 | outline: 0;
58 | }
59 |
--------------------------------------------------------------------------------
/project-4_random_quote_generator/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Random Quote Generator
8 |
9 |
10 |
11 |
Today's Quote
12 |
loading.....
13 |
Get Another Quote
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/project-4_random_quote_generator/js/index.js:
--------------------------------------------------------------------------------
1 | // Get the button element with ID "getbtn"
2 | const btn = document.getElementById("getbtn");
3 |
4 | // Get the quote element with ID "quote"
5 | const QuoteElem = document.getElementById("quote");
6 |
7 | // Fetch a random quote from the Quotable API
8 | const fetchData = async () => {
9 | QuoteElem.innerHTML = `Loading...
`;
10 | // Send a request to the Quotable API to get a random quote
11 | let data = await fetch("https://api.quotable.io/random");
12 |
13 | // Parse the response as JSON
14 | let json = await data.json();
15 |
16 | // Set the text of the quote element to the content of the fetched quote
17 | QuoteElem.innerHTML = `${json.content}
`;
18 | };
19 |
20 | // Add an event listener to the button element that triggers the fetchData function when clicked
21 | btn.addEventListener("click", fetchData);
22 |
23 | // Call the fetchData function once to initially populate the quote element with a random quote
24 | fetchData();
25 |
--------------------------------------------------------------------------------
/project-5_random_color_changer/css/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | height: 100vh;
3 | display: flex;
4 | justify-content: center;
5 | align-items: center;
6 | background-color: #81d4fa;
7 | }
8 | .btn {
9 | background: white;
10 | border-radius: 60px;
11 | outline: none;
12 | border: none;
13 | padding: 6px;
14 | height: 60px;
15 | width: 50%;
16 | font-size: 18px;
17 | font-weight: bold;
18 | }
19 | .btn:hover,
20 | .btn:active {
21 | box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5);
22 | }
23 |
--------------------------------------------------------------------------------
/project-5_random_color_changer/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Random Color Changer
8 |
9 |
10 | Change BG
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/project-5_random_color_changer/js/index.js:
--------------------------------------------------------------------------------
1 | // Select the button element with the ID 'btn'
2 | const btn = document.getElementById("btn");
3 |
4 | // Define a function to change the background color
5 | const changebg = () => {
6 | // Generate a random value between 0 and 255 for each color component (red, green, blue)
7 | const red = Math.floor(Math.random() * 256);
8 | const green = Math.floor(Math.random() * 256);
9 | const blue = Math.floor(Math.random() * 256);
10 |
11 | // Construct an RGB color string using the random values
12 | const rgbColor = `rgb(${red}, ${green}, ${blue})`;
13 |
14 | // Set the background color of the body to the random RGB color
15 | document.body.style.backgroundColor = rgbColor;
16 | };
17 |
18 | // Call the changebg function once to set the initial background color
19 | changebg();
20 |
21 | // Add an event listener to the button that calls the changebg function when clicked
22 | btn.addEventListener("click", changebg);
23 |
--------------------------------------------------------------------------------
/project-6_qr_code_generator/css/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Lato&display=swap");
2 | * {
3 | margin: 0;
4 | padding: 0;
5 | box-sizing: border-box;
6 | font-family: "Lato", sans-serif;
7 | }
8 |
9 | body {
10 | background-color: #cad7d8;
11 | height: 100vh;
12 | display: flex;
13 | justify-content: center;
14 | align-items: center;
15 | }
16 |
17 | .container {
18 | max-width: 450px;
19 | width: 100%;
20 | padding: 20px;
21 | margin: 100px auto;
22 | background-color: #fff;
23 | border-radius: 8px;
24 | box-shadow: 0 2px 3px rgba(0, 0, 0, 0.3);
25 | }
26 |
27 | .container h1 {
28 | font-palette: 18px;
29 | background: #1b1b1b;
30 | font-weight: 300;
31 | padding: 25px 0;
32 | margin: -20px -20px 20px -20px;
33 | text-align: center;
34 | border-radius: 8px 8px 0 0;
35 | color: white;
36 | }
37 |
38 | .container form input {
39 | width: 100%;
40 | outline: none;
41 | border: 1.5px solid #ccc;
42 | height: 45px;
43 | border-radius: 3px;
44 | padding: 0 10px;
45 | background: #fff;
46 | margin-bottom: 0.7rem;
47 | font-size: 18px;
48 | }
49 |
50 | .container form button {
51 | width: 100%;
52 | outline: none;
53 | border: none;
54 | height: 45px;
55 | border-radius: 3px;
56 | padding: 0 10px;
57 | background: #1b1b1b;
58 | margin-bottom: 0.7rem;
59 | font-size: 18px;
60 | color: white;
61 | }
62 |
63 | .container form #qrcode-container {
64 | display: none;
65 | justify-content: center;
66 | }
67 |
68 | .container form .qrcode {
69 | padding: 10px;
70 | margin-bottom: 15px;
71 | }
72 |
73 | .container form .qrcode img {
74 | margin: 0 auto;
75 | box-shadow: 0 2px 3px rgba(67, 67, 68, 0.25);
76 | padding: 4px;
77 | }
78 |
--------------------------------------------------------------------------------
/project-6_qr_code_generator/css/index.scss:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Lato&display=swap");
2 | * {
3 | margin: 0;
4 | padding: 0;
5 | box-sizing: border-box;
6 | font-family: "Lato", sans-serif;
7 | }
8 | body {
9 | background-color: rgb(202, 215, 216);
10 | height: 100vh;
11 | display: flex;
12 | justify-content: center;
13 | align-items: center;
14 | }
15 | .container {
16 | max-width: 450px;
17 | width: 100%;
18 | padding: 20px;
19 | margin: 100px auto;
20 | background-color: #fff;
21 | border-radius: 8px;
22 | box-shadow: 0 2px 3px rgba(0, 0, 0, 0.3);
23 | h1 {
24 | font-palette: 18px;
25 | background: #1b1b1b;
26 | font-weight: 300;
27 | padding: 25px 0;
28 | margin: -20px -20px 20px -20px;
29 | text-align: center;
30 | border-radius: 8px 8px 0 0;
31 | color: rgb(255, 255, 255);
32 | }
33 | form {
34 | input {
35 | width: 100%;
36 | outline: none;
37 | border: 1.5px solid #ccc;
38 | height: 45px;
39 | border-radius: 3px;
40 | padding: 0 10px;
41 | background: #fff;
42 | margin-bottom: 0.7rem;
43 | font-size: 18px;
44 | }
45 | button {
46 | width: 100%;
47 | outline: none;
48 | border: none;
49 | height: 45px;
50 | border-radius: 3px;
51 | padding: 0 10px;
52 | background: #1b1b1b;
53 | margin-bottom: 0.7rem;
54 | font-size: 18px;
55 | color: white;
56 | }
57 | #qrcode-container {
58 | display: none;
59 | justify-content: center;
60 | }
61 |
62 | .qrcode {
63 | padding: 10px;
64 | margin-bottom: 15px;
65 | }
66 | .qrcode img {
67 | margin: 0 auto;
68 | box-shadow: 0 2px 3px rgba(67, 67, 68, 0.25);
69 | padding: 4px;
70 | }
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/project-6_qr_code_generator/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Qr Code Generator
9 |
10 |
11 |
12 |
Qr Code Generator
13 |
14 |
20 |
21 |
22 |
23 |
24 |
25 | Generate QR Code
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/project-6_qr_code_generator/js/index.js:
--------------------------------------------------------------------------------
1 | // Selecting the necessary DOM elements
2 | const input = document.getElementById("inp");
3 | const qrcodeContainer = document.getElementById("qrcode-container");
4 | const qrimg = document.getElementById("qrimg");
5 | const btn = document.getElementById("btn");
6 |
7 | // Add an event listener to the button that triggers the creation of the QR code
8 | btn.addEventListener("click", () => {
9 | // Check if the input field has a value
10 | if (input.value) {
11 | // If the input field has a value, set the source of the QR code image to a URL that will create the QR code
12 | // using the input field's value as the data for the QR code. Set the size of the QR code to 300x150 pixels.
13 | qrimg.setAttribute(
14 | "src",
15 | `https://api.qrserver.com/v1/create-qr-code/?size=300x150&data=${input.value}`
16 | );
17 |
18 | // Show the container element that holds the QR code image by setting its display style to "flex"
19 | qrcodeContainer.style.display = "flex";
20 | } else {
21 | // If the input field does not have a value, show an alert message asking the user to enter text
22 | alert("Please Enter Text!");
23 | }
24 | });
25 |
--------------------------------------------------------------------------------
/project-7_stopwatch_timer/css/index.css:
--------------------------------------------------------------------------------
1 |
2 | body {
3 | height: 100vh;
4 | display: flex;
5 | justify-content: center;
6 | align-items: center;
7 | background-color: steelblue;
8 | }
9 | .stopwatch {
10 | text-align: center;
11 | background: rgba(0, 0, 0, 0.3);
12 | padding: 30px 0;
13 | max-width: 430px;
14 | width: 100%;
15 | border-radius: 8px;
16 | }
17 | h2 {
18 | font-weight: 300;
19 | color: white;
20 | }
21 | .stopwatch h1 {
22 | font-size: 50px;
23 | font-weight: 300;
24 | color: white;
25 | }
26 |
27 | button {
28 | cursor: pointer;
29 | display: inline-block;
30 | margin: 0 10px;
31 | background: lightblue;
32 | padding: 15px;
33 | font-family: inherit;
34 | font-size: 16px;
35 | border: 0;
36 | border-radius: 5px;
37 | }
38 |
--------------------------------------------------------------------------------
/project-7_stopwatch_timer/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Stopwatch Timer
8 |
9 |
10 |
11 |
Stopwatch
12 | 00:00:00
13 | Start
14 | Stop
15 | Reset
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/project-7_stopwatch_timer/js/index.js:
--------------------------------------------------------------------------------
1 | // select elements from the DOM
2 | const stopwatchEl = document.querySelector(".stopwatch");
3 | const timerEl = stopwatchEl.querySelector(".timer");
4 | const startBtn = document.getElementById("start");
5 | const stopBtn = document.getElementById("stop");
6 | const resetBtn = document.getElementById("reset");
7 |
8 | // initialize timer variables
9 | let startTime,
10 | elapsedTime = 0,
11 | intervalId;
12 |
13 | // function to pad numbers with zeros
14 | function pad(num, places) {
15 | return String(num).padStart(places, "0");
16 | }
17 |
18 | // function to display the timer
19 | function displayTimer() {
20 | let minutes = Math.floor(elapsedTime / 60000);
21 | let seconds = Math.floor((elapsedTime % 60000) / 1000);
22 | let milliseconds = Math.floor((elapsedTime % 1000) / 10);
23 | timerEl.textContent = `${pad(minutes, 2)}:${pad(seconds, 2)}:${pad(
24 | milliseconds,
25 | 2
26 | )}`;
27 | }
28 |
29 | // function to start the timer
30 | function startTimer() {
31 | startTime = Date.now() - elapsedTime;
32 | intervalId = setInterval(() => {
33 | elapsedTime = Date.now() - startTime;
34 | displayTimer();
35 | }, 10);
36 | startBtn.disabled = true;
37 | stopBtn.disabled = false;
38 | resetBtn.disabled = false;
39 | }
40 |
41 | // function to stop the timer
42 | function stopTimer() {
43 | clearInterval(intervalId);
44 | startBtn.disabled = false;
45 | stopBtn.disabled = true;
46 | }
47 |
48 | // function to reset the timer
49 | function resetTimer() {
50 | clearInterval(intervalId);
51 | elapsedTime = 0;
52 | displayTimer();
53 | startBtn.disabled = false;
54 | stopBtn.disabled = true;
55 | resetBtn.disabled = true;
56 | }
57 |
58 | // add event listeners to the buttons
59 | startBtn.addEventListener("click", startTimer);
60 | stopBtn.addEventListener("click", stopTimer);
61 | resetBtn.addEventListener("click", resetTimer);
--------------------------------------------------------------------------------
/project-8_password_generator/css/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap");
2 | * {
3 | margin: 0;
4 | padding: 0;
5 | box-sizing: border-box;
6 | }
7 | body {
8 | height: 100vh;
9 | display: flex;
10 | justify-content: center;
11 | align-items: center;
12 | background: steelblue;
13 | font-family: "Poppins", sans-serif;
14 | }
15 | .container {
16 | position: relative;
17 | max-width: 350px;
18 | width: 100%;
19 | background: #f1f1f1;
20 | border-radius: 12px;
21 | padding: 30px 25px;
22 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);
23 | }
24 | .container .input-box {
25 | position: relative;
26 | height: 50px;
27 | }
28 | .container .input-box input {
29 | height: 100%;
30 | width: 100%;
31 | border-radius: 8px;
32 | padding: 0 45px 0 15px;
33 | border: 1px solid #aaa;
34 | background-color: transparent;
35 | outline: none;
36 | }
37 | .container .input-box #copy-btn {
38 | position: absolute;
39 | right: 15px;
40 | top: 50%;
41 | color: #707070;
42 | font-size: 20px;
43 | cursor: pointer;
44 | transform: translateY(-50%);
45 | }
46 | .container .range-box {
47 | display: flex;
48 | align-items: center;
49 | margin-top: 20px;
50 | }
51 | .container .range-box input {
52 | width: 100%;
53 | height: 5px;
54 | accent-color: steelblue;
55 | cursor: pointer;
56 | }
57 | .container .range-box .slider-number {
58 | min-width: 30px;
59 | text-align: right;
60 | font-size: 17px;
61 | color: #707070;
62 | }
63 | .container button {
64 | width: 100%;
65 | color: #fff;
66 | padding: 12px 0;
67 | margin-top: 20px;
68 | background: steelblue;
69 | border: none;
70 | border-radius: 8px;
71 | cursor: pointer;
72 | transition: all 0.2s ease;
73 | }
74 |
--------------------------------------------------------------------------------
/project-8_password_generator/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
16 |
17 | Password Generator
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | 8
28 |
29 |
30 | Generate Password
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/project-8_password_generator/js/index.js:
--------------------------------------------------------------------------------
1 | // Selecting Element
2 | const passwordInput = document.getElementById("passwordInput");
3 | const copyBtn = document.getElementById("copy-btn");
4 | const rangeSlider = document.getElementById("range");
5 | const sliderNumber = document.getElementById("slider-number");
6 | const generatBtn = document.getElementById("generate-button");
7 |
8 | //Generate Password Function
9 | const generatePass = () => {
10 | let newpass = "";
11 | let all =
12 | "abcdefghijklmnopqrstubwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890()[]<>&%@#";
13 | for (let i = 0; i < rangeSlider.value; i++) {
14 | newpass += all[Math.floor(Math.random() * all.length)];
15 | }
16 | passwordInput.value = newpass;
17 | };
18 |
19 | //Calling The Function On Page Load
20 | generatePass();
21 |
22 | //Copy Button Click Event Handle
23 | copyBtn.addEventListener("click", () => {
24 | passwordInput.select();
25 | document.execCommand("copy");
26 | //Change The Icon After Copy
27 | copyBtn.setAttribute("class", "far fa-clipboard");
28 |
29 | });
30 |
31 | //Slider Slide Input Event Handle
32 | rangeSlider.addEventListener("input", () => {
33 | sliderNumber.textContent = rangeSlider.value;
34 | });
35 |
36 | //Genearte Button Click Event Handle
37 | generatBtn.addEventListener("click", generatePass);
38 |
--------------------------------------------------------------------------------
/project-9_responsive_navbar/css/index.css:
--------------------------------------------------------------------------------
1 | /* Import font */
2 | @import url("https://fonts.googleapis.com/css2?family=Poppins&display=swap");
3 | * {
4 | margin: 0;
5 | padding: 0;
6 | box-sizing: border-box;
7 | }
8 | body {
9 | height: 100vh;
10 | background: #047aed;
11 | font-family: "Poppins", sans-serif;
12 | }
13 | .navbar {
14 | width: 100vw;
15 | height: 74px;
16 | background-color: #1b1b1b;
17 | display: flex;
18 | justify-content: space-between;
19 | align-items: center;
20 | padding: 0 20px;
21 | }
22 | .navbar .logo {
23 | color: #fff;
24 | font-weight: 300;
25 | }
26 | .navbar .logo h1 span {
27 | color: red;
28 | }
29 | .navbar #toggler {
30 | display: none;
31 | }
32 |
33 | .navbar .burger {
34 | position: relative;
35 | width: 56px;
36 | height: 55px;
37 | border-radius: 3px;
38 | cursor: pointer;
39 | display: none;
40 | }
41 |
42 | .navbar .bun {
43 | position: absolute;
44 | width: 30px;
45 | height: 30px;
46 | top: 9px;
47 | left: 9px;
48 | transition: transform 0.18s cubic-bezier(0.04, 0.04, 0.12, 0.96) 0.15s;
49 | }
50 |
51 | .navbar .bun__crust {
52 | position: absolute;
53 | display: block;
54 | width: 17px;
55 | height: 1px;
56 | background-color: #fff;
57 | border-radius: 1px;
58 | left: 7px;
59 | transition: transform 0.1596s cubic-bezier(0.52, 0.16, 0.52, 0.84) 0.2s;
60 | }
61 |
62 | .navbar .bun__crust--top {
63 | top: 14px;
64 |
65 | transform: translateY(-3px);
66 | }
67 |
68 | .navbar .bun__crust--bottom {
69 | bottom: 14px;
70 |
71 | transform: translateY(3px);
72 | }
73 |
74 | .navbar #toggler:checked + .burger .bun--top {
75 | transform: rotate(45deg);
76 | }
77 |
78 | .navbar #toggler:checked + .burger .bun--bottom {
79 | transform: rotate(-45deg);
80 | }
81 |
82 | .navbar #toggler:checked + .burger .bun__crust--top,
83 | .navbar #toggler:checked + .burger .bun__crust--bottom {
84 | transform: none;
85 | transition: transform 0.1806s cubic-bezier(0.04, 0.04, 0.12, 0.96);
86 | }
87 | .navbar #toggler:checked ~ ul {
88 | left: 50%;
89 | }
90 | .navbar ul {
91 | display: flex;
92 | list-style-type: none;
93 | transition: 0.4s ease-in-out;
94 | }
95 | .navbar ul li {
96 | padding: 0 20px;
97 | }
98 | .navbar ul li a {
99 | text-decoration: none;
100 | color: #fff;
101 | }
102 | .navbar ul li a:hover {
103 | color: red;
104 | }
105 |
106 | /*For Responsiveness */
107 | @media (max-width: 760px) {
108 | .navbar .burger {
109 | display: block;
110 | }
111 | .navbar ul {
112 | position: absolute;
113 | flex-direction: column;
114 | align-items: center;
115 | top: 74px;
116 | left: -100%;
117 | transform: translateX(-50%);
118 |
119 | width: 100%;
120 | background: #1b1b1b;
121 | }
122 | .navbar ul li {
123 | margin: 1.5rem 0;
124 | }
125 | }
126 |
--------------------------------------------------------------------------------
/project-9_responsive_navbar/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Responsive Navbar
10 |
11 |
12 |
13 |
14 |
P ortfolio
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/project-9_responsive_navbar/js/index.js:
--------------------------------------------------------------------------------
1 | //in this project we've not used javascript
2 |
--------------------------------------------------------------------------------
/sitemap.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | https://armanidrisi.github.io/frontend-projects/
5 |
6 |
7 | https://armanidrisi.github.io/frontend-projects/project-18_toggle_dark_light_mode
8 |
9 |
10 | https://armanidrisi.github.io/frontend-projects/project-17_remove_Signature_bg
11 |
12 |
13 | https://armanidrisi.github.io/frontend-projects/project-16_pricing_component
14 |
15 |
16 | https://armanidrisi.github.io/frontend-projects/project-15_currrency_convertor
17 |
18 |
19 | https://armanidrisi.github.io/frontend-projects/project-14_music_loader
20 |
21 |
22 | https://armanidrisi.github.io/frontend-projects/project-13_profile_card
23 |
24 |
25 | https://armanidrisi.github.io/frontend-projects/project-12_contact_form
26 |
27 |
28 | https://armanidrisi.github.io/frontend-projects/project-11_analog_clock
29 |
30 |
31 | https://armanidrisi.github.io/frontend-projects/project-10_404_error_page
32 |
33 |
34 | https://armanidrisi.github.io/frontend-projects/project-9_responsive_navbar
35 |
36 |
37 | https://armanidrisi.github.io/frontend-projects/project-8_password_generator
38 |
39 |
40 | https://armanidrisi.github.io/frontend-projects/project-6_qr_code_generator
41 |
42 |
43 | https://armanidrisi.github.io/frontend-projects/project-7_stopwatch_timer
44 |
45 |
46 | https://armanidrisi.github.io/frontend-projects/project-5_random_color_changer
47 |
48 |
49 | https://armanidrisi.github.io/frontend-projects/project-4_random_quote_generator
50 |
51 |
52 | https://armanidrisi.github.io/frontend-projects/project-3_wavy_login_form
53 |
54 |
55 | https://armanidrisi.github.io/frontend-projects/project-2_calculator
56 |
57 |
58 | https://armanidrisi.github.io/frontend-projects/project-1_landing-page
59 |
60 |
--------------------------------------------------------------------------------