Cara Membuat & Memasang Popup Contact Form di Blogger
Kenapa Memakai Popup Contact Form?
Formulir kontak adalah kanal penting untuk kolaborasi, tawaran kerja sama, maupun pertanyaan pembaca. Popup contact form menghadirkan formulir yang hanya muncul saat dibutuhkan, tidak mengganggu layout, dan fokus pada tindakan pengguna. Keuntungannya:
- Tampilan modern dan profesional, serasi dengan tema apa pun.
- Fokus pengguna—muncul di tengah layar, mudah diisi, dan bisa ditutup cepat.
- Ringan karena memanfaatkan widget Contact Form bawaan Blogger (tanpa plugin).
- Responsif & ramah mobile.
Persiapan Wajib
-
Aktifkan widget Contact Form bawaan Blogger
Buka Tata Letak → Tambahkan Gadget → Formulir Kontak. Letakkan di sidebar/footer. Nanti akan kita sembunyikan agar tidak terlihat namun tetap berfungsi sebagai pengirim pesan. - Pastikan tema Blogger modern (layout baru). Hampir semua tema default (Contempo, Emporio, Soho, Notable, Simple baru) aman.
Tips: Setelah ditambahkan, kamu boleh membiarkannya tampil sementara untuk uji, atau langsung disembunyikan via CSS pada langkah selanjutnya.
Cara Pasang Tombol “Hubungi Kami” di Menu Navigasi
Kita akan menambahkan item menu yang memicu popup. Di banyak template, menu berada pada daftar tautan di header. Masuk ke Tata Letak → Menu (atau “Halaman”), tambahkan entri:
- Judul: Hubungi Kami
- Tautan: # (atau kosong)
Jika kamu mengedit lewat HTML template, cari blok UL menu dan sisipkan ID berikut pada tautan:
<li><a href="javascript:void(0)" id="contact-icon">Hubungi Kami</a></li>
Dengan ID contact-icon
, script kita akan mengenali klik dan memunculkan popup.
HTML Popup Contact Form
Letakkan markup ini sebelum tag penutup </body>
di template:
<!-- Overlay Popup Contact -->
<div id='contact-popup-overlay'>
<div class='popup-content'>
<span class='popup-close' title='Tutup'>×</span>
<h3>Hubungi Kami</h3>
<form id='popup-contact-form'>
<div class='form-group'>
<input id='popup-name' type='text' placeholder='Nama Anda' required>
</div>
<div class='form-group'>
<input id='popup-email' type='email' placeholder='Email Anda (wajib)' required>
</div>
<div class='form-group'>
<textarea id='popup-message' rows='5' placeholder='Pesan Anda (wajib)' required></textarea>
</div>
<div class='form-group'>
<button class='popup-submit-btn' type='submit'>Kirim Pesan</button>
</div>
<div id='contact-popup-status'></div>
</form>
</div>
</div>
<!-- Widget ContactForm bawaan Blogger (cukup ada di layout; disembunyikan lewat CSS) -->
<div id='ContactForm1' style='display:none'></div>
CSS Popup (Mengikuti Variabel Blogger)
CSS berikut memanfaatkan variabel warna bawaan tema (fallback disediakan). Letakkan di <head> template (atau di Tema → Sesuaikan → Lanjutan → Tambahkan CSS).
/* Sembunyikan ContactForm bawaan agar tak mengganggu tampilan, tetap berfungsi */
#ContactForm1{position:absolute;left:-9999px;opacity:0;visibility:hidden}
/* Overlay */
#contact-popup-overlay{
position:fixed;inset:0;width:100%;height:100%;
background-color:rgba(0,0,0,.6);
display:none;align-items:flex-start;justify-content:center;
z-index:10001;backdrop-filter:blur(3px);animation:fadeIn .3s ease
}
/* Card popup */
#contact-popup-overlay .popup-content{
position:relative;background:var(--card-bg,#fff);
border-radius:8px;box-shadow:0 5px 20px rgba(0,0,0,.2);
width:90%;max-width:550px;margin-top:10vh;padding:25px 30px;
animation:fadeInDown .3s ease-out
}
/* Close */
#contact-popup-overlay .popup-close{
position:absolute;top:10px;right:15px;font-size:28px;font-weight:700;
color:#aaa;cursor:pointer;line-height:1;transition:color .2s
}
#contact-popup-overlay .popup-close:hover{color:var(--heading-color,#222)}
/* Heading */
#contact-popup-overlay .popup-content h3{
margin:0 0 10px;font-size:22px;color:var(--heading-color,#222)
}
/* Form controls */
#contact-popup-overlay .form-group{margin-bottom:15px}
#contact-popup-overlay .form-group input,
#contact-popup-overlay .form-group textarea{
width:100%;padding:12px;border:1px solid var(--border-color,#ddd);
border-radius:5px;font:400 15px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,Arial;
color:var(--text-color,#222);background-color:var(--body-bg,#fff);
transition:border-color .2s,box-shadow .2s
}
#contact-popup-overlay .form-group input:focus,
#contact-popup-overlay .form-group textarea:focus{
border-color:var(--accent-color,#2196f3);outline:0;
box-shadow:0 0 0 3px color-mix(in srgb, var(--accent-color,#2196f3) 20%, transparent)
}
/* Button */
#contact-popup-overlay .popup-submit-btn{
appearance:none;background:var(--accent-color,#2196f3);color:#fff;
border:0;border-radius:50px;padding:12px 20px;font-weight:500;
font-size:16px;width:100%;cursor:pointer;transition:background-color .2s
}
#contact-popup-overlay .popup-submit-btn:hover{background:#1976d2}
/* Status */
#contact-popup-overlay #contact-popup-status{
margin-top:12px;font-size:14px;text-align:center;padding:10px;border-radius:6px;display:none
}
/* Animations */
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes fadeInDown{from{opacity:0;transform:translateY(-22px)}to{opacity:1;transform:translateY(0)}}
JavaScript: Integrasi ke Widget ContactForm1
Script ini membuka & menutup popup, mengirim data ke widget #ContactForm1
, dan memantau pesan sukses/gagal dari Blogger.
<script>
(function(){
const $ = (sel,ctx=document) => ctx.querySelector(sel);
function setupPopup(triggerId, overlayId){
const trigger = document.getElementById(triggerId);
const overlay = document.getElementById(overlayId);
if(!trigger || !overlay) return;
const closeBtn = overlay.querySelector('.popup-close') || overlay;
const show = () => overlay.style.display = 'flex';
const hide = () => overlay.style.display = 'none';
trigger.addEventListener('click', show);
closeBtn.addEventListener('click', hide);
overlay.addEventListener('click', e => { if(e.target === overlay) hide(); });
document.addEventListener('keydown', e => { if(e.key === 'Escape') hide(); });
}
// Hanya aktif jika widget ContactForm1 ada
if(document.getElementById('ContactForm1')){
setupPopup('contact-icon','contact-popup-overlay');
} else {
const contactIcon = document.getElementById('contact-icon');
if(contactIcon) contactIcon.style.display = 'none';
}
// Submit ke ContactForm1
const popupForm = document.getElementById('popup-contact-form');
if (popupForm && document.getElementById('ContactForm1')) {
popupForm.addEventListener('submit', function(e){
e.preventDefault();
$('#ContactForm1_contact-form-name').value = $('#popup-name').value.trim();
$('#ContactForm1_contact-form-email').value = $('#popup-email').value.trim();
$('#ContactForm1_contact-form-email-message').value = $('#popup-message').value.trim();
$('#ContactForm1_contact-form-submit').click();
});
const showStatus = (text, type) => {
const box = document.getElementById('contact-popup-status');
box.textContent = text; box.style.display = 'block';
box.style.background = type==='success' ? 'rgba(46,125,50,.08)' : 'rgba(198,40,40,.08)';
box.style.color = type==='success' ? '#2e7d32' : '#c62828';
setTimeout(() => { const o=$('#contact-popup-overlay'); if(o) o.style.display='none'; box.style.display='none'; }, 3500);
};
const observe = (node, type) => {
if(!node) return;
new MutationObserver(() => {
const msg = node.textContent.trim();
if (msg) showStatus(msg, type);
}).observe(node, {childList:true,characterData:true,subtree:true});
};
observe($('#ContactForm1_contact-form-success-message'), 'success');
observe($('#ContactForm1_contact-form-error-message'), 'error');
}
})();
</script>
Optimasi SEO & Kinerja
- Search Description: isi deskripsi singkat berisi kata kunci “popup contact form Blogger”.
- Struktur heading: gunakan H2 untuk bab, H3 untuk sub-bab.
- Tanpa halaman baru: popup tidak menambah URL—ramah SEO.
- Ramah tema: warna mengikuti variabel CSS Blogger, jadi tidak merusak tampilan.
- Ringan: hanya CSS/JS kecil, tanpa library besar.
Uji Coba & Troubleshooting
- Klik menu Hubungi Kami → popup muncul.
- Isi form dan kirim → cek pesan status (sukses/gagal).
- Jika gagal, pastikan widget Contact Form benar-benar ditambahkan di Tata Letak.
- Bila tombol menu tak berfungsi, pastikan ID
contact-icon
ada pada tautan menu.
Tips: Saat uji, sementara tampilkan widget Contact Form (jangan disembunyikan) untuk melihat elemen sukses/gagal dimutasi, lalu sembunyikan kembali.
Bundle Kode Siap Tempel (Semua Jadi Satu)
Kamu bisa ambil paket cepat berikut—tinggal tempel di template. Pastikan kamu sudah menambahkan menu dengan ID contact-icon
.
<!-- ===== Popup Contact Form: HTML ===== -->
<div id='contact-popup-overlay'>
<div class='popup-content'>
<span class='popup-close' title='Tutup'>×</span>
<h3>Hubungi Kami</h3>
<form id='popup-contact-form'>
<div class='form-group'><input id='popup-name' type='text' placeholder='Nama Anda' required></div>
<div class='form-group'><input id='popup-email' type='email' placeholder='Email Anda (wajib)' required></div>
<div class='form-group'><textarea id='popup-message' rows='5' placeholder='Pesan Anda (wajib)' required></textarea></div>
<div class='form-group'><button class='popup-submit-btn' type='submit'>Kirim Pesan</button></div>
<div id='contact-popup-status'></div>
</form>
</div>
</div>
<!-- ===== Popup Contact Form: CSS ===== -->
<style>#ContactForm1{position:absolute;left:-9999px;opacity:0;visibility:hidden}
#contact-popup-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);display:none;align-items:flex-start;justify-content:center;z-index:10001;backdrop-filter:blur(3px);animation:fadeIn .3s ease}
#contact-popup-overlay .popup-content{position:relative;background:var(--card-bg,#fff);border-radius:8px;box-shadow:0 5px 20px rgba(0,0,0,.2);width:90%;max-width:550px;margin-top:10vh;padding:25px 30px;animation:fadeInDown .3s ease-out}
#contact-popup-overlay .popup-close{position:absolute;top:10px;right:15px;font-size:28px;font-weight:700;color:#aaa;cursor:pointer;transition:color .2s}
#contact-popup-overlay .popup-close:hover{color:var(--heading-color,#222)}
#contact-popup-overlay h3{margin:0 0 10px;font-size:22px;color:var(--heading-color,#222)}
#contact-popup-overlay .form-group{margin-bottom:15px}
#contact-popup-overlay input,#contact-popup-overlay textarea{width:100%;padding:12px;border:1px solid var(--border-color,#ddd);border-radius:5px;font:400 15px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,Arial;color:var(--text-color,#222);background:var(--body-bg,#fff);transition:border-color .2s,box-shadow .2s}
#contact-popup-overlay input:focus,#contact-popup-overlay textarea:focus{border-color:var(--accent-color,#2196f3);outline:0;box-shadow:0 0 0 3px color-mix(in srgb, var(--accent-color,#2196f3) 20%, transparent)}
#contact-popup-overlay .popup-submit-btn{background:var(--accent-color,#2196f3);color:#fff;border:0;border-radius:50px;padding:12px 20px;font-weight:500;font-size:16px;width:100%;cursor:pointer;transition:background-color .2s}
#contact-popup-overlay .popup-submit-btn:hover{background:#1976d2}
#contact-popup-overlay #contact-popup-status{margin-top:12px;font-size:14px;text-align:center;padding:10px;border-radius:6px;display:none}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes fadeInDown{from{opacity:0;transform:translateY(-22px)}to{opacity:1;transform:translateY(0)}}</style>
<!-- ===== Popup Contact Form: JS ===== -->
<script>(function(){const $=(s,c=document)=>c.querySelector(s);
function setupPopup(triggerId,overlayId){const t=document.getElementById(triggerId),o=document.getElementById(overlayId);if(!t||!o)return;const x=o.querySelector('.popup-close')||o,show=()=>o.style.display='flex',hide=()=>o.style.display='none';t.addEventListener('click',show);x.addEventListener('click',hide);o.addEventListener('click',e=>{if(e.target===o)hide()});document.addEventListener('keydown',e=>{if(e.key==='Escape')hide()})}
if(document.getElementById('ContactForm1')){setupPopup('contact-icon','contact-popup-overlay')}else{const a=document.getElementById('contact-icon');if(a)a.style.display='none'}
const f=document.getElementById('popup-contact-form');if(f&&document.getElementById('ContactForm1')){f.addEventListener('submit',function(e){e.preventDefault();$('#ContactForm1_contact-form-name').value=$('#popup-name').value.trim();$('#ContactForm1_contact-form-email').value=$('#popup-email').value.trim();$('#ContactForm1_contact-form-email-message').value=$('#popup-message').value.trim();$('#ContactForm1_contact-form-submit').click()});const showStatus=(t,y)=>{const b=document.getElementById('contact-popup-status');b.textContent=t;b.style.display='block';b.style.background=y==='success'?'rgba(46,125,50,.08)':'rgba(198,40,40,.08)';b.style.color=y==='success'?'#2e7d32':'#c62828';setTimeout(()=>{const o=$('#contact-popup-overlay');if(o)o.style.display='none';b.style.display='none'},3500)};const obs=(n,y)=>{if(!n)return;new MutationObserver(()=>{const m=n.textContent.trim();if(m)showStatus(m,y)}).observe(n,{childList:true,characterData:true,subtree:true})};obs($('#ContactForm1_contact-form-success-message'),'success');obs($('#ContactForm1_contact-form-error-message'),'error')}})();</script>
FAQ
Apakah ini merusak tampilan tema?
Tidak. Warna dan tipografi mengikuti variabel CSS tema Blogger, dengan fallback aman. Overlay hanya muncul saat tombol diklik.
Wajib pakai widget Contact Form?
Ya. Widget itu bertindak sebagai “mesin kirim” email. Kita hanya membungkusnya dengan UI popup.
Bagaimana kalau menu saya pakai LinkList?
Beri ID contact-icon
pada tautan “Hubungi Kami”. Jika tidak bisa via GUI, edit HTML template menu dan tambahkan ID pada elemen <a>.
Apakah bisa dipakai di halaman AMP?
Tidak disarankan. AMP membatasi JavaScript kustom. Gunakan versi non-AMP.
Posting Komentar