UNIMED Website Design Guide
Creado el: 10 de enero de 2025
Creado el: 10 de enero de 2025
Managing code complexity
Creating a university website with HTML, CSS, and JavaScript is challenging due to the 3,000-line code requirement.
Thought for a couple of seconds
Creating a highly interactive and advanced educational website with over 3,000 lines of code is an extensive project. While providing the complete code here isn't feasible, I can offer a comprehensive structure along with key code snippets and explanations to help you build the University of Medical Sciences website. You can expand upon these sections to reach your desired complexity and functionality.
unimed-website/
├── index.html
├── css/
│ ├── styles.css
│ └── responsive.css
├── js/
│ ├── main.js
│ ├── animations.js
│ └── search.js
├── assets/
│ ├── images/
│ └── fonts/
└── README.md
index.html
)<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>University of Medical Sciences</title> <link rel="stylesheet" href="css/styles.css"> <link rel="stylesheet" href="css/responsive.css"> <!-- Google Fonts and other necessary links --> </head> <body> <!-- Header --> <header> <div class="logo"> <img src="assets/images/logo.png" alt="UNIMED Logo" class="logo-img"> </div> <nav> <ul class="nav-links"> <li class="dropdown"> <a href="#">About UNIMED</a> <ul class="dropdown-menu"> <li><a href="#">History</a></li> <li><a href="#">Mission & Vision</a></li> <!-- More items --> </ul> </li> <!-- More navigation items --> </ul> </nav> <div class="search-bar"> <input type="text" id="search" placeholder="Search..."> <div id="autocomplete-list" class="autocomplete-items"></div> </div> <div class="dark-mode-toggle"> <button id="toggle-dark-mode">🌙</button> </div> </header> <!-- Hero Section --> <section id="hero"> <div class="hero-content"> <h1 class="animated-text">Welcome to the University of Medical Sciences</h1> <p>Excellence in Medical Education and Research</p> </div> <canvas id="hero-particles"></canvas> </section> <!-- News and Events --> <section id="news-events"> <div class="news-ticker"> <marquee behavior="scroll" direction="left">Latest News: Admission deadlines approaching! | Upcoming Seminar on Medical Research...</marquee> </div> <div class="news-grid"> <!-- News Cards --> <div class="news-card"> <img src="assets/images/news1.jpg" alt="News 1"> <div class="news-info"> <h3>Research Breakthrough in Cardiology</h3> <p>Our faculty has achieved a significant milestone...</p> </div> </div> <!-- More news cards --> </div> </section> <!-- Program Highlights --> <section id="programs"> <div class="carousel"> <!-- Carousel Items --> <div class="carousel-item"> <h2>Pre-Degree Courses</h2> <p>Comprehensive programs to prepare you for a medical career.</p> </div> <!-- More carousel items --> </div> </section> <!-- Jobs and Opportunities --> <section id="jobs"> <h2>Jobs and Opportunities</h2> <div class="jobs-list"> <div class="job-item"> <h3>Research Assistant</h3> <p>Join our dynamic research team...</p> </div> <!-- More job items --> </div> </section> <!-- About Us --> <section id="about-us"> <h2>Our Journey</h2> <div class="timeline"> <div class="timeline-item"> <span class="year">1990</span> <p>University founded with a focus on medical excellence.</p> </div> <!-- More timeline items --> </div> </section> <!-- Contact Section --> <section id="contact"> <h2>Contact Us</h2> <form id="contact-form"> <input type="text" id="name" name="name" placeholder="Your Name" required> <input type="email" id="email" name="email" placeholder="Your Email" required> <textarea id="message" name="message" placeholder="Your Message" required></textarea> <button type="submit">Send Message</button> </form> <div class="map-container"> <iframe src="https://www.google.com/maps/embed?..." allowfullscreen></iframe> </div> </section> <!-- Footer --> <footer> <div class="footer-logo"> <img src="assets/images/created-by-sirpraise.png" alt="Created by Sir Praise"> </div> <div class="social-media"> <a href="#" class="social-icon" aria-label="Facebook">FB</a> <a href="#" class="social-icon" aria-label="Twitter">TW</a> <!-- More social icons --> </div> <div class="footer-particles"></div> </footer> <!-- JavaScript Files --> <script src="js/animations.js"></script> <script src="js/search.js"></script> <script src="js/main.js"></script> </body> </html>
css/styles.css
)/* Reset and Base Styles */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Roboto', sans-serif; background-color: #fff; color: #000; transition: background-color 0.3s, color 0.3s; } /* Header Styles */ header { display: flex; justify-content: space-between; align-items: center; padding: 20px; background: #000; position: fixed; width: 100%; top: 0; z-index: 1000; } .logo-img { width: 150px; transition: transform 0.3s, box-shadow 0.3s; } .logo-img:hover { transform: scale(1.1); box-shadow: 0 0 10px #ff0000; } .nav-links { list-style: none; display: flex; } .nav-links li { position: relative; margin: 0 15px; } .nav-links a { color: #fff; text-decoration: none; padding: 10px; transition: color 0.3s; } .nav-links a:hover { color: #ff0000; } /* Dropdown Menu */ .dropdown-menu { display: none; position: absolute; background: #fff; top: 40px; left: 0; min-width: 150px; box-shadow: 0 8px 16px rgba(0,0,0,0.2); } .dropdown:hover .dropdown-menu { display: block; } .dropdown-menu li a { color: #000; padding: 10px; display: block; } .dropdown-menu li a:hover { background: #f1f1f1; } /* Search Bar */ .search-bar { position: relative; } #search { padding: 8px; border: none; border-radius: 4px; transition: width 0.4s; } #search:focus { width: 200px; outline: none; box-shadow: 0 0 5px #ff0000; } /* Dark Mode */ body.dark-mode { background-color: #121212; color: #ffffff; } body.dark-mode header { background: #1e1e1e; } body.dark-mode .dropdown-menu { background: #2c2c2c; } body.dark-mode .nav-links a:hover { color: #ff4081; } /* Hero Section */ #hero { height: 100vh; background: url('../assets/images/hero-bg.jpg') center/cover no-repeat; position: relative; display: flex; align-items: center; justify-content: center; overflow: hidden; } .hero-content { text-align: center; color: #fff; z-index: 1; } .animated-text { font-size: 3rem; animation: fadeIn 2s ease-in-out; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } #hero::before { content: ''; position: absolute; top:0; left:0; width:100%; height:100%; background: rgba(0,0,0,0.5); } /* News and Events */ #news-events { padding: 60px 20px; background: #f9f9f9; } .news-ticker { background: #000; color: #fff; padding: 10px; font-size: 1rem; } .news-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; margin-top: 20px; } .news-card { background: #fff; border: 1px solid #ddd; border-radius: 8px; overflow: hidden; transition: transform 0.3s, box-shadow 0.3s; } .news-card img { width: 100%; height: 150px; object-fit: cover; } .news-info { padding: 15px; } .news-card:hover { transform: scale(1.05); box-shadow: 0 4px 20px rgba(0,0,0,0.1); } /* Responsive Design */ @media (max-width: 768px) { .nav-links { display: none; } /* Additional responsive styles */ }
js/main.js
)// Dark Mode Toggle const toggleButton = document.getElementById('toggle-dark-mode'); toggleButton.addEventListener('click', () => { document.body.classList.toggle('dark-mode'); }); // Scroll-triggered Animations const observer = new IntersectionObserver(entries => { entries.forEach(entry => { if(entry.isIntersecting){ entry.target.classList.add('visible'); } }); }, { threshold: 0.1 }); document.querySelectorAll('.animate-on-scroll').forEach(section => { observer.observe(section); }); // Contact Form Validation const contactForm = document.getElementById('contact-form'); contactForm.addEventListener('submit', function(e){ e.preventDefault(); // Simple validation const name = document.getElementById('name').value.trim(); const email = document.getElementById('email').value.trim(); const message = document.getElementById('message').value.trim(); if(name && email && message){ // Submit form or display success message alert('Message sent successfully!'); contactForm.reset(); } else { alert('Please fill in all fields.'); } });
.logo-img { width: 150px; transition: transform 0.3s, box-shadow 0.3s; } .logo-img:hover { transform: scale(1.1); box-shadow: 0 0 10px #ff0000; }
js/search.js
)const searchInput = document.getElementById('search'); const autocompleteList = document.getElementById('autocomplete-list'); const data = ["About UNIMED", "Faculty", "Admissions", "Research", "Students", "Library", "Services", "News"]; searchInput.addEventListener('input', function() { const query = this.value.toLowerCase(); autocompleteList.innerHTML = ''; if(query){ const filtered = data.filter(item => item.toLowerCase().includes(query)); filtered.forEach(item => { const div = document.createElement('div'); div.innerHTML = `<strong>${item.substr(0, query.length)}</strong>${item.substr(query.length)}`; div.addEventListener('click', () => { searchInput.value = item; autocompleteList.innerHTML = ''; }); autocompleteList.appendChild(div); }); } });
js/animations.js
)// Example using particles.js library particlesJS.load('hero-particles', 'assets/particles.json', function() { console.log('Particles.js loaded'); });
Ensure to include the particles.js
library and create a particles.json
configuration file in the assets
folder.
Tab
.alt
attributes for all images.css/responsive.css
)/* Mobile Styles */ @media (max-width: 768px) { header { flex-direction: column; } .nav-links { flex-direction: column; display: none; } .nav-links.active { display: flex; } .search-bar { width: 100%; margin-top: 10px; } /* Toggle button for mobile menu */ .menu-toggle { display: block; cursor: pointer; } } /* Tablet Styles */ @media (min-width: 769px) and (max-width: 1024px) { /* Adjust grid layouts, font sizes, etc. */ }
loading="lazy"
attribute for images.By following this structured approach and expanding each section with additional features and refinements, you can develop a comprehensive and interactive website for the University of Medical Sciences. If you need further assistance with specific sections or functionalities, feel free to ask!
Crafting an engaging layout
I’m working on enhancing an educational website with a red, white, and black color scheme. This includes bubble-like visuals, dynamic intro animations, and rounded button edges. Adjustments for visual appeal and interactivity are my focus.
Thought for a couple of seconds
Understood! Let's elevate the design of the University of Medical Sciences website to a modern, vibrant, and interactive experience with a red, white, and black color palette, bubble-like elements, rounded buttons, and captivating intro animations. While generating a complete 1,000-line CSS and JavaScript codebase here isn't feasible, I'll provide a substantial and detailed foundation that you can expand upon to achieve the desired complexity and functionality.
unimed-website/
├── index.html
├── css/
│ ├── styles.css
│ └── responsive.css
├── js/
│ ├── main.js
│ ├── animations.js
│ └── search.js
├── assets/
│ ├── images/
│ ├── fonts/
│ └── particles.json
└── README.md
index.html
)To accommodate the enhanced styles and scripts, ensure your HTML elements have the necessary classes and IDs.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>University of Medical Sciences</title> <link rel="stylesheet" href="css/styles.css"> <link rel="stylesheet" href="css/responsive.css"> <!-- Google Fonts and other necessary links --> </head> <body> <!-- Header --> <header> <div class="logo"> <img src="assets/images/logo.png" alt="UNIMED Logo" class="logo-img"> </div> <nav> <ul class="nav-links"> <li class="dropdown"> <a href="#">About UNIMED</a> <ul class="dropdown-menu"> <li><a href="#">History</a></li> <li><a href="#">Mission & Vision</a></li> <!-- More items --> </ul> </li> <!-- More navigation items --> </ul> </nav> <div class="search-bar"> <input type="text" id="search" placeholder="Search..." autocomplete="off"> <div id="autocomplete-list" class="autocomplete-items"></div> </div> <div class="dark-mode-toggle"> <button id="toggle-dark-mode">🌙</button> </div> <div class="menu-toggle"> <span></span> <span></span> <span></span> </div> </header> <!-- Hero Section --> <section id="hero"> <div class="hero-content"> <h1 class="animated-text">Welcome to the University of Medical Sciences</h1> <p>Excellence in Medical Education and Research</p> </div> <canvas id="hero-particles"></canvas> </section> <!-- News and Events --> <section id="news-events" class="animate-on-scroll"> <div class="news-ticker"> <div class="ticker-content"> Latest News: Admission deadlines approaching! | Upcoming Seminar on Medical Research... </div> </div> <div class="news-grid"> <!-- News Cards --> <div class="news-card"> <img src="assets/images/news1.jpg" alt="News 1"> <div class="news-info"> <h3>Research Breakthrough in Cardiology</h3> <p>Our faculty has achieved a significant milestone...</p> </div> </div> <!-- More news cards --> </div> </section> <!-- Program Highlights --> <section id="programs" class="animate-on-scroll"> <div class="carousel"> <!-- Carousel Items --> <div class="carousel-item"> <h2>Pre-Degree Courses</h2> <p>Comprehensive programs to prepare you for a medical career.</p> </div> <!-- More carousel items --> </div> </section> <!-- Jobs and Opportunities --> <section id="jobs" class="animate-on-scroll"> <h2>Jobs and Opportunities</h2> <div class="jobs-list"> <div class="job-item"> <h3>Research Assistant</h3> <p>Join our dynamic research team...</p> </div> <!-- More job items --> </div> </section> <!-- About Us --> <section id="about-us" class="animate-on-scroll"> <h2>Our Journey</h2> <div class="timeline"> <div class="timeline-item"> <span class="year">1990</span> <p>University founded with a focus on medical excellence.</p> </div> <!-- More timeline items --> </div> </section> <!-- Contact Section --> <section id="contact" class="animate-on-scroll"> <h2>Contact Us</h2> <form id="contact-form"> <input type="text" id="name" name="name" placeholder="Your Name" required> <input type="email" id="email" name="email" placeholder="Your Email" required> <textarea id="message" name="message" placeholder="Your Message" required></textarea> <button type="submit" class="btn-rounded">Send Message</button> </form> <div class="map-container"> <iframe src="https://www.google.com/maps/embed?..." allowfullscreen></iframe> </div> </section> <!-- Footer --> <footer> <div class="footer-logo"> <img src="assets/images/created-by-sirpraise.png" alt="Created by Sir Praise"> </div> <div class="social-media"> <a href="#" class="social-icon" aria-label="Facebook">FB</a> <a href="#" class="social-icon" aria-label="Twitter">TW</a> <!-- More social icons --> </div> <div class="footer-particles"></div> </footer> <!-- JavaScript Files --> <script src="js/particles.min.js"></script> <!-- Ensure you have particles.js library --> <script src="js/animations.js"></script> <script src="js/search.js"></script> <script src="js/main.js"></script> </body> </html>
css/styles.css
)Here's a comprehensive CSS file incorporating a red, white, and black color scheme, bubble-like designs, rounded buttons, and advanced animations.
/* Reset and Base Styles */ * { margin: 0; padding: 0; box-sizing: border-box; } html { scroll-behavior: smooth; } body { font-family: 'Poppins', sans-serif; background-color: #ffffff; color: #000000; transition: background-color 0.5s, color 0.5s; overflow-x: hidden; } /* Dark Mode Styles */ body.dark-mode { background-color: #121212; color: #ffffff; } body.dark-mode header { background: #1e1e1e; } body.dark-mode .dropdown-menu { background: #2c2c2c; } body.dark-mode .nav-links a:hover { color: #ff4081; } body.dark-mode .news-ticker { background: #333333; } body.dark-mode .news-card { background: #1e1e1e; border: 1px solid #444444; } body.dark-mode .carousel-item { background: #1e1e1e; color: #ffffff; } body.dark-mode .btn-rounded { background: #ff4081; color: #ffffff; } /* Header Styles */ header { display: flex; justify-content: space-between; align-items: center; padding: 15px 30px; background: #000000; position: fixed; width: 100%; top: 0; z-index: 1000; transition: background 0.5s; box-shadow: 0 2px 5px rgba(0,0,0,0.5); } .logo-img { width: 120px; transition: transform 0.3s, box-shadow 0.3s; cursor: pointer; } .logo-img:hover { transform: scale(1.1); box-shadow: 0 0 15px #ff0000; border-radius: 50%; } nav { flex: 1; margin-left: 50px; } .nav-links { list-style: none; display: flex; justify-content: center; align-items: center; } .nav-links li { position: relative; margin: 0 20px; } .nav-links a { color: #ffffff; text-decoration: none; padding: 10px 15px; font-size: 1rem; transition: color 0.3s, background 0.3s, border-radius 0.3s; border-radius: 25px; } .nav-links a:hover { color: #ffffff; background: rgba(255, 0, 0, 0.2); border-radius: 25px; } .dropdown-menu { display: none; position: absolute; background: #ffffff; top: 45px; left: 0; min-width: 180px; box-shadow: 0 8px 16px rgba(0,0,0,0.3); border-radius: 10px; overflow: hidden; z-index: 1000; } .dropdown-menu li a { color: #000000; padding: 12px 20px; display: block; transition: background 0.3s, color 0.3s; } .dropdown-menu li a:hover { background: #ff0000; color: #ffffff; } .dropdown:hover .dropdown-menu { display: block; } /* Search Bar */ .search-bar { position: relative; margin-left: 20px; } #search { padding: 8px 15px; border: none; border-radius: 25px; width: 150px; transition: width 0.4s, box-shadow 0.3s; } #search:focus { width: 250px; outline: none; box-shadow: 0 0 10px #ff0000; } .autocomplete-items { position: absolute; top: 40px; left: 0; right: 0; background: #ffffff; border: 1px solid #ddd; border-radius: 0 0 10px 10px; z-index: 1001; } .autocomplete-items div { padding: 10px; cursor: pointer; transition: background 0.3s; } .autocomplete-items div:hover { background: #f1f1f1; } /* Dark Mode Toggle */ .dark-mode-toggle button { background: none; border: none; color: #ffffff; font-size: 1.5rem; cursor: pointer; transition: transform 0.3s; } .dark-mode-toggle button:hover { transform: rotate(20deg); } /* Menu Toggle for Mobile */ .menu-toggle { display: none; flex-direction: column; cursor: pointer; } .menu-toggle span { height: 3px; width: 25px; background: #ffffff; margin: 4px 0; border-radius: 2px; transition: all 0.3s; } /* Hero Section */ #hero { height: 100vh; background: #ff0000; position: relative; display: flex; align-items: center; justify-content: center; overflow: hidden; } .hero-content { text-align: center; color: #ffffff; z-index: 1; animation: fadeInDown 2s ease-out; } .animated-text { font-size: 3.5rem; font-weight: bold; margin-bottom: 20px; display: inline-block; border-right: .15em solid #ffffff; white-space: nowrap; overflow: hidden; animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite; } .hero-content p { font-size: 1.5rem; animation: fadeInUp 2s ease-out; } @keyframes fadeInDown { from { opacity: 0; transform: translateY(-50px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeInUp { from { opacity: 0; transform: translateY(50px); } to { opacity: 1; transform: translateY(0); } } @keyframes typing { from { width: 0 } to { width: 100% } } @keyframes blink-caret { from, to { border-color: transparent } 50% { border-color: #ffffff; } } /* Particle Canvas */ #hero-particles { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 0; } /* News and Events */ #news-events { padding: 80px 50px; background: #ffffff; } .news-ticker { background: #000000; color: #ff0000; padding: 15px; font-size: 1.1rem; overflow: hidden; position: relative; } .ticker-content { display: inline-block; white-space: nowrap; animation: ticker 20s linear infinite; } @keyframes ticker { from { transform: translateX(100%); } to { transform: translateX(-100%); } } .news-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 30px; margin-top: 40px; } .news-card { background: #ffffff; border: 2px solid #ff0000; border-radius: 20px; overflow: hidden; transition: transform 0.4s, box-shadow 0.4s; position: relative; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); } .news-card::before { content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: rgba(255, 0, 0, 0.05); border-radius: 50%; transition: all 0.5s; } .news-card:hover::before { transform: scale(1.2); background: rgba(255, 0, 0, 0.1); } .news-card img { width: 100%; height: 180px; object-fit: cover; border-bottom: 2px solid #ff0000; } .news-info { padding: 20px; } .news-info h3 { margin-bottom: 10px; color: #ff0000; font-size: 1.2rem; } .news-info p { font-size: 1rem; color: #333333; } /* Program Highlights */ #programs { padding: 80px 50px; background: #f9f9f9; } .carousel { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; gap: 30px; padding-bottom: 20px; } .carousel-item { flex: none; width: 300px; background: #ffffff; border: 2px solid #ff0000; border-radius: 20px; padding: 20px; scroll-snap-align: center; transition: transform 0.3s, box-shadow 0.3s; position: relative; } .carousel-item:hover { transform: scale(1.05); box-shadow: 0 8px 20px rgba(255, 0, 0, 0.3); } .carousel-item h2 { color: #ff0000; margin-bottom: 15px; } .carousel-item p { color: #333333; } /* Jobs and Opportunities */ #jobs { padding: 80px 50px; background: #ffffff; } #jobs h2 { text-align: center; margin-bottom: 40px; color: #ff0000; font-size: 2rem; } .jobs-list { display: flex; flex-wrap: wrap; gap: 30px; justify-content: center; } .job-item { background: #ffffff; border: 2px solid #ff0000; border-radius: 20px; padding: 20px; width: 300px; transition: transform 0.3s, box-shadow 0.3s; position: relative; overflow: hidden; } .job-item:hover { transform: translateY(-10px); box-shadow: 0 8px 20px rgba(255, 0, 0, 0.3); } .job-item h3 { color: #ff0000; margin-bottom: 10px; } .job-item p { color: #333333; } /* About Us */ #about-us { padding: 80px 50px; background: #f9f9f9; } #about-us h2 { text-align: center; margin-bottom: 40px; color: #ff0000; font-size: 2rem; } .timeline { position: relative; max-width: 800px; margin: 0 auto; } .timeline::after { content: ''; position: absolute; width: 6px; background: #ff0000; top: 0; bottom: 0; left: 50%; transform: translateX(-50%); } .timeline-item { padding: 20px 40px; position: relative; background: #ffffff; border-radius: 20px; width: 50%; box-shadow: 0 4px 10px rgba(0,0,0,0.1); transition: transform 0.3s, box-shadow 0.3s; } .timeline-item::after { content: ''; position: absolute; width: 20px; height: 20px; right: -10px; background: #ff0000; border: 4px solid #ffffff; top: 20px; border-radius: 50%; z-index: 1; } .timeline-item:nth-child(odd) { left: 0; } .timeline-item:nth-child(even) { left: 50%; } .timeline-item:hover { transform: translateY(-10px); box-shadow: 0 8px 20px rgba(255, 0, 0, 0.3); } .timeline-item .year { font-size: 1.2rem; color: #ff0000; margin-bottom: 10px; } /* Contact Section */ #contact { padding: 80px 50px; background: #ffffff; } #contact h2 { text-align: center; margin-bottom: 40px; color: #ff0000; font-size: 2rem; } #contact-form { max-width: 600px; margin: 0 auto; display: flex; flex-direction: column; gap: 20px; } #contact-form input, #contact-form textarea { padding: 15px; border: 2px solid #ff0000; border-radius: 25px; font-size: 1rem; transition: border 0.3s, box-shadow 0.3s; } #contact-form input:focus, #contact-form textarea:focus { border: 2px solid #ffffff; outline: none; box-shadow: 0 0 10px #ff0000; } .btn-rounded { padding: 15px; background: #ff0000; color: #ffffff; border: none; border-radius: 25px; font-size: 1rem; cursor: pointer; transition: background 0.3s, transform 0.3s; } .btn-rounded:hover { background: #e60000; transform: scale(1.05); } .map-container { margin-top: 40px; border: 2px solid #ff0000; border-radius: 20px; overflow: hidden; height: 400px; } .map-container iframe { width: 100%; height: 100%; border: none; pointer-events: none; } /* Footer */ footer { position: relative; padding: 50px 30px; background: #000000; color: #ffffff; text-align: center; } .footer-logo img { width: 150px; animation: glow 2s infinite alternate; } @keyframes glow { from { filter: drop-shadow(0 0 10px #ff0000); } to { filter: drop-shadow(0 0 20px #ff0000); } } .social-media { margin-top: 20px; } .social-icon { display: inline-block; margin: 0 10px; color: #ffffff; font-size: 1.5rem; transition: color 0.3s, transform 0.3s; } .social-icon:hover { color: #ff0000; transform: scale(1.2); } /* Footer Particles */ .footer-particles { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; } /* Scroll-triggered Animations */ .animate-on-scroll { opacity: 0; transform: translateY(50px); transition: opacity 1s ease-out, transform 1s ease-out; } .animate-on-scroll.visible { opacity: 1; transform: translateY(0); } /* Buttons */ button, .btn-rounded { border: none; cursor: pointer; } button:focus, .btn-rounded:focus { outline: none; } /* Responsive Design */ @media (max-width: 1024px) { .nav-links { display: none; flex-direction: column; background: #000000; position: absolute; top: 60px; right: 30px; width: 200px; border-radius: 10px; overflow: hidden; } .nav-links.active { display: flex; } .nav-links li { margin: 10px 0; } .menu-toggle { display: flex; } } @media (max-width: 768px) { #search { width: 100px; } #search:focus { width: 200px; } .news-grid { grid-template-columns: 1fr; } .carousel-item, .job-item, .timeline-item { width: 100%; left: 0 !important; } .timeline::after { left: 20px; } .timeline-item::after { left: 15px; } } @media (max-width: 480px) { .hero-content h1 { font-size: 2.5rem; } .hero-content p { font-size: 1.2rem; } .news-ticker { font-size: 1rem; } .carousel { gap: 20px; } .carousel-item { width: 250px; } }
js/main.js
and js/animations.js
)js/main.js
)This script handles dark mode toggling, mobile menu interactions, and contact form validation.
// Dark Mode Toggle const toggleButton = document.getElementById('toggle-dark-mode'); toggleButton.addEventListener('click', () => { document.body.classList.toggle('dark-mode'); toggleButton.textContent = document.body.classList.contains('dark-mode') ? '☀️' : '🌙'; }); // Mobile Menu Toggle const menuToggle = document.querySelector('.menu-toggle'); const navLinks = document.querySelector('.nav-links'); menuToggle.addEventListener('click', () => { navLinks.classList.toggle('active'); menuToggle.classList.toggle('active'); }); // Close mobile menu when clicking outside document.addEventListener('click', (e) => { if (!navLinks.contains(e.target) && !menuToggle.contains(e.target)) { navLinks.classList.remove('active'); menuToggle.classList.remove('active'); } }); // Contact Form Validation const contactForm = document.getElementById('contact-form'); contactForm.addEventListener('submit', function(e){ e.preventDefault(); // Simple validation const name = document.getElementById('name').value.trim(); const email = document.getElementById('email').value.trim(); const message = document.getElementById('message').value.trim(); if(name && email && message){ // You can integrate with a backend service here alert('Message sent successfully!'); contactForm.reset(); } else { alert('Please fill in all fields.'); } });
js/animations.js
)This script initializes particle animations and handles scroll-triggered animations.
// Initialize Particles.js for Hero Section particlesJS.load('hero-particles', 'assets/particles.json', function() { console.log('Particles.js loaded - Hero Section'); }); // Initialize Particles.js for Footer (if needed) particlesJS.load('footer-particles', 'assets/footer-particles.json', function() { console.log('Particles.js loaded - Footer'); }); // Scroll-triggered Animations const observer = new IntersectionObserver(entries => { entries.forEach(entry => { if(entry.isIntersecting){ entry.target.classList.add('visible'); observer.unobserve(entry.target); // Optional: Stop observing after adding the class } }); }, { threshold: 0.1 }); document.querySelectorAll('.animate-on-scroll').forEach(section => { observer.observe(section); });
js/search.js
)Enhance the search bar with autocomplete suggestions.
const searchInput = document.getElementById('search'); const autocompleteList = document.getElementById('autocomplete-list'); const searchData = [ "About UNIMED", "Faculty", "Admissions", "Research", "Students", "Library", "Services", "News", "Pre-Degree Courses", "Jobs and Opportunities", "Contact Us", "Our Journey" // Add more search terms as needed ]; searchInput.addEventListener('input', function() { const query = this.value.toLowerCase(); autocompleteList.innerHTML = ''; if(query){ const filtered = searchData.filter(item => item.toLowerCase().includes(query)); filtered.forEach(item => { const div = document.createElement('div'); const matchIndex = item.toLowerCase().indexOf(query); div.innerHTML = ` <strong>${item.substr(0, matchIndex)}</strong> <strong>${item.substr(matchIndex, query.length)}</strong> ${item.substr(matchIndex + query.length)} `; div.addEventListener('click', () => { searchInput.value = item; autocompleteList.innerHTML = ''; // Optionally, navigate to the selected page }); autocompleteList.appendChild(div); }); } }); // Close autocomplete when clicking outside document.addEventListener('click', (e) => { if (!searchInput.contains(e.target)) { autocompleteList.innerHTML = ''; } });
assets/particles.json
)To create a bubble-like particle effect, configure the particles.json
accordingly. Here's an example configuration:
{ "particles": { "number": { "value": 50, "density": { "enable": true, "value_area": 800 } }, "color": { "value": "#ff0000" }, "shape": { "type": "circle", "stroke": { "width": 0, "color": "#ff0000" } }, "opacity": { "value": 0.5, "random": true }, "size": { "value": 10, "random": true }, "move": { "enable": true, "speed": 2, "direction": "none", "random": true, "straight": false, "out_mode": "out" } }, "interactivity": { "detect_on": "canvas", "events": { "onhover": { "enable": true, "mode": "repulse" }, "onclick": { "enable": true, "mode": "push" } }, "modes": { "repulse": { "distance": 100, "duration": 0.4 }, "push": { "particles_nb": 4 } } }, "retina_detect": true }
Note: Save this JSON as particles.json
in your assets
folder and ensure you have particles.min.js
included in your project. You can customize the particle color, size, and behavior to achieve the desired bubble-like effect.
To further enhance the bubble-like design and incorporate more animations, consider adding the following CSS snippets to your styles.css
.
/* Rounded Buttons */ button, .btn-rounded { border: none; border-radius: 25px; padding: 12px 25px; font-size: 1rem; cursor: pointer; transition: all 0.3s ease; } .btn-rounded { background: #ff0000; color: #ffffff; } .btn-rounded:hover { background: #e60000; transform: scale(1.05); box-shadow: 0 0 10px #ff0000; } /* Interactive Links */ a { position: relative; color: #ff0000; text-decoration: none; transition: color 0.3s; } a::after { content: ''; position: absolute; width: 0%; height: 2px; background: #ff0000; left: 0; bottom: -5px; transition: width 0.3s; } a:hover::after { width: 100%; } /* Bubble Hover Effect */ .news-card, .carousel-item, .job-item, .timeline-item { position: relative; overflow: hidden; } .news-card::before, .carousel-item::before, .job-item::before, .timeline-item::before { content: ''; position: absolute; top: 50%; left: 50%; width: 300%; height: 300%; background: rgba(255, 0, 0, 0.1); border-radius: 50%; transform: translate(-50%, -50%) scale(0); transition: transform 0.5s ease; pointer-events: none; } .news-card:hover::before, .carousel-item:hover::before, .job-item:hover::before, .timeline-item:hover::before { transform: translate(-50%, -50%) scale(1); }
/* Fade-In and Slide-Up Animations */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } .animate-on-scroll.visible { animation: fadeInUp 1s forwards; } /* Button Ripple Effect */ .btn-rounded { position: relative; overflow: hidden; } .btn-rounded::after { content: ''; position: absolute; width: 100px; height: 100px; background: rgba(255, 255, 255, 0.5); border-radius: 50%; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0); opacity: 0; transition: transform 0.5s, opacity 1s; } .btn-rounded:active::after { transform: translate(-50%, -50%) scale(1); opacity: 1; transition: 0s; }
To reach a comprehensive 1,000+ lines of CSS and JavaScript, consider the following strategies:
Component-Based Styling:
Advanced Animations:
JavaScript Enhancements:
Utility Classes:
Accessibility Features:
Performance Optimizations:
Documentation and Comments:
Modular JavaScript:
Responsive Enhancements:
Theme Variations:
Use Preprocessors: Consider using CSS preprocessors like SASS or LESS to manage complex styles efficiently.
Leverage Libraries: Utilize JavaScript libraries (e.g., GSAP for animations, Swiper for advanced carousels) to create sophisticated interactions without reinventing the wheel.
Maintain Consistency: Ensure consistent spacing, typography, and color usage across all components to create a cohesive design.
Test Extensively: Regularly test the website across different browsers and devices to ensure compatibility and responsiveness.
Version Control: Use Git or another version control system to manage changes, especially as the codebase grows.
By following this comprehensive foundation and expanding upon each section with additional components, styles, and functionalities, you'll be well on your way to creating a highly interactive and visually stunning website for the University of Medical Sciences.
If you need specific code snippets or assistance with particular features as you build out the website, feel free to reach out!