Memiliki portofolio online bukan lagi sekadar tren, melainkan kebutuhan mutlak bagi profesional di era digital, baik Anda seorang desainer, penulis, maupun pengembang software. Portofolio adalah “rumah digital” yang bekerja 24 jam untuk memamerkan keahlian Anda kepada klien atau rekruter.
Banyak pemula tergoda menggunakan website builder instan. Namun, membangun portofolio sendiri dengan HTML dan CSS murni memberikan Anda kontrol penuh, kode yang ringan, dan yang terpenting: pemahaman mendasar tentang bagaimana web bekerja.
Dalam tutorial ini, kita akan membangun halaman portofolio single-page yang modern, responsif (cocok di HP dan Laptop), dan elegan dari nol. Tidak perlu framework berat, hanya kode murni.
Persiapan Tempur
Sebelum menulis baris kode pertama, mari siapkan lingkungan kerja Anda agar terorganisir.
- Text Editor: Saya merekomendasikan Visual Studio Code (VS Code), namun Notepad++ atau Sublime Text juga bisa digunakan.
- Web Browser: Google Chrome, Firefox, atau Edge untuk melihat hasil.
- Struktur Folder:
- Buat folder baru di komputer Anda, beri nama
portofolioku. - Di dalamnya, buat file kosong bernama
index.html. - Buat file kosong lain bernama
style.css. - (Opsional) Buat folder
imgjika Anda punya foto sendiri. Untuk tutorial ini, kita akan menggunakan gambar placeholder online agar Anda bisa langsung praktik.
- Buat folder baru di komputer Anda, beri nama
Langkah 1: Membangun Kerangka HTML
HTML (HyperText Markup Language) adalah tulang punggung website Anda. Kita akan menggunakan elemen semantic (seperti <header>, <section>, <footer>) agar kode rapi dan disukai mesin pencari (SEO friendly).
Salin kode berikut sepenuhnya ke dalam file index.html Anda.
HTML
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Portofolio Saya | Web Developer</title>
<link rel="stylesheet" href="style.css">
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600&display=swap" rel="stylesheet">
</head>
<body>
<nav class="navbar">
<div class="container">
<a href="#" class="logo">Portofolio.</a>
<ul class="nav-links">
<li><a href="#home">Home</a></li>
<li><a href="#about">Tentang</a></li>
<li><a href="#projects">Proyek</a></li>
<li><a href="#contact">Kontak</a></li>
</ul>
</div>
</nav>
<section id="home" class="hero">
<div class="container hero-content">
<div class="hero-text">
<h1>Halo, Saya <span class="highlight">Budi Santoso</span></h1>
<p>Seorang Web Developer yang berfokus menciptakan pengalaman digital yang fungsional dan estetis.</p>
<a href="#projects" class="btn">Lihat Karya Saya</a>
</div>
<div class="hero-image">
<img src="https://via.placeholder.com/400x400/333333/ffffff?text=Foto+Profil" alt="Foto Profil">
</div>
</div>
</section>
<section id="about" class="about-section">
<div class="container">
<h2>Tentang Saya</h2>
<p>Saya adalah pengembang web antusias yang berbasis di Jakarta. Saya memiliki keahlian dalam HTML, CSS, dan JavaScript. Saya senang memecahkan masalah kompleks dan mengubahnya menjadi desain antarmuka yang sederhana.</p>
<div class="skills">
<span class="skill-tag">HTML5</span>
<span class="skill-tag">CSS3</span>
<span class="skill-tag">JavaScript</span>
<span class="skill-tag">Responsive Design</span>
</div>
</div>
</section>
<section id="projects" class="projects-section">
<div class="container">
<h2>Proyek Terbaru</h2>
<div class="project-grid">
<div class="project-card">
<img src="https://via.placeholder.com/300x200/4a90e2/ffffff?text=Project+1" alt="Project 1">
<div class="card-info">
<h3>Website E-Commerce</h3>
<p>Toko online responsif dengan fitur keranjang belanja.</p>
</div>
</div>
<div class="project-card">
<img src="https://via.placeholder.com/300x200/e24a4a/ffffff?text=Project+2" alt="Project 2">
<div class="card-info">
<h3>Aplikasi To-Do List</h3>
<p>Aplikasi manajemen tugas menggunakan JavaScript murni.</p>
</div>
</div>
<div class="project-card">
<img src="https://via.placeholder.com/300x200/50e24a/ffffff?text=Project+3" alt="Project 3">
<div class="card-info">
<h3>Landing Page Startup</h3>
<p>Halaman pendaratan modern untuk perusahaan teknologi.</p>
</div>
</div>
</div>
</div>
</section>
<footer id="contact">
<div class="container">
<h2>Mari Bekerja Sama</h2>
<p>Tertarik membuat proyek hebat? Hubungi saya.</p>
<a href="mailto:email@contoh.com" class="btn btn-outline">Kirim Email</a>
<div class="socials">
<p>© 2024 Budi Santoso. Dibuat dengan HTML & CSS.</p>
</div>
</div>
</footer>
</body>
</html>
Penjelasan Singkat:
id="home",id="about": Digunakan sebagai target link navigasi (anchor link).class="container": Teknik standar untuk menjaga konten tetap di tengah layar dan tidak melebar ke pinggir monitor yang besar.
Langkah 2: Mempercantik dengan CSS
Sekarang kita akan memberikan “make up” agar website terlihat profesional. Kita akan menggunakan Flexbox untuk tata letak dan Media Queries agar website tetap rapi saat dibuka di HP.
Salin kode ini ke dalam file style.css.
CSS
/* 1. Reset Dasar & Variabel */
:root {
--primary-color: #2563eb; /* Biru modern */
--dark-bg: #1e293b;
--light-bg: #f8fafc;
--text-color: #334155;
--white: #ffffff;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box; /* Penting agar padding tidak menambah lebar elemen */
}
body {
font-family: 'Poppins', sans-serif;
line-height: 1.6;
color: var(--text-color);
background-color: var(--light-bg);
}
/* Utilitas Container */
.container {
max-width: 1100px;
margin: 0 auto;
padding: 0 20px;
}
/* 2. Styling Navigasi */
.navbar {
background-color: var(--white);
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
position: fixed; /* Menu tetap di atas saat scroll */
width: 100%;
top: 0;
z-index: 1000;
}
.navbar .container {
display: flex;
justify-content: space-between;
align-items: center;
height: 70px;
}
.logo {
font-size: 1.5rem;
font-weight: 600;
color: var(--primary-color);
text-decoration: none;
}
.nav-links {
list-style: none;
display: flex;
}
.nav-links li {
margin-left: 20px;
}
.nav-links a {
text-decoration: none;
color: var(--text-color);
font-weight: 500;
transition: color 0.3s;
}
.nav-links a:hover {
color: var(--primary-color);
}
/* 3. Styling Hero Section */
.hero {
height: 100vh; /* Tinggi layar penuh */
display: flex;
align-items: center;
background-color: var(--white);
padding-top: 70px; /* Kompensasi fixed navbar */
}
.hero-content {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
.hero-text h1 {
font-size: 3rem;
margin-bottom: 20px;
line-height: 1.2;
}
.highlight {
color: var(--primary-color);
}
.hero-image img {
border-radius: 50%; /* Membuat gambar bulat */
border: 5px solid var(--primary-color);
width: 350px;
height: 350px;
object-fit: cover;
}
/* Tombol */
.btn {
display: inline-block;
background: var(--primary-color);
color: var(--white);
padding: 10px 30px;
text-decoration: none;
border-radius: 5px;
margin-top: 20px;
transition: transform 0.3s;
}
.btn:hover {
transform: translateY(-3px); /* Efek naik saat dihover */
}
/* 4. Sections Umum */
section {
padding: 80px 0;
}
h2 {
text-align: center;
font-size: 2.5rem;
margin-bottom: 40px;
color: var(--dark-bg);
}
/* 5. About & Skills */
.about-section {
background-color: var(--light-bg);
text-align: center;
}
.about-section p {
max-width: 700px;
margin: 0 auto 30px auto;
}
.skills {
display: flex;
justify-content: center;
gap: 15px;
flex-wrap: wrap;
}
.skill-tag {
background: #e2e8f0;
padding: 8px 16px;
border-radius: 20px;
font-weight: 600;
}
/* 6. Grid Proyek */
.projects-section {
background-color: var(--white);
}
.project-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 30px;
}
.project-card {
background: var(--white);
border-radius: 10px;
overflow: hidden;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
transition: transform 0.3s;
}
.project-card:hover {
transform: scale(1.02);
}
.project-card img {
width: 100%;
height: 200px;
object-fit: cover;
}
.card-info {
padding: 20px;
}
/* 7. Footer */
footer {
background: var(--dark-bg);
color: var(--white);
text-align: center;
padding: 60px 0;
}
.btn-outline {
border: 2px solid var(--white);
background: transparent;
margin-bottom: 30px;
}
.btn-outline:hover {
background: var(--white);
color: var(--dark-bg);
}
/* 8. Responsiveness (Mobile) */
@media (max-width: 768px) {
.hero-content {
flex-direction: column-reverse; /* Gambar di atas teks di HP */
text-align: center;
}
.hero-text h1 {
font-size: 2rem;
}
.hero-image img {
width: 250px;
height: 250px;
margin-bottom: 30px;
}
.nav-links {
display: none; /* Menyembunyikan menu di HP (sederhana) */
}
}
Poin Penting CSS:
flex: Digunakan pada.navbardan.hero-contentuntuk menyusun elemen bersebelahan secara otomatis.grid: Digunakan pada.project-griduntuk membuat tata letak galeri yang otomatis turun ke bawah jika layar sempit.@media: Blok kode di bagian paling bawah memastikan tampilan menyesuaikan diri jika dibuka di layar kecil (lebar < 768px).
Langkah 3: Menjalankan dan Menguji
Sekarang momen kebenarannya.
- Simpan kedua file (
index.htmldanstyle.css). - Buka folder
portofoliokudi komputer Anda. - Klik dua kali pada file
index.html. File ini akan terbuka di browser default Anda.
Seharusnya Anda melihat sebuah website yang memiliki menu navigasi di atas, foto profil bulat besar, bagian skill, dan daftar proyek dalam bentuk kartu grid.
Solusi Jika Error (Troubleshooting)
Terkadang hasil tidak sesuai harapan. Berikut masalah umum dan cara memperbaikinya:
1. Tampilan Berantakan (CSS Tidak Terbaca)
- Cek Nama File: Pastikan nama file adalah
style.css(huruf kecil semua), bukanStyles.cssataustyle.css.txt. - Cek Link: Periksa baris HTML
<link rel="stylesheet" href="style.css">. Apakah file CSS dan HTML berada di folder yang sama? - Cache: Tekan
Ctrl + F5(Windows) atauCmd + Shift + R(Mac) di browser untuk memaksa refresh.
2. Gambar Tidak Muncul
- Artikel ini menggunakan gambar online (placeholder). Pastikan Anda terkoneksi internet.
- Jika Anda mengganti dengan foto sendiri, pastikan path-nya benar. Misal:
<img src="img/foto-saya.jpg">. Jangan gunakan path absolut komputer sepertiC:/User/Documents/...karena tidak akan bekerja saat diupload.
3. Menu Navigasi Hilang di HP
- Dalam kode CSS di atas (bagian
@media), saya menyetel.nav-links { display: none; }untuk HP agar tampilan tidak rusak. Ini normal untuk tutorial dasar. Untuk membuatnya muncul (hamburger menu), diperlukan JavaScript tambahan.
Kesimpulan
Selamat! Anda baru saja membangun fondasi identitas digital Anda sendiri. Website ini ringan, cepat, dan kodenya bersih. Anda telah belajar tentang struktur HTML semantik, properti Flexbox dan Grid pada CSS, serta konsep dasar Responsiveness.