# ux-contact-page > Complete Contact page with form, company info, map embed, social links, FAQ section, and office hours. Follows 2024-2025 UX best practices — minimal fields, clear labels, inline validation, success states, accessible form. Use for any "Contact Us", "Get in Touch", or "Reach Out" page. Includes 4 layout variants (split, stacked, card-based, minimal). ALWAYS combine with 11-responsive-premium and 12-deployment-paths skills. - Author: Andrius Godeliauskas - Repository: andriusgodeliauskas/claude-skills-agents - Version: 20260207185336 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-07 - Source: https://github.com/andriusgodeliauskas/claude-skills-agents - Web: https://mule.run/skillshub/@@andriusgodeliauskas/claude-skills-agents~ux-contact-page:20260207185336 --- --- name: ux-contact-page description: Complete Contact page with form, company info, map embed, social links, FAQ section, and office hours. Follows 2024-2025 UX best practices — minimal fields, clear labels, inline validation, success states, accessible form. Use for any "Contact Us", "Get in Touch", or "Reach Out" page. Includes 4 layout variants (split, stacked, card-based, minimal). ALWAYS combine with 11-responsive-premium and 12-deployment-paths skills. --- # Contact Page UX Skill **Purpose**: Make it effortless for users to reach out. Every friction point = lost lead. --- ## LAYOUT VARIANT 1: Split (form left, info right) — RECOMMENDED ```html Contact Get in Touch Have a question or want to work together? Fill out the form and we'll get back to you within 24 hours. Full Name * Email * Subject Select a topic... General Inquiry Request a Quote Support Partnership Message * I agree to the Privacy Policy * Send Message Sending... ✓ Message Sent! Thank you for reaching out. We'll get back to you within 24 hours. 📧 Email Us hello@company.com 📞 Call Us +370 600 00000 Mon-Fri, 9:00 - 18:00 📍 Visit Us Gedimino pr. 1Vilnius, LT-01103Lithuania FB IG LI X ``` --- ## CSS ```css .contact-page { padding: clamp(60px, 8vw, 120px) 0; } .contact-header { text-align: center; margin-bottom: clamp(40px, 6vw, 64px); } .contact-tag { display: inline-block; font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.15em; color: var(--accent, #6366F1); margin-bottom: 12px; } .contact-header h1 { font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 700; margin-bottom: 12px; } .contact-header p { color: var(--text-muted, #6B7280); max-width: 500px; margin: 0 auto; font-size: 1.0625rem; } /* GRID LAYOUT */ .contact-grid { display: grid; grid-template-columns: 1.4fr 1fr; gap: clamp(32px, 5vw, 64px); align-items: start; } /* FORM STYLING */ .contact-form-wrapper { background: white; border: 1px solid #E5E7EB; border-radius: 16px; padding: clamp(24px, 3vw, 40px); } .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .form-group { margin-bottom: 20px; } .form-label { display: block; font-size: 0.8125rem; font-weight: 500; margin-bottom: 6px; color: #374151; } .form-input { width: 100%; padding: 12px 16px; border: 1px solid #D1D5DB; border-radius: 10px; font-family: inherit; font-size: max(16px, 1rem); color: #111; background: #FAFAFA; transition: all 0.15s; } .form-input:focus { outline: none; border-color: var(--accent, #6366F1); background: white; box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); } .form-textarea { resize: vertical; min-height: 120px; } .form-select { appearance: none; cursor: pointer; } .form-input.error { border-color: #EF4444; } .form-error { font-size: 0.75rem; color: #EF4444; margin-top: 4px; min-height: 1em; display: block; } .form-check { display: flex; align-items: flex-start; gap: 10px; margin: 20px 0; font-size: 0.8125rem; color: #6B7280; } .form-check input { margin-top: 2px; width: 18px; height: 18px; accent-color: var(--accent, #6366F1); } .form-check a { color: var(--accent, #6366F1); } /* Submit button */ .btn-submit { width: 100%; padding: 16px; background: #111; color: white; border: none; border-radius: 12px; font-family: inherit; font-size: 1rem; font-weight: 600; cursor: pointer; transition: background 0.15s; } .btn-submit:hover { background: var(--accent, #6366F1); } .btn-submit:disabled { opacity: 0.5; cursor: not-allowed; } /* Success state */ .form-success { text-align: center; padding: 60px 20px; } .success-icon { width: 64px; height: 64px; border-radius: 50%; background: #D1FAE5; color: #059669; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; font-weight: 700; margin: 0 auto 16px; } .form-success h3 { font-size: 1.5rem; margin-bottom: 8px; } .form-success p { color: var(--text-muted, #6B7280); } /* CONTACT INFO CARDS */ .contact-info { display: flex; flex-direction: column; gap: 20px; } .info-card { padding: 24px; border: 1px solid #E5E7EB; border-radius: 12px; background: white; } .info-icon { font-size: 1.5rem; margin-bottom: 8px; } .info-card h3 { font-size: 0.9375rem; font-weight: 600; margin-bottom: 4px; } .info-card a { color: var(--accent, #6366F1); text-decoration: none; font-size: 0.9375rem; } .info-card a:hover { text-decoration: underline; } .info-card p { color: var(--text-muted, #6B7280); font-size: 0.875rem; line-height: 1.5; } .info-note { font-size: 0.75rem; color: #9CA3AF; margin-top: 4px; } /* Social links */ .contact-socials { display: flex; gap: 12px; margin-top: 8px; } .social-link { width: 44px; height: 44px; border-radius: 10px; border: 1px solid #E5E7EB; display: flex; align-items: center; justify-content: center; text-decoration: none; color: #374151; font-size: 0.8125rem; font-weight: 600; transition: all 0.2s; } .social-link:hover { background: #111; color: white; border-color: #111; } /* RESPONSIVE */ @media (max-width: 768px) { .contact-grid { grid-template-columns: 1fr; } .form-row { grid-template-columns: 1fr; } .contact-info { order: -1; } /* Info first on mobile */ } ``` --- ## JS: Form Validation ```javascript const form = document.getElementById('contact-form'); const successMsg = document.getElementById('form-success'); form.addEventListener('submit', function(e) { e.preventDefault(); let valid = true; // Validate required fields form.querySelectorAll('[required]').forEach(input => { const error = input.closest('.form-group')?.querySelector('.form-error') || input.closest('.form-check'); if (!input.value.trim() && input.type !== 'checkbox') { input.classList.add('error'); if (error && error.classList.contains('form-error')) error.textContent = 'This field is required'; valid = false; } else if (input.type === 'checkbox' && !input.checked) { valid = false; } else if (input.type === 'email' && !input.value.includes('@')) { input.classList.add('error'); if (error) error.textContent = 'Please enter a valid email'; valid = false; } else { input.classList.remove('error'); if (error && error.classList.contains('form-error')) error.textContent = ''; } }); if (valid) { // Show loading const btn = document.getElementById('submit-btn'); btn.disabled = true; btn.querySelector('.btn-text').style.display = 'none'; btn.querySelector('.btn-loading').style.display = 'inline'; // Simulate sending (replace with actual API call) setTimeout(() => { form.style.display = 'none'; successMsg.style.display = 'block'; }, 1500); } }); // Inline validation on blur form.querySelectorAll('.form-input').forEach(input => { input.addEventListener('blur', function() { if (this.required && !this.value.trim()) { this.classList.add('error'); } else { this.classList.remove('error'); } }); input.addEventListener('input', function() { this.classList.remove('error'); const err = this.closest('.form-group')?.querySelector('.form-error'); if (err) err.textContent = ''; }); }); ``` --- ## OPTIONAL: MAP EMBED ```html ``` ```css .contact-map { margin-top: 60px; padding: 0 clamp(16px, 3vw, 40px); } .contact-map iframe { width: 100%; height: 400px; border-radius: 16px; } ``` --- ## OPTIONAL: FAQ ACCORDION ```html Frequently Asked Questions What is your typical response time? We respond to all inquiries within 24 business hours. Do you offer free consultations? Yes! Our initial consultation is always free. ``` ```css .faq-list { max-width: 700px; margin: 0 auto; } .faq-item { border-bottom: 1px solid #E5E7EB; } .faq-question { padding: 20px 0; font-size: 1rem; font-weight: 500; cursor: pointer; list-style: none; display: flex; justify-content: space-between; align-items: center; } .faq-question::after { content: '+'; font-size: 1.25rem; color: #9CA3AF; } .faq-item[open] .faq-question::after { content: '−'; } .faq-question::-webkit-details-marker { display: none; } .faq-answer { padding: 0 0 20px; color: var(--text-muted, #6B7280); line-height: 1.7; } ``` --- ## CONTACT PAGE UX RULES 1. **Max 4-5 form fields** — name, email, subject (optional), message, privacy checkbox 2. **`font-size: max(16px, 1rem)`** on inputs — prevents iOS zoom 3. **Inline validation on blur** — show errors immediately, not on submit 4. **Success state** — replace form with confirmation message after send 5. **Phone number clickable** — `` for mobile tap-to-call 6. **Email clickable** — `` 7. **Response time promise** — "within 24 hours" sets expectations 8. **Privacy checkbox** — GDPR requirement in EU 9. **No CAPTCHA** if possible — use honeypot field instead 10. **Social links** — include all active channels 11. **Map** — optional but useful for physical businesses 12. **Mobile: info first** — show phone/email before the form on small screens
Have a question or want to work together? Fill out the form and we'll get back to you within 24 hours.
Thank you for reaching out. We'll get back to you within 24 hours.
Mon-Fri, 9:00 - 18:00
Gedimino pr. 1Vilnius, LT-01103Lithuania
We respond to all inquiries within 24 business hours.
Yes! Our initial consultation is always free.