Kode HTML CSS dan JavaScript untuk membangun website personal - Arubiosuka

Kode HTML CSS dan JavaScript untuk membangun website personal

Kode HTML CSS dan JavaScript untuk membangun website personal


 Kode HTML

<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Nama Anda | Website Personal</title>
    <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&display=swap" rel="stylesheet">
   
    <style>
        /* Gaya Dasar dan Reset Minimal */
        body {
            font-family: 'Montserrat', sans-serif;
            margin: 0;
            padding: 0;
            box-sizing: border-box; /* Memastikan padding dan border dihitung dalam lebar elemen */
            color: #333; /* Warna teks utama */
            line-height: 1.6;
            background-color: #f4f4f9; /* Latar belakang bersih */
        }

        /* Tata Letak Responsif Sederhana */
        .container {
            width: 90%;
            max-width: 1200px; /* Batas lebar maksimum */
            margin: 0 auto; /* Tengah */
            padding: 20px 0;
        }
       
        /* Header dan Navigasi */
        header {
            background-color: #ffffff; /* Latar belakang header putih */
            box-shadow: 0 2px 4px rgba(0,0,0,0.1); /* Sedikit bayangan */
            position: sticky;
            top: 0;
            z-index: 1000;
        }

        nav ul {
            list-style: none;
            padding: 0;
            margin: 0;
            display: flex; /* Untuk tata letak horizontal */
            justify-content: flex-end; /* Posisikan tautan ke kanan */
            align-items: center;
        }

        nav ul li a {
            text-decoration: none;
            color: #333;
            padding: 15px 20px;
            display: block;
            font-weight: 700;
            transition: color 0.3s;
        }
       
        nav ul li a:hover {
            color: #007bff; /* Warna hover */
        }
       
        .logo {
            float: left;
            font-size: 1.5em;
            font-weight: 700;
            padding: 10px 0;
            color: #007bff;
        }
       
        /* Bagian Hero (Slogan/Intro) */
        .hero {
            text-align: center;
            padding: 80px 20px;
            background-color: #e9ecef; /* Latar belakang hero yang lembut */
            margin-bottom: 20px;
        }
       
        .hero h1 {
            font-size: 2.5em;
            margin-bottom: 0.5em;
            color: #007bff;
        }
       
        .hero p {
            font-size: 1.2em;
            color: #555;
            max-width: 600px;
            margin: 0 auto;
        }
       
        /* Bagian Konten (About, Skill, Project) */
        section {
            padding: 40px 0;
        }
       
        h2 {
            text-align: center;
            font-size: 2em;
            margin-bottom: 40px;
            color: #333;
            border-bottom: 3px solid #007bff;
            display: inline-block;
            padding-bottom: 5px;
        }

        .section-content {
            display: flex;
            flex-wrap: wrap; /* Memungkinkan wrap pada layar kecil */
            gap: 20px;
            justify-content: space-around;
        }
       
        .card {
            background: #ffffff;
            padding: 20px;
            box-shadow: 0 4px 8px rgba(0,0,0,0.1);
            border-radius: 8px;
            flex: 1 1 300px; /* Fleksibel, minimal lebar 300px */
            min-height: 200px;
        }
       
        /* Footer */
        footer {
            background-color: #333;
            color: white;
            text-align: center;
            padding: 20px 0;
            margin-top: 40px;
        }

        /* Media Queries untuk Responsif */
        @media (max-width: 768px) {
            nav ul {
                justify-content: center; /* Navigasi tengah pada layar kecil */
            }
           
            nav ul li a {
                padding: 10px 15px;
            }
           
            .logo {
                float: none;
                text-align: center;
                display: block;
            }

            .hero h1 {
                font-size: 2em;
            }

            .hero p {
                font-size: 1em;
            }
           
            .section-content {
                flex-direction: column; /* Konten menjadi vertikal pada layar kecil */
                gap: 10px;
            }
           
            .card {
                flex: 1 1 100%; /* Lebar penuh pada layar kecil */
            }
        }
    </style>
</head>
<body>
   
    <header>
        <div class="container">
            <span class="logo">NAMA SAYA</span>
            <nav>
                <ul>
                    <li><a href="#home">Home</a></li>
                    <li><a href="#about">Tentang Saya</a></li>
                    <li><a href="#skills">Keahlian</a></li>
                    <li><a href="#projects">Proyek</a></li>
                    <li><a href="#contact">Kontak</a></li>
                </ul>
            </nav>
        </div>
    </header>

    <section id="home" class="hero">
        <div class="container">
            <h1>Halo, Saya [Nama Anda]</h1>
            <p>Seorang [Gelar/Profesi Anda] yang bersemangat dalam [Minat Utama/Slogan Pribadi].</p>
        </div>
    </section>
   
    <section id="about">
        <div class="container">
            <center><h2>Tentang Saya</h2></center>
            <div class="section-content">
                <p>Tuliskan ringkasan singkat yang kuat dan menarik tentang siapa Anda, apa yang Anda lakukan, dan apa nilai yang Anda berikan. Fokus pada keunggulan Anda.</p>
                <p>Contoh: "Saya memiliki pengalaman X tahun dalam pengembangan web, berspesialisasi dalam tumpukan MERN. Saya percaya pada desain yang bersih dan fungsionalitas yang *powerful*."</p>
            </div>
        </div>
    </section>

    ---
   
    <section id="skills">
        <div class="container">
            <center><h2>Keahlian</h2></center>
            <div class="section-content">
                <div class="card">
                    <h3>Frontend</h3>
                    <p>HTML5, CSS3, JavaScript, React/Vue.js.</p>
                </div>
                <div class="card">
                    <h3>Backend</h3>
                    <p>Node.js, Python, PHP, Database (SQL/NoSQL).</p>
                </div>
                <div class="card">
                    <h3>Desain & Tools</h3>
                    <p>Figma, Git/GitHub, Optimasi SEO, AWS/Heroku.</p>
                </div>
            </div>
        </div>
    </section>
   
    ---

    <section id="projects">
        <div class="container">
            <center><h2>Proyek Pilihan</h2></center>
            <div class="section-content">
                <div class="card">
                    <h3>Judul Proyek 1</h3>
                    <p>Deskripsi singkat tentang proyek ini, peran Anda, dan teknologi yang digunakan. [Link ke Proyek]</p>
                </div>
                <div class="card">
                    <h3>Judul Proyek 2</h3>
                    <p>Deskripsi singkat tentang proyek ini, peran Anda, dan teknologi yang digunakan. [Link ke Proyek]</p>
                </div>
                <div class="card">
                    <h3>Judul Proyek 3</h3>
                    <p>Deskripsi singkat tentang proyek ini, peran Anda, dan teknologi yang digunakan. [Link ke Proyek]</p>
                </div>
            </div>
        </div>
    </section>
   
    ---

    <section id="contact">
        <div class="container">
            <center><h2>Hubungi Saya</h2></center>
            <div class="section-content">
                <p style="text-align: center;">Tertarik untuk berkolaborasi? Kirimkan email ke: <a href="mailto:emailanda@domain.com">emailanda@domain.com</a></p>
                <p style="text-align: center;">Atau temukan saya di:</p>
                <p style="text-align: center;">
                    <a href="#" style="color: #007bff; margin: 0 10px;">LinkedIn</a> |
                    <a href="#" style="color: #007bff; margin: 0 10px;">GitHub</a> |
                    <a href="#" style="color: #007bff; margin: 0 10px;">Twitter</a>
                </p>
            </div>
        </div>
    </section>

    <footer>
        <div class="container">
            <p>&copy; 2025 Nama Anda. Hak Cipta Dilindungi. Dibuat dengan ❤️.</p>
        </div>
    </footer>

</body>
</html>

Kode CSS

/* ============================= */
/* 1. RESET DAN DASAR */
/* ============================= */

/* Import Font dari Google Fonts (Montserrat) */
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&display=swap');

* {
    /* Box Sizing untuk memudahkan tata letak responsif */
    box-sizing: border-box;
}

body {
    font-family: 'Montserrat', sans-serif;
    margin: 0;
    padding: 0;
    color: #333; /* Warna teks utama yang gelap */
    line-height: 1.6;
    background-color: #f4f4f9; /* Latar belakang bersih dan lembut */
    scroll-behavior: smooth; /* Animasi scroll yang halus */
}

a {
    text-decoration: none; /* Hilangkan garis bawah pada tautan */
    color: #007bff; /* Warna tautan aksen */
    transition: color 0.3s ease;
}

a:hover {
    color: #0056b3;
}

.container {
    width: 90%;
    max-width: 1200px; /* Batas lebar maksimum untuk kerapian */
    margin: 0 auto; /* Posisi di tengah */
    padding: 0 15px; /* Padding samping agar tidak terlalu mepet */
}

/* ============================= */
/* 2. HEADER & NAVIGASI */
/* ============================= */

header {
    background-color: #ffffff;
    box-shadow: 0 2px 5px rgba(0,0,0,0.1); /* Bayangan lembut */
    position: sticky; /* Tetap di atas saat scroll */
    top: 0;
    z-index: 1000;
}

header .container {
    display: flex;
    justify-content: space-between; /* Logo di kiri, Navigasi di kanan */
    align-items: center;
    min-height: 60px;
}

.logo {
    font-size: 1.6em;
    font-weight: 700;
    color: #007bff;
    text-transform: uppercase;
}

nav ul {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
}

nav ul li a {
    color: #333;
    padding: 10px 15px;
    font-weight: 600;
    display: block;
}

nav ul li a:hover {
    color: #007bff;
    background-color: #f8f9fa; /* Efek hover latar belakang */
    border-radius: 4px;
}

/* ============================= */
/* 3. BAGIAN HERO/INTRO */
/* ============================= */

.hero {
    text-align: center;
    padding: 100px 20px;
    background: linear-gradient(135deg, #e9ecef, #ffffff); /* Gradien lembut */
    margin-bottom: 40px;
    border-radius: 0 0 15px 15px;
}

.hero h1 {
    font-size: 3em;
    margin-bottom: 0.2em;
    color: #212529; /* Warna teks gelap yang kuat */
    font-weight: 700;
}

.hero p {
    font-size: 1.3em;
    color: #6c757d;
    max-width: 700px;
    margin: 0.5em auto 0;
}

/* ============================= */
/* 4. SECTIONS (Tentang, Skill, Proyek) */
/* ============================= */

section {
    padding: 60px 0;
}

section:nth-child(even) {
    background-color: #ffffff; /* Warna latar belakang selang-seling */
}

h2 {
    text-align: center;
    font-size: 2.5em;
    margin-bottom: 50px;
    color: #333;
    display: block;
    width: fit-content;
    margin-left: auto;
    margin-right: auto;
    border-bottom: 4px solid #007bff; /* Garis bawah aksen */
    padding-bottom: 5px;
}

.section-content {
    display: flex;
    flex-wrap: wrap;
    gap: 30px;
    justify-content: center;
}

.card {
    background: #ffffff;
    padding: 30px;
    box-shadow: 0 6px 12px rgba(0,0,0,0.1);
    border-radius: 10px;
    flex: 1 1 300px; /* Fleksibel dengan minimal lebar 300px */
    transition: transform 0.3s ease;
    border-left: 5px solid #007bff; /* Aksen warna */
}

.card:hover {
    transform: translateY(-5px); /* Efek mengangkat saat di-hover */
    box-shadow: 0 10px 20px rgba(0,0,0,0.15);
}

.card h3 {
    color: #007bff;
    margin-top: 0;
    font-size: 1.5em;
}

/* Bagian Kontak */
#contact p {
    font-size: 1.1em;
    text-align: center;
    margin-bottom: 15px;
}

/* ============================= */
/* 5. FOOTER */
/* ============================= */

footer {
    background-color: #212529; /* Warna gelap profesional */
    color: #f4f4f9;
    text-align: center;
    padding: 25px 0;
    margin-top: 50px;
}

footer a {
    color: #007bff;
}

/* ============================= */
/* 6. MEDIA QUERIES (RESPONSIVITAS) */
/* ============================= */

/* Layar Tablet dan di bawahnya (Maks 992px) */
@media (max-width: 992px) {
    .hero h1 {
        font-size: 2.5em;
    }
}

/* Layar Mobile (Maks 768px) */
@media (max-width: 768px) {
    header .container {
        flex-direction: column; /* Tumpuk Logo dan Navigasi */
        padding-bottom: 10px;
    }
   
    nav ul {
        justify-content: center; /* Rata tengah Navigasi */
        flex-wrap: wrap;
    }

    nav ul li a {
        padding: 8px 10px;
        font-size: 0.9em;
    }

    .hero {
        padding: 60px 20px;
    }
   
    .hero h1 {
        font-size: 2em;
    }

    .hero p {
        font-size: 1.1em;
    }

    h2 {
        font-size: 2em;
    }
   
    .section-content {
        flex-direction: column; /* Kartu menjadi tumpukan vertikal */
        gap: 20px;
    }
}


Kode Javascript

// =============================================
// 1. Smooth Scrolling (Perpindahan Halus)
// =============================================

document.querySelectorAll('a[href^="#"]').forEach(anchor => {
    anchor.addEventListener('click', function (e) {
        // Mencegah perilaku default tautan (perpindahan instan)
        e.preventDefault();

        // Ambil ID target dari atribut href (e.g., '#about')
        const targetId = this.getAttribute('href');
       
        // Dapatkan elemen target
        const targetElement = document.querySelector(targetId);

        if (targetElement) {
            // Scroll ke elemen target dengan perilaku 'smooth'
            targetElement.scrollIntoView({
                behavior: 'smooth'
            });
        }
    });
});


// =============================================
// 2. Navigasi Aktif Otomatis saat Scrolling
// =============================================

// Ambil semua elemen section yang perlu dipantau
const sections = document.querySelectorAll('section');

// Ambil semua tautan navigasi
const navLinks = document.querySelectorAll('nav ul li a');

// Opsi untuk Intersection Observer
const observerOptions = {
    // rootMargin: '0px',
    // margin top 60px ke atas untuk mengimbangi header sticky
    rootMargin: '-60px 0px -50% 0px',
    threshold: 0 // Tidak perlu threshold, cukup rootMargin
};

// Fungsi Callback yang dijalankan saat elemen masuk/keluar viewport
const observerCallback = (entries, observer) => {
    entries.forEach(entry => {
        // Jika section sedang terlihat (intersecting)
        if (entry.isIntersecting) {
            // Hapus kelas 'active' dari semua tautan
            navLinks.forEach(link => {
                link.classList.remove('active');
            });

            // Tambahkan kelas 'active' pada tautan yang sesuai
            const currentId = entry.target.id;
            const correspondingLink = document.querySelector(`nav ul li a[href="#${currentId}"]`);
           
            if (correspondingLink) {
                correspondingLink.classList.add('active');
            }
        }
    });
};

// Buat Intersection Observer
const observer = new IntersectionObserver(observerCallback, observerOptions);

// Daftarkan setiap section ke observer
sections.forEach(section => {
    observer.observe(section);
});

1 komentar


EmoticonEmoticon

Formulir Kontak