Membangun Web Impianmu: Dari Kalkulator Cerdas sampai Page Builder Interaktif dengan HTML, CSS, dan JavaScript

PintarApp Agustus 04, 2026
Membangun Web Impianmu: Dari Kalkulator Cerdas sampai Page Builder Interaktif dengan HTML, CSS, dan JavaScript

Mengintip Dapur Web: Kenapa HTML, CSS, dan JavaScript Itu Fondasi Kokoh?

Dulu, pas awal-awal menyelami dunia koding, saya pernah loh ngalamin momen "Aduh, ini kok nggak jalan ya?" persis di proyek kalkulator web pertama saya. Semua tombol sudah tertata rapi di layar, tapi begitu angka dimasukkan dan tombol "=" dipencet, yang muncul malah 'NaN' alias 'Not a Number'. Rasanya kayak lagi merakit mesin motor, semua komponen udah terpasang indah, tapi pas distarter cuma ada suara "klik" doang. Usut punya usut, ternyata ada kesalahan kecil di logika JavaScript-nya, mungkin variabelnya salah dipanggil atau operatornya keliru. Hal sepele, tapi bikin pening kepala tujuh keliling! Nah, pengalaman itulah yang akhirnya menyadarkan betapa krusialnya memahami pondasi web: HTML, CSS, dan JavaScript. Tiga serangkai ini bukan cuma tools, tapi seperti resep rahasia untuk menciptakan hidangan web yang lezat dan fungsional.

Hari ini, kita akan coba "memasak" dua hidangan utama yang mungkin sering kalian temui, tapi jarang terpikirkan cara membuatnya: sebuah aplikasi kalkulator web dan sebuah page builder sederhana. Jangan khawatir, kita akan bongkar resepnya satu per satu, santai tapi tetap padat ilmu. Siap jadi chef web hari ini?

Resep Pertama: Aplikasi Kalkulator Web – Si Mesin Hitung Saku di Browser Anda

Bayangkan kalkulator di meja kerja Anda. Dia punya tombol angka, tombol operasi, dan layar untuk menampilkan hasilnya. Nah, kalkulator web yang akan kita buat ini persis seperti itu, tapi hidup di dalam browser Anda. Ini adalah proyek klasik yang ampuh untuk mengasah kemampuan dasar HTML, CSS, dan JavaScript Anda dalam pengembangan web frontend.

1. HTML: Merangkai Tulang Belakang Kalkulator

Di bagian ini, HTML bertindak seperti kerangka mobil. Kita akan menata "body" kalkulator, seperti layar display dan semua tombolnya. Setiap tombol punya nilai dan fungsi masing-masing. Ini adalah struktur dasar untuk aplikasi web kalkulator.


<div class="calculator">
<input type="text" class="display" readonly>
<div class="buttons">
<button class="operator">AC</button>
<button class="operator">+/-</button>
<button class="operator">%</button>
<button class="operator">/</button>
<button>7</button>
<button>8</button>
<button>9</button>
<button class="operator">*</button>
<button>4</button>
<button>5</button>
<button>6</button>
<button class="operator">-</button>
<button>1</button>
<button>2</button>
<button>3</button>
<button class="operator">+</button>
<button class="zero">0</button>
<button>.</button>
<button class="operator equals">=</button>
</div>
</div>

2. CSS: Memoles Tampilan agar Sedap Dipandang

Setelah kerangka ada, saatnya mewarnai dan membentuknya. CSS ibarat cat mobil, jok kulit, atau velg sporty. Kita akan membuat kalkulator kita terlihat modern, tombol-tombolnya rapi, dan display-nya jelas. Gunakan display: grid untuk menata tombol agar responsif dan mudah diatur, ini penting untuk desain web responsif.


.calculator {
width: 320px;
background-color: #333;
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 15px rgba(0, 0, 0, 0.5);
margin: 50px auto;
}
.display {
width: 100%;
height: 60px;
background-color: #eee;
border: none;
font-size: 2.5em;
text-align: right;
padding: 10px;
border-radius: 5px;
margin-bottom: 15px;
box-sizing: border-box; /* Penting agar padding tidak menambah lebar */
}
.buttons {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px;
}
.buttons button {
width: 100%;
height: 60px;
font-size: 1.8em;
border: none;
border-radius: 5px;
cursor: pointer;
background-color: #555;
color: #fff;
transition: background-color 0.2s;
}
.buttons button:hover {
background-color: #777;
}
.operator {
background-color: #f79232;
}
.operator:hover {
background-color: #e68121;
}
.equals {
grid-column: span 1;
background-color: #2ecc71;
}
.equals:hover {
background-color: #27ae60;
}
.zero {
grid-column: span 2; /* Agar tombol 0 lebih lebar */
}

3. JavaScript: Otak di Balik Setiap Perhitungan

Inilah "jeroan mesin" kalkulator kita. JavaScript akan mendengarkan setiap klik tombol, mengolah angka dan operator, lalu menampilkan hasilnya. Ini mirip ECU (Electronic Control Unit) pada mobil yang mengatur bagaimana mesin bekerja berdasarkan input gas dan rem. Bagian ini krusial untuk logika kalkulator JavaScript.


const display = document.querySelector('.display');
const buttons = document.querySelectorAll('.buttons button');
let currentInput = '';
let operator = null;
let previousInput = '';
buttons.forEach(button => {
button.addEventListener('click', () => {
const value = button.textContent;
if (button.classList.contains('operator')) {
if (value === 'AC') {
currentInput = '';
operator = null;
previousInput = '';
display.value = '';
return;
}
if (value === '+/-') {
if (currentInput) {
currentInput = (parseFloat(currentInput) * -1).toString();
display.value = currentInput;
}
return;
}
if (value === '%') {
if (currentInput) {
currentInput = (parseFloat(currentInput) / 100).toString();
display.value = currentInput;
}
return;
}
if (currentInput === '' && previousInput === '') return;
if (currentInput !== '' && previousInput !== '') {
calculate();
}
operator = value;
previousInput = currentInput;
currentInput = '';
return;
}
if (value === '=') {
if (currentInput === '' || previousInput === '' || operator === null) return;
calculate();
operator = null;
previousInput = '';
return;
}
if (value === '.' && currentInput.includes('.')) return;
currentInput += value;
display.value = currentInput;
});
});
function calculate() {
let result;
const prev = parseFloat(previousInput);
const curr = parseFloat(currentInput);
if (isNaN(prev) || isNaN(curr)) return;
switch (operator) {
case '+':
result = prev + curr;
break;
case '-':
result = prev - curr;
break;
case '*':
result = prev * curr;
break;
case '/':
result = prev / curr;
break;
default:
return;
}
currentInput = result.toString();
display.value = currentInput;
}

Dengan ketiga elemen ini bersatu, Anda sudah punya kalkulator web yang fungsional! Keren, kan? Ini adalah langkah awal yang solid dalam belajar HTML CSS JS.

Resep Kedua: Page Builder Sederhana – Mendesain Website Semudah Main Lego

Oke, setelah berhasil membuat kalkulator, mari kita naik level sedikit. Pernahkah Anda membayangkan bisa mendesain halaman web hanya dengan 'menarik dan melepas' komponen-komponennya? Ya, seperti main Lego, tapi ini untuk website! Itulah esensi dari sebuah page builder. Meskipun yang kita buat ini versi dasarnya, konsepnya akan sangat membantu Anda memahami interaksi kompleks di web dan dasar-dasar JavaScript drag and drop.

1. HTML: Kanvas dan Kotak Perkakas

Untuk page builder, HTML akan menyediakan dua area utama: "kanvas" tempat kita meletakkan komponen, dan "toolbox" yang berisi komponen-komponen siap pakai (misalnya, judul, paragraf, gambar). Anggap kanvas ini seperti lantai bengkel yang kosong, dan toolbox itu rak berisi sparepart yang siap dipasang untuk membuat page builder.


<div class="page-builder-container">
<div class="toolbox">
<h3>Komponen</h3>
<div class="component" draggable="true" data-type="heading">Heading</div>
<div class="component" draggable="true" data-type="paragraph">Paragraph</div>
<div class="component" draggable="true" data-type="image">Image</div>
<!-- Tambahkan lebih banyak komponen di sini -->
</div>
<div class="canvas">
<p>Drag components here...</p>
</div>
</div>

2. CSS: Membuat Komponen Bisa Dipegang dan Diatur

CSS di sini fungsinya bukan hanya mempercantik, tapi juga memberikan indikasi visual bahwa komponen bisa diinteraksikan. Kita akan membuat toolbox dan kanvas terlihat jelas, dan komponen-komponennya punya gaya yang membuat mereka "terasa" bisa ditarik dan dilepas. Efek border atau box-shadow bisa jadi penanda saat ada komponen yang sedang diseret ke area kanvas. Ini esensial untuk desain interaktif web.


.page-builder-container {
display: flex;
gap: 20px;
margin: 50px auto;
width: 90%;
max-width: 1200px;
min-height: 500px;
border: 1px solid #ccc;
padding: 20px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
.toolbox {
flex-shrink: 0;
width: 200px;
border-right: 1px solid #eee;
padding-right: 15px;
}
.toolbox h3 {
margin-top: 0;
color: #333;
}
.component {
padding: 10px 15px;
background-color: #f0f0f0;
border: 1px solid #ddd;
margin-bottom: 10px;
cursor: grab;
border-radius: 5px;
text-align: center;
font-weight: bold;
color: #555;
}
.component:hover {
background-color: #e0e0e0;
}
.canvas {
flex-grow: 1;
border: 2px dashed #ccc;
min-height: 400px;
padding: 15px;
background-color: #f9f9f9;
position: relative; /* Untuk penempatan komponen */
}
.canvas.drag-over {
border-color: #2ecc71;
background-color: #e8f9e8;
}
.canvas-component { /* Style for components dropped into canvas */
border: 1px solid #a0a0a0;
padding: 10px;
margin-bottom: 10px;
background-color: #fff;
cursor: move;
min-height: 30px;
box-shadow: 0 2px 5px rgba(0,0,0,0.05);
}

3. JavaScript: Menghidupkan Fitur Drag-and-Drop

Inilah bagian paling seru! JavaScript akan menjadi "tangan" kita yang memindahkan komponen dari toolbox ke kanvas. Kita akan menggunakan API Drag and Drop bawaan browser. Ini melibatkan beberapa event: dragstart (saat mulai menyeret), dragover (saat kursor di atas area tujuan), dragleave, dan drop (saat komponen dilepaskan). Ini adalah inti dari fungsionalitas page builder.


const components = document.querySelectorAll('.component');
const canvas = document.querySelector('.canvas');
let draggedComponentType = null;
components.forEach(comp => {
comp.addEventListener('dragstart', (e) => {
draggedComponentType = e.target.dataset.type;
e.dataTransfer.setData('text/plain', draggedComponentType);
});
});
canvas.addEventListener('dragover', (e) => {
e.preventDefault(); // Penting untuk mengizinkan drop
canvas.classList.add('drag-over');
});
canvas.addEventListener('dragleave', () => {
canvas.classList.remove('drag-over');
});
canvas.addEventListener('drop', (e) => {
e.preventDefault();
canvas.classList.remove('drag-over');
if (draggedComponentType) {
const newElement = document.createElement('div');
newElement.classList.add('canvas-component');
switch (draggedComponentType) {
case 'heading':
const h2 = document.createElement('h2');
h2.textContent = 'Ini Judul Baru';
newElement.append(h2);
break;
case 'paragraph':
const p = document.createElement('p');
p.textContent = 'Ini paragraf baru yang bisa kamu edit.';
newElement.append(p);
break;
case 'image':
const img = document.createElement('img');
img.src = 'https://via.placeholder.com/150'; // Placeholder image
img.alt = 'Gambar Placeholder';
img.style.maxWidth = '100%';
newElement.append(img);
break;
default:
newElement.textContent = 'Komponen Tidak Dikenali';
}
canvas.append(newElement);
draggedComponentType = null; // Reset
}
});

Ini hanya contoh dasar dari fungsi drag-and-drop. Di dunia nyata, page builder akan jauh lebih kompleks, dengan fitur edit inline, resize, delete, dan bahkan penyimpanan ke database. Tapi, dari sini, Anda sudah punya fondasi yang kuat untuk membangun aplikasi web kustom.

Mengapa Proyek Ini Penting untuk Portofolio Anda?

Membangun kalkulator dan page builder (meskipun sederhana) adalah cara terbaik untuk benar-benar memahami bagaimana HTML, CSS, dan JavaScript bekerja sama. Ini bukan cuma tentang menghafal sintaks, tapi juga tentang memahami logika, alur data, dan interaksi pengguna. Anda belajar:

  • Strukturisasi dengan HTML: Bagaimana menata elemen secara semantik dan fungsional.
  • Styling dengan CSS: Cara membuat antarmuka menarik dan responsif.
  • Interaktivitas dengan JavaScript: Menghidupkan elemen, mengelola logika aplikasi, dan merespons tindakan pengguna.

Kedua proyek ini menunjukkan kemampuan Anda dalam membangun aplikasi frontend dari nol, dan itu adalah aset berharga bagi setiap programmer web. Anggap ini seperti Anda berhasil merakit dua jenis kendaraan berbeda di bengkel Anda sendiri: satu untuk kebutuhan dasar, satu lagi untuk kustomisasi tingkat lanjut. Ini adalah langkah penting dalam belajar pengembangan web.

Langkah Selanjutnya: Kembangkan Kreativitas Anda!

Sekarang Anda sudah punya resep dasarnya. Jangan berhenti sampai di sini! Anda bisa mengembangkan kalkulator menjadi kalkulator saintifik, atau bahkan kalkulator konversi mata uang. Untuk page builder, tambahkan fitur seperti:

  • Mengedit teks langsung di kanvas.
  • Mengubah ukuran komponen.
  • Menyimpan layout yang sudah dibuat.
  • Menambahkan lebih banyak jenis komponen (tombol, video, map).

Dunia web itu seperti lautan luas. Dengan HTML, CSS, dan JavaScript sebagai perahu dan kompas Anda, tidak ada batasan untuk menjelajahi dan menciptakan pulau-pulau digital impian Anda sendiri. Selamat bereksperimen dan teruslah "memasak" proyek-proyek keren!