Shopify Contact Section – Professional Contact Form & Info Display
Add a comprehensive contact section to your Shopify store with customizable contact form, address blocks, and contact information. Features responsive grid layout and stylish info cards with icons.
Liquid Code
<!--
========================================
Section Name: Contact Section
Tech Stack: Liquid, HTML, CSS, JavaScript
What This Section Does:
- Displays a complete contact solution with customizable introduction area and grid layout.
- Features multiple block types including address cards, contact info cards, image display, and form.
- Includes form validation with custom error/success messages and terms acceptance option.
- Fully responsive design that adapts from mobile to desktop with elegant styling.
Promotion:
Make it easy for customers to reach you with this professional contact section. Combine contact form and information in a visually appealing layout. Get it now at [PrebuiltTemplates](https://prebuilttemplates.com/).
========================================
-->
<section class="contact-us-section" style="background-color: {{ section.settings.bg_color }}; padding: {{ section.settings.pad_top }}px 0 {{ section.settings.pad_bot }}px;">
<div class="contact-us-container page-width">
<!-- Main Introduction Area -->
{% if section.settings.show_intro %}
<div class="contact-us-intro">
<h4 class="contact-us-subtitle">{{ section.settings.subtitle | default: 'CONTACT US' }}</h4>
<h2 class="contact-us-title">{{ section.settings.title | default: 'Lorem ipsum dolor sit' }}</h2>
<div class="contact-us-text">
{{ section.settings.intro_text | default: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.' }}
</div>
</div>
{% endif %}
<!-- Contact Info Blocks Grid -->
<div class="contact-us-blocks-grid">
{% for block in section.blocks %}
{% case block.type %}
{% when 'address_block' %}
<div class="contact-us-info-card" {{ block.shopify_attributes }}>
<div class="contact-us-info-icon">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2C8.13 2 5 5.13 5 9C5 14.25 12 22 12 22C12 22 19 14.25 19 9C19 5.13 15.87 2 12 2ZM12 11.5C10.62 11.5 9.5 10.38 9.5 9C9.5 7.62 10.62 6.5 12 6.5C13.38 6.5 14.5 7.62 14.5 9C14.5 10.38 13.38 11.5 12 11.5Z" fill="currentColor"/>
</svg>
</div>
<div class="contact-us-info-content">
<h3 class="contact-us-info-title">{{ block.settings.info_title | default: 'Lorem ipsum' }}</h3>
<div class="contact-us-info-text">{{ block.settings.info_text | default: 'Lorem ipsum dolor sit amet' }}</div>
</div>
</div>
{% when 'contact_block' %}
<div class="contact-us-info-card" {{ block.shopify_attributes }}>
<div class="contact-us-info-icon">
{% if block.settings.icon_type == 'email' %}
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20 4H4C2.9 4 2.01 4.9 2.01 6L2 18C2 19.1 2.9 20 4 20H20C21.1 20 22 19.1 22 18V6C22 4.9 21.1 4 20 4ZM20 8L12 13L4 8V6L12 11L20 6V8Z" fill="currentColor"/>
</svg>
{% else %}
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.62 10.79C8.06 13.62 10.38 15.94 13.21 17.38L15.41 15.18C15.69 14.9 16.08 14.82 16.43 14.93C17.55 15.3 18.75 15.5 20 15.5C20.55 15.5 21 15.95 21 16.5V20C21 20.55 20.55 21 20 21C10.61 21 3 13.39 3 4C3 3.45 3.45 3 4 3H7.5C8.05 3 8.5 3.45 8.5 4C8.5 5.25 8.7 6.45 9.07 7.57C9.18 7.92 9.1 8.31 8.82 8.59L6.62 10.79Z" fill="currentColor"/>
</svg>
{% endif %}
</div>
<div class="contact-us-info-content">
<h3 class="contact-us-info-title">{{ block.settings.info_title | default: 'Lorem ipsum' }}</h3>
<div class="contact-us-info-text">{{ block.settings.info_text | default: 'Lorem ipsum dolor sit amet' }}</div>
</div>
</div>
{% when 'image_block' %}
<div class="contact-us-image-wrapper" {{ block.shopify_attributes }}>
{% if block.settings.contact_image != blank %}
<img src="{{ block.settings.contact_image | img_url: '800x' }}"
alt="Lorem ipsum dolor sit amet"
class="contact-us-image">
{% else %}
{{ 'image' | placeholder_svg_tag: 'contact-us-image placeholder' }}
{% endif %}
</div>
{% when 'form_block' %}
<div class="contact-us-form-wrapper" {{ block.shopify_attributes }}>
<h3 class="contact-us-form-title">{{ block.settings.form_title | default: 'Lorem ipsum dolor sit' }}</h3>
{%- form 'contact', id: 'ContactForm', class: 'contact-us-form' -%}
{% if form.posted_successfully? %}
<div class="contact-us-form-success">
{{ block.settings.success_message | default: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' }}
</div>
{% endif %}
{% if form.errors %}
<div class="contact-us-form-error">
{{ block.settings.error_message | default: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' }}
</div>
{% endif %}
<div class="contact-us-form-field">
<input type="text" id="ContactFormName" name="contact[name]"
placeholder="{{ block.settings.name_placeholder | default: 'Lorem ipsum' }}"
class="contact-us-form-input">
</div>
<div class="contact-us-form-field">
<input type="email" id="ContactFormEmail" name="contact[email]"
placeholder="{{ block.settings.email_placeholder | default: 'Lorem ipsum' }}"
class="contact-us-form-input"
required>
</div>
<div class="contact-us-form-field">
<textarea id="ContactFormMessage" name="contact[body]"
placeholder="{{ block.settings.message_placeholder | default: 'Lorem ipsum' }}"
class="contact-us-form-textarea"></textarea>
</div>
{% if block.settings.show_terms %}
<div class="contact-us-form-field contact-us-form-checkbox">
<input type="checkbox" id="ContactFormTerms" name="contact[terms]" required>
<label for="ContactFormTerms">{{ block.settings.terms_text | default: 'Lorem ipsum dolor sit amet' }}</label>
</div>
{% endif %}
<div class="contact-us-form-submit">
<button type="submit" class="contact-us-form-button" style="background-color: {{ block.settings.button_bg_color }}; color: {{ block.settings.button_text_color }};">
{{ block.settings.button_text | default: 'Lorem ipsum' }}
</button>
</div>
{%- endform -%}
</div>
{% endcase %}
{% endfor %}
</div>
</div>
</section>
{% schema %}
{
"name": "Contact Section",
"settings": [
{
"type": "range",
"id": "pad_top",
"label": "Padding Top",
"min": 0,
"max": 200,
"step": 5,
"default": 40
},
{
"type": "range",
"id": "pad_bot",
"label": "Padding Bottom",
"min": 0,
"max": 200,
"step": 5,
"default": 40
},
{
"type": "color",
"id": "bg_color",
"label": "Background Color",
"default": "#FFFFFF"
},
{
"type": "checkbox",
"id": "show_intro",
"label": "Show Introduction",
"default": true
},
{
"type": "text",
"id": "subtitle",
"label": "Subtitle",
"default": "CONTACT US"
},
{
"type": "text",
"id": "title",
"label": "Title",
"default": "Get in touch"
},
{
"type": "richtext",
"id": "intro_text",
"label": "Introduction Text",
"default": "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Give us a call or drop by anytime, we endeavour to answer all enquiries within 24 hours on business days.</p>"
}
],
"blocks": [
{
"type": "address_block",
"name": "Address Block",
"limit": 2,
"settings": [
{
"type": "text",
"id": "info_title",
"label": "Title",
"default": "Address"
},
{
"type": "richtext",
"id": "info_text",
"label": "Content",
"default": "<p>Lorem ipsum dolor sit amet<br>789 Lorem Street, Office 123<br>Lorem, 10001</p>"
},
{
"type": "color",
"id": "card_bg_color",
"label": "Card Background",
"default": "#F8F8F8"
}
]
},
{
"type": "contact_block",
"name": "Contact Block",
"limit": 2,
"settings": [
{
"type": "select",
"id": "icon_type",
"label": "Icon Type",
"options": [
{
"value": "email",
"label": "Email"
},
{
"value": "phone",
"label": "Phone"
}
],
"default": "email"
},
{
"type": "text",
"id": "info_title",
"label": "Title",
"default": "Contact"
},
{
"type": "richtext",
"id": "info_text",
"label": "Content",
"default": "<p>Lorem ipsum dolor sit amet<br>+1 555 123 45 67</p>"
},
{
"type": "color",
"id": "card_bg_color",
"label": "Card Background",
"default": "#F8F8F8"
}
]
},
{
"type": "image_block",
"name": "Image Block",
"limit": 1,
"settings": [
{
"type": "image_picker",
"id": "contact_image",
"label": "Contact Image"
},
{
"type": "select",
"id": "image_ratio",
"label": "Image Ratio",
"options": [
{
"value": "square",
"label": "Square (1:1)"
},
{
"value": "portrait",
"label": "Portrait (3:4)"
},
{
"value": "landscape",
"label": "Landscape (4:3)"
}
],
"default": "portrait"
}
]
},
{
"type": "form_block",
"name": "Contact Form",
"limit": 1,
"settings": [
{
"type": "text",
"id": "form_title",
"label": "Form Title",
"default": "Confirm Your Information"
},
{
"type": "text",
"id": "name_placeholder",
"label": "Name Placeholder",
"default": "Name"
},
{
"type": "text",
"id": "email_placeholder",
"label": "Email Placeholder",
"default": "Email"
},
{
"type": "text",
"id": "message_placeholder",
"label": "Message Placeholder",
"default": "Message"
},
{
"type": "checkbox",
"id": "show_terms",
"label": "Show Terms Checkbox",
"default": true
},
{
"type": "text",
"id": "terms_text",
"label": "Terms Text",
"default": "I accept the Terms of Service"
},
{
"type": "text",
"id": "button_text",
"label": "Button Text",
"default": "Submit Now!"
},
{
"type": "color",
"id": "button_bg_color",
"label": "Button Background",
"default": "#000000"
},
{
"type": "color",
"id": "button_text_color",
"label": "Button Text Color",
"default": "#FFFFFF"
},
{
"type": "textarea",
"id": "success_message",
"label": "Success Message",
"default": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
},
{
"type": "textarea",
"id": "error_message",
"label": "Error Message",
"default": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
},
{
"type": "color",
"id": "form_bg_color",
"label": "Form Background",
"default": "#F8F8F8"
}
]
}
],
"presets": [
{
"name": "Contact Section",
"blocks": [
{
"type": "address_block"
},
{
"type": "contact_block"
},
{
"type": "form_block"
}
]
}
]
}
{% endschema %}
{% stylesheet %}
.contact-us-section {
overflow: hidden;
}
.contact-us-section .contact-us-container {
max-width: 1200px;
margin: 0 auto;
}
.contact-us-section .contact-us-intro {
text-align: left;
margin-bottom: 40px;
}
.contact-us-section .contact-us-subtitle {
font-size: 14px;
font-weight: 600;
color: #555;
margin-bottom: 10px;
text-transform: uppercase;
letter-spacing: 1px;
}
.contact-us-section .contact-us-title {
font-size: 32px;
font-weight: 700;
color: #222;
margin-bottom: 20px;
}
.contact-us-section .contact-us-text {
font-size: 16px;
line-height: 1.6;
color: #666;
}
.contact-us-section .contact-us-blocks-grid {
display: grid;
grid-template-columns: 1fr;
gap: 25px;
}
.contact-us-section .contact-us-info-card {
display: flex;
align-items: flex-start;
gap: 15px;
padding: 25px;
background-color: #f8f8f8;
border-radius: 8px;
box-shadow: 0 4px 15px rgba(0,0,0,0.05);
}
.contact-us-section .contact-us-info-icon {
display: flex;
align-items: center;
justify-content: center;
width: 48px;
height: 48px;
border-radius: 50%;
background-color: #f0f0f0;
color: #333;
}
.contact-us-section .contact-us-info-title {
font-size: 18px;
font-weight: 600;
color: #333;
margin-bottom: 10px;
}
.contact-us-section .contact-us-info-text {
font-size: 15px;
line-height: 1.5;
color: #555;
}
.contact-us-section .contact-us-image-wrapper {
width: 100%;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
}
.contact-us-section .contact-us-image-wrapper.square {
aspect-ratio: 1/1;
}
.contact-us-section .contact-us-image-wrapper.portrait {
aspect-ratio: 3/4;
}
.contact-us-section .contact-us-image-wrapper.landscape {
aspect-ratio: 4/3;
}
.contact-us-section .contact-us-image {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.4s ease;
}
.contact-us-section .contact-us-image:hover {
transform: scale(1.02);
}
.contact-us-section .contact-us-form-wrapper {
padding: 30px;
background-color: #f8f8f8;
border-radius: 8px;
box-shadow: 0 4px 15px rgba(0,0,0,0.05);
}
.contact-us-section .contact-us-form-title {
font-size: 22px;
font-weight: 600;
color: #333;
margin-bottom: 25px;
text-align: center;
}
.contact-us-section .contact-us-form-success,
.contact-us-section .contact-us-form-error {
padding: 12px 15px;
margin-bottom: 20px;
border-radius: 6px;
font-size: 14px;
}
.contact-us-section .contact-us-form-success {
background-color: #e8f5e9;
color: #2e7d32;
}
.contact-us-section .contact-us-form-error {
background-color: #ffebee;
color: #c62828;
}
.contact-us-section .contact-us-form-field {
margin-bottom: 18px;
}
.contact-us-section .contact-us-form-input,
.contact-us-section .contact-us-form-textarea {
width: 100%;
padding: 12px 15px;
font-size: 15px;
border: 1px solid #ddd;
border-radius: 6px;
background-color: #fff;
transition: border-color 0.3s ease;
}
.contact-us-section .contact-us-form-textarea {
min-height: 120px;
resize: vertical;
}
.contact-us-section .contact-us-form-input:focus,
.contact-us-section .contact-us-form-textarea:focus {
border-color: #888;
outline: none;
box-shadow: 0 0 0 2px rgba(0,0,0,0.05);
}
.contact-us-section .contact-us-form-checkbox {
display: flex;
align-items: center;
gap: 10px;
}
.contact-us-section .contact-us-form-checkbox input {
width: 18px;
height: 18px;
}
.contact-us-section .contact-us-form-checkbox label {
font-size: 14px;
color: #555;
}
.contact-us-section .contact-us-form-submit {
margin-top: 25px;
text-align: center;
}
.contact-us-section .contact-us-form-button {
padding: 12px 30px;
font-size: 16px;
font-weight: 600;
border: none;
border-radius: 6px;
cursor: pointer;
transition: transform 0.3s ease, opacity 0.3s ease;
}
.contact-us-section .contact-us-form-button:hover {
opacity: 0.9;
transform: translateY(-2px);
}
/* Responsive Styles */
@media (min-width: 768px) {
.contact-us-section .contact-us-blocks-grid {
grid-template-columns: repeat(2, 1fr);
gap: 25px;
}
.contact-us-section .contact-us-form-wrapper {
grid-column: span 2;
}
}
@media (min-width: 992px) {
.contact-us-section .contact-us-title {
font-size: 36px;
}
.contact-us-section .contact-us-blocks-grid {
grid-template-columns: repeat(3, 1fr);
gap: 30px;
}
.contact-us-section .contact-us-form-wrapper {
grid-column: span 3;
}
}
@media (max-width: 767px) {
.contact-us-section .contact-us-container {
padding: 0 15px;
}
.contact-us-section .contact-us-title {
font-size: 28px;
}
.contact-us-section .contact-us-form-wrapper {
padding: 25px 20px;
}
}
{% endstylesheet %}
{% javascript %}
document.addEventListener('DOMContentLoaded', function() {
const contactForm = document.getElementById('ContactForm');
if(contactForm) {
// Apply dynamic aspect ratio to image if present
const imageWrapper = document.querySelector('.contact-us-image-wrapper');
if(imageWrapper) {
const ratioClass = '{{ block.settings.image_ratio }}';
if(ratioClass) {
imageWrapper.classList.add(ratioClass);
}
}
// Form validation
contactForm.addEventListener('submit', function(e) {
const emailInput = document.getElementById('ContactFormEmail');
if(emailInput && !isValidEmail(emailInput.value)) {
e.preventDefault();
// Create error message
const errorDiv = document.createElement('div');
errorDiv.classList.add('contact-us-form-error');
errorDiv.textContent = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
// Remove existing error messages
const existingErrors = contactForm.querySelectorAll('.contact-us-form-error');
existingErrors.forEach(error => error.remove());
// Add new error message at the top
contactForm.prepend(errorDiv);
// Scroll to error
errorDiv.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
});
}
// Email validation helper
function isValidEmail(email) {
const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(String(email).toLowerCase());
}
});
{% endjavascript %}
