Photo by Pankaj Patel on Unsplash
Animated Search Form Design Using HTML and CSS
Create a modern, responsive animated search form using HTML and CSS, featuring a text input that expands on focus and a search button with hover scaling effects. This implementation focuses on clean design, smooth CSS animations, accessibility, and maintainable code structure, without requiring JavaScript.
Prerequisites
- Basic HTML and CSS knowledge
- A code editor (e.g., VS Code)
Part 1: Animated Search Form Design
Step 1: HTML Structure (index.html)
Create a semantic HTML structure for the animated search form using a form, input, and button elements.
<form class="search-form" aria-label="Search form">
<input type="search" id="search-input" class="search-form__input" aria-label="Search query" placeholder="Search..." required>
<button type="submit" class="search-form__button" aria-label="Submit search">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
</svg>
</button>
</form>
Step 2: Core CSS Implementation (styles.css)
Style the animated search form with a clean layout, smooth transitions, and responsive design using flexbox and CSS animations.
:root {
--gray-900: #111827;
--gray-800: #1f2937;
--gray-700: #374151;
--gray-200: #e5e7eb;
--gray-50: #f9fafb;
--white: #ffffff;
--primary-600: #2563eb;
--primary-500: #3b82f6;
--primary-400: #60a5fa;
--spacing-xs: 4px;
--spacing-sm: 8px;
--spacing-md: 16px;
--spacing-lg: 24px;
--radius-sm: 4px;
--radius-md: 8px;
--transition: 0.2s ease;
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.search-form {
display: flex;
align-items: center;
background: var(--white);
padding: var(--spacing-sm);
border-radius: var(--radius-md);
box-shadow: var(--shadow-md);
max-width: 400px;
width: 100%;
transition: all var(--transition);
}
.search-form__input {
flex: 1;
padding: var(--spacing-md);
border: 1px solid var(--gray-200);
border-radius: var(--radius-sm);
font-family: var(--font-sans);
font-size: 0.9375rem;
color: var(--gray-900);
background-color: var(--gray-50);
transition: width var(--transition), border-color var(--transition), box-shadow var(--transition);
width: 200px;
box-sizing: border-box;
}
.search-form__input:focus {
outline: none;
border-color: var(--primary-400);
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);
width: 300px;
}
.search-form__button {
padding: var(--spacing-md);
background: var(--primary-500);
color: var(--white);
border: none;
border-radius: var(--radius-sm);
font-size: 0.875rem;
font-weight: 500;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
margin-left: var(--spacing-sm);
transition: background var(--transition), transform var(--transition);
}
.search-form__button:hover {
background: var(--primary-600);
transform: scale(1.05);
}
.search-form__button:active {
transform: scale(1);
}
.search-form__button:focus {
outline: none;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.45);
}
.search-form__button svg {
width: 16px;
height: 16px;
}
@media (max-width: 640px) {
.search-form {
padding: var(--spacing-xs);
}
.search-form__input {
width: 150px;
}
.search-form__input:focus {
width: 200px;
}
.search-form__button {
padding: var(--spacing-sm);
}
}
Explanation
- Form Layout: Uses flexbox to arrange the search input and button horizontally within a card-like container, styled with padding, a shadow, and a max-width of 400px for responsiveness.
- Animations: The input expands from 200px to 300px on focus using a smooth
widthtransition. The button scales up slightly on hover (transform: scale(1.05)) for a subtle effect. - Responsiveness: A media query (
@media (max-width: 640px)) reduces the input width (150px, expanding to 200px on focus) and padding for smaller screens, ensuring usability on mobile devices. - Visual Feedback: The input has a focus state with a blue border and shadow; the button darkens and scales on hover and has a focus outline for accessibility.
- Accessibility:
aria-label,required, and focus states ensure screen reader and keyboard compatibility, with semantic form elements and a high-contrast SVG icon.
Accessibility Features
- Use
form,input type="search", andbuttonfor semantic structure - Ensure proper contrast ratios (4.5:1 minimum)
- Support keyboard navigation with focus states and outlines
- Provide
aria-labelfor screen readers
Golden Rules
- Use CSS variables for consistent theming
- Implement focus states for keyboard accessibility
- Provide smooth, non-disruptive animations
- Optimize for mobile with responsive design
Conclusion
A professional animated search form should maintain visual hierarchy, provide clear interactive states, remain responsive, and follow accessibility guidelines. This CSS-only solution uses transitions for smooth animations, but JavaScript is recommended for production to handle form submission or dynamic search functionality. Experiment with colors, animation timings, or additional fields to match your design, and test across devices and browsers. Feel free to leave comments with any questions or suggestions!
Comments
Post a Comment