<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[deni yuniawan]]></title><description><![CDATA[deni yuniawan]]></description><link>https://deniyuniawan.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 05:49:51 GMT</lastBuildDate><atom:link href="https://deniyuniawan.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Membangun Model Prediksi Persetujuan Pinjaman dengan Machine Learning]]></title><description><![CDATA[Dalam dunia keuangan, kemampuan untuk memprediksi apakah seorang nasabah layak mendapatkan pinjaman adalah hal yang krusial. Keputusan yang salah dapat menyebabkan kerugian finansial bagi lembaga pemb]]></description><link>https://deniyuniawan.hashnode.dev/membangun-model-prediksi-persetujuan-pinjaman-dengan-machine-learning</link><guid isPermaLink="true">https://deniyuniawan.hashnode.dev/membangun-model-prediksi-persetujuan-pinjaman-dengan-machine-learning</guid><category><![CDATA[AI]]></category><category><![CDATA[Machine Learning]]></category><category><![CDATA[Data Science]]></category><dc:creator><![CDATA[deni yuniawan]]></dc:creator><pubDate>Thu, 03 Jul 2025 05:10:15 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/685022dc00b401e40fbad471/e6f5e752-21db-4537-883b-376ff00ed391.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Dalam dunia keuangan, kemampuan untuk memprediksi apakah seorang nasabah layak mendapatkan pinjaman adalah hal yang krusial. Keputusan yang salah dapat menyebabkan kerugian finansial bagi lembaga pemberi pinjaman. Dalam studi kasus ini, akan membangun sebuah model <em>machine learning</em> untuk memprediksi persetujuan pinjaman berdasarkan data historis nasabah, dengan menggunakan dataset <a href="https://www.kaggle.com/datasets/ninzaami/loan-predication">Loan Predication problem</a> dari akun kaggle <strong>amit parjapat.</strong></p>
<p>Tujuan utama kita adalah membangun model yang andal dengan menangani berbagai tantangan dalam data, seperti nilai yang hilang (<em>missing values</em>) dan data yang tidak seimbang (<em>imbalanced data</em>).</p>
<h2>Alur Kerja Proyek</h2>
<p>Berikut adalah langkah-langkah yang akan kita lalui dalam proyek ini:</p>
<ol>
<li><p><strong>Impor Library:</strong> Menyiapkan semua library Python yang dibutuhkan.</p>
</li>
<li><p><strong>Muat &amp; Eksplorasi Data:</strong> Memuat dataset dan melakukan eksplorasi awal untuk memahami karakteristiknya.</p>
</li>
<li><p><strong>Pembersihan &amp; Pra-pemrosesan Data:</strong></p>
<ul>
<li><p>Menangani nilai yang hilang.</p>
</li>
<li><p>Melakukan <em>One-Hot Encoding</em> untuk fitur kategorikal.</p>
</li>
<li><p>Memisahkan data menjadi set pelatihan (<em>training</em>) dan pengujian (<em>testing</em>).</p>
</li>
<li><p>Menerapkan <em>Feature Scaling</em> menggunakan <code>StandardScaler</code>.</p>
</li>
</ul>
</li>
<li><p><strong>Penyeimbangan Data (SMOTE):</strong> Mengatasi masalah kelas tidak seimbang pada data pelatihan.</p>
</li>
<li><p><strong>Pelatihan Model:</strong> Melatih model Regresi Logistik.</p>
</li>
<li><p><strong>Evaluasi Model:</strong> Mengevaluasi performa model pada data pengujian.</p>
</li>
</ol>
<hr />
<h2>1. Impor Library</h2>
<p>Langkah pertama adalah mengimpor semua library yang kita perlukan untuk analisis dan pemodelan.</p>
<pre><code class="language-python">import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from imblearn.over_sampling import SMOTE

sns.set_style('whitegrid')
</code></pre>
<h2>2. Muat &amp; Eksplorasi Data</h2>
<p>Kita akan memuat dataset <code>loan.csv</code> dan melihat beberapa baris pertama serta informasi dasarnya. Kolom <code>Loan_ID</code> tidak relevan untuk prediksi, jadi kita akan menghapusnya.</p>
<pre><code class="language-python">df = pd.read_csv('loan.csv')
df = df.drop('Loan_ID', axis=1)
print(df.head())
</code></pre>
<p><strong>Output:</strong></p>
<pre><code class="language-python">   Gender Married Dependents     Education Self_Employed  ApplicantIncome  \
0   Male      No          0      Graduate            No             5849
1   Male     Yes          1      Graduate            No             4583
2   Male     Yes          0      Graduate           Yes             3000
3   Male     Yes          0  Not Graduate            No             2583
4   Male      No          0      Graduate            No             6000

   CoapplicantIncome  LoanAmount  Loan_Amount_Term  Credit_History  \
0                0.0         NaN             360.0             1.0
1             1508.0       128.0             360.0             1.0
2                0.0        66.0             360.0             1.0
3             2358.0       120.0             360.0             1.0
4                0.0       141.0             360.0             1.0

  Property_Area Loan_Status
0         Urban           Y
1         Rural           N
2         Urban           Y
3         Urban           Y
4         Urban           Y
</code></pre>
<p>Mari kita lihat distribusi dari variabel target kita, <code>Loan_Status</code>.</p>
<pre><code class="language-python">sns.countplot(x='Loan_Status', data=df)
plt.title('Distribusi Status Persetujuan Pinjaman')
plt.show()
</code></pre>
<p>Dari plot, kita bisa melihat bahwa jumlah pinjaman yang disetujui ('Y') lebih banyak daripada yang ditolak ('N'). Ini menunjukkan adanya ketidakseimbangan kelas, yang perlu kita tangani nanti.</p>
<p>Selanjutnya, kita lihat hubungan antara riwayat kredit (<code>Credit_History</code>) dengan status pinjaman.</p>
<pre><code class="language-python">sns.countplot(x='Credit_History', hue='Loan_Status', data=df)
plt.title('Riwayat Kredit vs. Status Pinjaman')
plt.show()
</code></pre>
<p>Visualisasi ini menunjukkan bahwa nasabah dengan riwayat kredit yang baik (nilai 1.0) memiliki kemungkinan yang jauh lebih tinggi untuk mendapatkan persetujuan pinjaman.</p>
<h2>3. Pembersihan &amp; Pra-pemrosesan Data</h2>
<h3>Mengisi Nilai yang Hilang</h3>
<p>Data mentah seringkali memiliki nilai yang hilang. Kita akan mengisinya menggunakan strategi yang sesuai: modus (nilai yang paling sering muncul) untuk data kategorikal dan median untuk data numerik.</p>
<pre><code class="language-python"># Pisahkan kolom berdasarkan tipe data
categorical_cols = df.select_dtypes(include=['object']).columns.drop('Loan_Status')
numerical_cols = df.select_dtypes(include=np.number).columns

# Isi nilai hilang dengan modus untuk kategorikal
for col in categorical_cols:
    df[col] = df[col].fillna(df[col].mode()[0])

# Isi nilai hilang dengan median untuk numerik
for col in numerical_cols:
    df[col] = df[col].fillna(df[col].median())
</code></pre>
<h3>Menangani Kolom Target</h3>
<p>Kolom target <code>Loan_Status</code> masih dalam format 'Y' dan 'N'. Kita perlu mengubahnya menjadi format numerik (1 dan 0).</p>
<pre><code class="language-python">df['Loan_Status'] = df['Loan_Status'].map({'Y': 1, 'N': 0})
df.dropna(subset=['Loan_Status'], inplace=True)
df['Loan_Status'] = df['Loan_Status'].astype(int)
</code></pre>
<h3>Pemisahan Data dan Pra-pemrosesan Lanjutan</h3>
<p>Setelah data bersih, kita pisahkan antara fitur (X) dan target (y). Kemudian, kita bagi menjadi data latih dan data uji.</p>
<pre><code class="language-python">X = df.drop('Loan_Status', axis=1)
y = df['Loan_Status']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
</code></pre>
<p>Kita akan membuat sebuah <em>pipeline</em> pra-pemrosesan menggunakan <code>ColumnTransformer</code> untuk menerapkan <code>StandardScaler</code> pada fitur numerik dan <code>OneHotEncoder</code> pada fitur kategorikal.</p>
<pre><code class="language-python">numerical_features = X.select_dtypes(include=np.number).columns
categorical_features = X.select_dtypes(include=['object']).columns

preprocessor = ColumnTransformer(
    transformers=[
        ('num', StandardScaler(), numerical_features),
        ('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)
    ])

X_train_processed = preprocessor.fit_transform(X_train)
X_test_processed = preprocessor.transform(X_test)
</code></pre>
<h2>4. Penyeimbangan Data (SMOTE)</h2>
<p>Seperti yang kita lihat sebelumnya, data kita tidak seimbang. Ini dapat menyebabkan model menjadi bias terhadap kelas mayoritas. Untuk mengatasinya, kita akan menggunakan teknik <em>oversampling</em> yang disebut SMOTE (<em>Synthetic Minority Over-sampling Technique</em>) hanya pada data pelatihan.</p>
<pre><code class="language-python">print(f'Distribusi kelas sebelum SMOTE: \n{y_train.value_counts()}\n')

smote = SMOTE(random_state=42)
X_train_resampled, y_train_resampled = smote.fit_resample(X_train_processed, y_train)

print(f'Distribusi kelas setelah SMOTE: \n{pd.Series(y_train_resampled).value_counts()}')
</code></pre>
<p><strong>Output:</strong></p>
<pre><code class="language-python">Distribusi kelas sebelum SMOTE: 
Loan_Status
1    337
0    154
Name: count, dtype: int64

Distribusi kelas setelah SMOTE: 
Loan_Status
1    337
0    337
Name: count, dtype: int64
</code></pre>
<p>Sekarang, kelas minoritas dan mayoritas pada data pelatihan kita sudah seimbang.</p>
<h2>5. Pelatihan Model</h2>
<p>Dengan data yang sudah siap, kita akan melatih model Regresi Logistik.</p>
<pre><code class="language-python">model = LogisticRegression(random_state=42)
model.fit(X_train_resampled, y_train_resampled)
</code></pre>
<h2>6. Evaluasi Model</h2>
<p>Langkah terakhir adalah mengevaluasi performa model kita pada data uji yang belum pernah dilihat sebelumnya.</p>
<pre><code class="language-python">y_pred = model.predict(X_test_processed)

print(f"Akurasi Model: {accuracy_score(y_test, y_pred) * 100:.2f}%")
print('---' * 20)
print("Laporan Klasifikasi:")
print(classification_report(y_test, y_pred))
print('---' * 20)

print("Confusion Matrix:")
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')
plt.xlabel('Prediksi')
plt.ylabel('Aktual')
plt.title('Confusion Matrix')
plt.show()
</code></pre>
<p><strong>Output:</strong></p>
<pre><code class="language-python">Akurasi Model: 82.11%
------------------------------------------------------------
Laporan Klasifikasi:
              precision    recall  f1-score   support

           0       0.72      0.68      0.70        38
           1       0.86      0.88      0.87        85

    accuracy                           0.82       123
   macro avg       0.79      0.78      0.79       123
weighted avg       0.82      0.82      0.82       123

------------------------------------------------------------
Confusion Matrix:
</code></pre>
<p>Dari hasil evaluasi, model kita mencapai akurasi sekitar <strong>82.11%</strong>. <em>Precision</em> dan <em>recall</em> untuk kelas 1 (disetujui) cukup tinggi, menunjukkan model sangat baik dalam mengidentifikasi pemohon yang layak. <em>Recall</em> untuk kelas 0 (ditolak) adalah 0.68, yang berarti model berhasil mengidentifikasi 68% dari semua pemohon yang seharusnya ditolak.</p>
<h2>Kesimpulan</h2>
<p>Kita telah berhasil membangun sebuah model <em>machine learning</em> dari awal hingga akhir untuk memprediksi persetujuan pinjaman. Proses ini melibatkan pembersihan data, rekayasa fitur, penanganan data tidak seimbang dengan SMOTE, dan pelatihan model Regresi Logistik. Model yang dihasilkan menunjukkan performa yang baik dan dapat menjadi dasar untuk sistem pengambilan keputusan pinjaman yang lebih canggih.</p>
]]></content:encoded></item><item><title><![CDATA[Segmentasi Pelanggan Mall dengan K-Means Clustering]]></title><description><![CDATA[Pendahuluan
Mengenali karakteristik pelanggan adalah faktor kunci dalam bisnis ritel. Siapa pelanggan Anda? Apa yang mereka inginkan? Bagaimana perilaku belanja mereka? Jawaban dari pertanyaan-pertany]]></description><link>https://deniyuniawan.hashnode.dev/segmentasi-pelanggan-mall-dengan-k-means-clustering</link><guid isPermaLink="true">https://deniyuniawan.hashnode.dev/segmentasi-pelanggan-mall-dengan-k-means-clustering</guid><category><![CDATA[AI]]></category><category><![CDATA[Machine Learning]]></category><category><![CDATA[Data Science]]></category><category><![CDATA[Unsupervised learning]]></category><dc:creator><![CDATA[deni yuniawan]]></dc:creator><pubDate>Tue, 01 Jul 2025 05:35:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/685022dc00b401e40fbad471/75656578-774d-4b7e-ba9b-2b1e00d40678.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Pendahuluan</h2>
<p>Mengenali karakteristik pelanggan adalah faktor kunci dalam bisnis ritel. Siapa pelanggan Anda? Apa yang mereka inginkan? Bagaimana perilaku belanja mereka? Jawaban dari pertanyaan-pertanyaan ini dapat membantu tim pemasaran merancang strategi yang lebih tajam, relevan, dan pada akhirnya , lebih menguntungkan.</p>
<p>pada studi kasus ini berfokus untuk melakukan segmentasi pelanggan sebuah mall menggunakan salah satu algoritma unsupervised learning paling populer: K-Means Clustering. Tujuannya adalah mengelompokkan pelanggan ke dalam segmen-segmen berbeda berdasarkan dua metrik sederhana namun kuat: pendapatan tahunan (annual income) dan skor pengeluaran (spending score).</p>
<p>Dengan analisis ini, membantu untuk bisa mengidentifikasi kelompok pelanggan mana yang paling potensial, mana yang perlu pendekatan khusus, dan mana yang mungkin tidak perlu menjadi prioritas.</p>
<h2>Dataset</h2>
<p>Studi kasus ini menggunakan dataset <a href="https://www.kaggle.com/datasets/vjchoudhary7/customer-segmentation-tutorial-in-python">Mall_Customers.csv</a> dari sebuah dataset di kaggle, yang berisi informasi dasar tentang pelanggan, termasuk:</p>
<ul>
<li><p>CustomerID: ID unik.</p>
</li>
<li><p>Gender: Jenis kelamin.</p>
</li>
<li><p>Age: Usia.</p>
</li>
<li><p>Annual Income (k$): Pendapatan tahunan dalam ribuan dolar.</p>
</li>
<li><p>Spending Score (1-100): Skor yang diberikan oleh mall berdasarkan perilaku belanja.</p>
</li>
</ul>
<p>Untuk analisis ini, kita akan fokus pada Annual Income dan Spending Score.</p>
<h2>Langkah-langkah Analisis</h2>
<p>Proses analisis kita akan melalui beberapa tahapan:</p>
<ol>
<li><p>Eksplorasi Data (EDA): Memahami data lebih dalam.</p>
</li>
<li><p>Pemilihan Fitur: Memilih kolom yang akan digunakan untuk clustering.</p>
</li>
<li><p>Menentukan Jumlah Cluster (K) Optimal: Menggunakan metode "Elbow" untuk menemukan jumlah segmen yang paling pas.</p>
</li>
<li><p>Melatih Model K-Means: Mengelompokkan data menggunakan K yang sudah ditentukan.</p>
</li>
<li><p>Visualisasi dan Interpretasi: Menganalisis hasil segmentasi.</p>
</li>
</ol>
<h2>Eksplorasi Data (EDA)</h2>
<p>Pertama, mengimpor pustaka yang diperlukan dan memuat data dan melihat isi datanya.</p>
<pre><code class="language-python">import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.cluster import KMeans

sns.set_style('whitegrid')
df = pd.read_csv('Mall_Customers.csv')
df.head()
df.info()
df.describe()
df.isnull().sum
</code></pre>
<ul>
<li>import pustaka dan memuat data</li>
</ul>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751340960536/0c9b31f4-6e13-4170-aede-686d1b660a6a.png" alt="" style="display:block;margin:0 auto" />

<p>menampilkan eksplorasi data dan statistik deskriptif</p>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751341136280/ba7f1d94-f556-497d-83ef-ea8092bb2c72.png" alt="" style="display:block;margin:0 auto" />

<p>cek data null/kosong</p>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751341327738/519c0678-477e-4128-8db4-0e89cd902324.png" alt="" style="display:block;margin:0 auto" />

<p>Dari hasil di atas, kita bisa melihat bahwa data kita bersih, tidak ada nilai yang hilang (null), dan siap untuk diolah.</p>
<h2>Pemilihan Fitur</h2>
<p>Seperti yang disebutkan sebelumnya, kita hanya akan menggunakan Annual Income (k$) dan Spending Score (1-100) untuk membuat model segmentasi 2D yang mudah divisualisasikan.</p>
<pre><code class="language-python"># Membuat dataframe baru yang hanya berisi fitur yang dipilih
X = df[['Annual Income (k$)', 'Spending Score (1-100)']].values
</code></pre>
<h2>Menentukan Jumlah Cluster (K) Optimal dengan Metode Elbow</h2>
<p>Salah satu tantangan dalam K-Means adalah menentukan berapa banyak cluster (K) yang harus kita buat. Terlalu sedikit, segmennya akan terlalu umum. Terlalu banyak, segmennya menjadi tidak bermakna.</p>
<p>Metode Elbow membantu kita menemukan K yang optimal dengan cara menghitung Within-Cluster Sum of Squares (WCSS) untuk berbagai nilai K. WCSS adalah jumlah kuadrat jarak antara setiap titik data dengan pusat cluster-nya. Kita mencari titik "siku" (elbow) pada grafik, di mana penambahan jumlah cluster tidak lagi memberikan penurunan WCSS yang signifikan.</p>
<pre><code class="language-python">wcss = []
for i in range(1, 11):
    kmeans = KMeans(n_clusters=i, init='k-means++', max_iter=300, n_init=10, random_state=42)
    kmeans.fit(X)
    wcss.append(kmeans.inertia_)

# Plot Elbow Method
plt.figure(figsize=(10, 5))
plt.plot(range(1, 11), wcss)
plt.title('Metode Elbow')
plt.xlabel('Jumlah Clusters (K)')
plt.ylabel('WCSS (Within-Cluster Sum of Squares)')
plt.show()
</code></pre>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751341690763/bb02c76a-eac5-485a-8a54-34b8662609a0.png" alt="" style="display:block;margin:0 auto" />

<p>Dari grafik di atas, kita bisa melihat bahwa "siku" yang paling jelas ada di K=5. Setelah itu, penurunan WCSS mulai melandai. Jadi, kita akan membagi pelanggan kita menjadi 5 segmen.</p>
<h2>Melatih Model K-Means</h2>
<p>Sekarang kita latih model K-Means dengan K=5.</p>
<pre><code class="language-python">kmeans = KMeans(n_clusters=5, init='k-means++', max_iter=300, n_init=10, random_state=42)
y_kmeans = kmeans.fit_predict(X)
</code></pre>
<p>Variabel y_kmeans sekarang berisi label cluster (dari 0 hingga 4) untuk setiap pelanggan.</p>
<h2>Visualisasi dan Interpretasi</h2>
<p>Inilah bagian yang paling menarik: melihat hasil segmentasi secara visual.</p>
<pre><code class="language-python">plt.figure(figsize=(12, 8))

# Plot data points untuk setiap cluster
plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s=100, c='red', label='Cluster 1 - Target Utama')
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s=100, c='blue', label='Cluster 2 - Standar')
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s=100, c='green', label='Cluster 3 - Hemat')
plt.scatter(X[y_kmeans == 3, 0], X[y_kmeans == 3, 1], s=100, c='cyan', label='Cluster 4 - Boros')
plt.scatter(X[y_kmeans == 4, 0], X[y_kmeans == 4, 1], s=100, c='magenta', label='Cluster 5 - Prioritas Rendah')

# Plot centroids
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='yellow', label='Centroids', edgecolors='black')

plt.title('Segmentasi Pelanggan Mall')
plt.xlabel('Pendapatan Tahunan (k$)')
plt.ylabel('Skor Pengeluaran (1-100)')
plt.legend()
plt.show()
</code></pre>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751341923060/66d57534-8ede-45ff-80c4-b914dae5604f.png" alt="" style="display:block;margin:0 auto" />

<p>Interpretasi Segmen, Dari visualisasi di atas, kita dapat mendefinisikan 5 persona pelanggan:</p>
<ol>
<li><p>Target Utama (Merah): Kelompok ini memiliki pendapatan tinggi dan skor pengeluaran tinggi. Mereka adalah pelanggan impian! Strategi pemasaran untuk mereka bisa berupa penawaran produk premium, layanan eksklusif, dan program loyalitas yang menguntungkan.</p>
</li>
<li><p>Standar (Biru): Pendapatan dan skor pengeluaran mereka berada di tengah-tengah. Ini adalah basis pelanggan terbesar Anda. Penawaran umum, diskon musiman, dan promosi reguler akan efektif untuk kelompok ini.</p>
</li>
<li><p>Hemat (Hijau): Mereka punya uang (pendapatan tinggi), tetapi sangat berhati-hati dalam membelanjakannya (skor pengeluaran rendah). Untuk menarik mereka, fokus pada penawaran "value for money", diskon besar, atau produk berkualitas tinggi yang tahan lama.</p>
</li>
<li><p>Boros (Cyan): Kelompok ini unik. Pendapatan mereka rendah, tetapi skor pengeluaran mereka tinggi. Mungkin mereka adalah kaum muda yang impulsif atau mahasiswa. Strategi yang cocok bisa berupa produk tren, cicilan, atau promosi "beli satu gratis satu".</p>
</li>
<li><p>Prioritas Rendah (Magenta): Dengan pendapatan dan skor pengeluaran yang sama-sama rendah, kelompok ini mungkin bukan target utama. Upaya pemasaran untuk mereka harus minimal, mungkin cukup dengan informasi diskon umum.</p>
</li>
</ol>
<h2>Kesimpulan</h2>
<p>Dengan beberapa baris kode Python, kita berhasil mengubah data mentah menjadi wawasan bisnis yang dapat ditindaklanjuti. K-Means Clustering adalah alat yang ampuh untuk menemukan struktur tersembunyi dalam data pelanggan.</p>
<p>Segmentasi ini memungkinkan tim pemasaran untuk berhenti menebak-nebak dan mulai membuat keputusan berbasis data, mengalokasikan sumber daya secara lebih efisien, dan pada akhirnya, membangun hubungan yang lebih baik dengan setiap jenis pelanggan.</p>
]]></content:encoded></item><item><title><![CDATA[Mengenal dan Menguasai Event Handling di JavaScript: Panduan Dasar hingga Praktis]]></title><description><![CDATA[📌 Pendahuluan
JavaScript menjadi sangat berguna dalam pengembangan web karena kemampuannya menangani interaksi pengguna secara real-time, seperti klik, ketikan, hover, scroll, dan lainnya. Mekanisme ]]></description><link>https://deniyuniawan.hashnode.dev/mengenal-dan-menguasai-event-handling-di-javascript-panduan-dasar-hingga-praktis</link><guid isPermaLink="true">https://deniyuniawan.hashnode.dev/mengenal-dan-menguasai-event-handling-di-javascript-panduan-dasar-hingga-praktis</guid><category><![CDATA[Web Development]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[event handling]]></category><category><![CDATA[Frontend Development]]></category><dc:creator><![CDATA[deni yuniawan]]></dc:creator><pubDate>Fri, 27 Jun 2025 06:05:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/685022dc00b401e40fbad471/3c12764e-4ff5-4ef6-8a0c-960a730584c6.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>📌 Pendahuluan</h3>
<p>JavaScript menjadi sangat berguna dalam pengembangan web karena kemampuannya menangani <strong>interaksi pengguna secara real-time</strong>, seperti klik, ketikan, hover, scroll, dan lainnya. Mekanisme yang memungkinkan ini disebut <strong>Event Handling</strong>.</p>
<p>Dalam artikel ini, kita akan mempelajari:</p>
<ul>
<li><p>Apa itu event dan event handler?</p>
</li>
<li><p>Bagaimana cara kerja <code>addEventListener()</code></p>
</li>
<li><p>Tipe-tipe event yang umum digunakan</p>
</li>
<li><p>Studi kasus sederhana dengan praktik langsung</p>
</li>
</ul>
<hr />
<h3>🧠 1. Apa Itu Event Handling?</h3>
<p>Event handling adalah proses <strong>menangkap dan merespons aksi</strong> yang dilakukan pengguna pada halaman web. Misalnya:</p>
<ul>
<li><p>Menekan tombol (<code>click</code>)</p>
</li>
<li><p>Mengetik sesuatu (<code>input</code>, <code>keydown</code>)</p>
</li>
<li><p>Mengarahkan mouse (<code>mouseover</code>, <code>mouseenter</code>)</p>
</li>
<li><p>Mengirim formulir (<code>submit</code>)</p>
</li>
</ul>
<p>Contoh sederhananya:</p>
<pre><code class="language-html">&lt;button id="halo"&gt;Klik Saya&lt;/button&gt;
&lt;script&gt;
  document.getElementById('halo').addEventListener('click', () =&gt; {
    alert('Halo dunia!');
  });
&lt;/script&gt;
</code></pre>
<hr />
<h3>📥 2. Mengenal <code>addEventListener()</code></h3>
<p>Fungsi utama untuk menangani event adalah:</p>
<pre><code class="language-javascript">element.addEventListener('eventType', callbackFunction);
</code></pre>
<p>Contoh:</p>
<pre><code class="language-javascript">document.querySelector('button').addEventListener('click', function () {
  console.log('Tombol diklik!');
});
</code></pre>
<p>Menggunakan fungsi panah:</p>
<pre><code class="language-javascript">button.addEventListener('click', () =&gt; {
  // aksi
});
</code></pre>
<hr />
<h3>🧾 3. Jenis-Jenis Event Populer</h3>
<p>Beberapa event yang paling sering digunakan:</p>
<table>
<thead>
<tr>
<th>Event Type</th>
<th>Keterangan</th>
</tr>
</thead>
<tbody><tr>
<td><code>click</code></td>
<td>Saat elemen diklik</td>
</tr>
<tr>
<td><code>mouseover</code></td>
<td>Saat mouse diarahkan ke elemen</td>
</tr>
<tr>
<td><code>keydown</code></td>
<td>Saat tombol keyboard ditekan</td>
</tr>
<tr>
<td><code>submit</code></td>
<td>Saat formulir dikirim</td>
</tr>
<tr>
<td><code>change</code></td>
<td>Saat nilai input berubah</td>
</tr>
<tr>
<td><code>scroll</code></td>
<td>Saat halaman discroll</td>
</tr>
</tbody></table>
<hr />
<h3>🛠️ 4. Studi Kasus: Formulir Interaktif</h3>
<p><strong>HTML:</strong></p>
<pre><code class="language-html">&lt;form id="form"&gt;
  &lt;input type="text" id="nama" placeholder="Masukkan nama" /&gt;
  &lt;button type="submit"&gt;Kirim&lt;/button&gt;
&lt;/form&gt;
</code></pre>
<p><strong>JavaScript:</strong></p>
<pre><code class="language-javascript">document.getElementById('form').addEventListener('submit', function (e) {
  e.preventDefault(); // mencegah reload halaman
  const nama = document.getElementById('nama').value;
  alert(`Halo, ${nama}!`);
});
</code></pre>
<p>Penjelasan:</p>
<ul>
<li><p><code>e.preventDefault()</code> mencegah halaman refresh otomatis</p>
</li>
<li><p>Data dari input diambil menggunakan <code>.value</code></p>
</li>
</ul>
<hr />
<h3>⚠️ 5. Tips &amp; Praktik Terbaik</h3>
<ul>
<li><p>Jangan gunakan <code>onclick="..."</code> langsung di HTML — gunakan JavaScript eksternal.</p>
</li>
<li><p>Pastikan elemen sudah <strong>tersedia di DOM</strong> sebelum dipanggil (gunakan <code>DOMContentLoaded</code> jika perlu).</p>
</li>
<li><p>Manfaatkan event delegation untuk elemen yang <strong>dinamis atau banyak</strong>.</p>
</li>
</ul>
<p>Contoh event delegation:</p>
<pre><code class="language-javascript">document.getElementById('parent').addEventListener('click', function(e) {
  if (e.target.classList.contains('child')) {
    console.log('Anak diklik:', e.target.textContent);
  }
});
</code></pre>
<hr />
<h3>🧭 Kesimpulan</h3>
<p>Kemampuan menangani event merupakan <strong>inti dari interaktivitas</strong> dalam web development. Dengan memahami cara kerja event dan bagaimana menangani berbagai jenisnya, kamu bisa membuat halaman web yang responsif, interaktif, dan profesional.</p>
<blockquote>
<p>🚀 Coba kembangkan fitur kecil seperti kalkulator, form validasi, atau game sederhana menggunakan event handler!</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Panduan CSS Grid Layout untuk Pemula: Bangun Layout Website Seperti Profesional]]></title><description><![CDATA[📌 Pendahuluan
Ketika kamu mulai belajar membangun tampilan website, mungkin kamu mengenal Flexbox terlebih dahulu untuk membuat layout. Namun, saat layout menjadi lebih kompleks—misalnya, kamu ingin ]]></description><link>https://deniyuniawan.hashnode.dev/panduan-css-grid-layout-untuk-pemula-bangun-layout-website-seperti-profesional</link><guid isPermaLink="true">https://deniyuniawan.hashnode.dev/panduan-css-grid-layout-untuk-pemula-bangun-layout-website-seperti-profesional</guid><category><![CDATA[Web Development]]></category><category><![CDATA[CSS]]></category><category><![CDATA[frontend]]></category><category><![CDATA[grid layout]]></category><dc:creator><![CDATA[deni yuniawan]]></dc:creator><pubDate>Fri, 27 Jun 2025 05:39:25 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/685022dc00b401e40fbad471/e0453983-9215-4c5e-bf42-f235568064b0.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>📌 Pendahuluan</h3>
<p>Ketika kamu mulai belajar membangun tampilan website, mungkin kamu mengenal <code>Flexbox</code> terlebih dahulu untuk membuat layout. Namun, saat layout menjadi lebih kompleks—misalnya, kamu ingin membuat galeri gambar, dashboard admin, atau template majalah—di situlah <strong>CSS Grid</strong> menjadi andalan.</p>
<p>Artikel ini akan membimbingmu memahami dasar-dasar Grid Layout, properti penting, dan bagaimana kamu bisa menggunakannya untuk membuat tampilan web yang rapi dan responsif.</p>
<hr />
<h3>🧩 1. Apa Itu CSS Grid?</h3>
<p>CSS Grid adalah sistem layout dua dimensi yang memungkinkan kamu menyusun konten berdasarkan <strong>baris (rows)</strong> dan <strong>kolom (columns)</strong>. Ini menjadikannya lebih fleksibel dibandingkan <code>Flexbox</code> yang hanya satu dimensi.</p>
<p><strong>Kelebihan Grid:</strong></p>
<ul>
<li><p>Cocok untuk <strong>layout besar dan kompleks</strong>.</p>
</li>
<li><p>Mendukung pengaturan <strong>garis (line-based positioning)</strong>.</p>
</li>
<li><p>Memudahkan pembuatan <strong>responsif design</strong>.</p>
</li>
</ul>
<hr />
<h3>📐 2. Struktur Dasar Grid Layout</h3>
<p>Mari kita lihat contoh dasar membuat Grid:</p>
<pre><code class="language-html">&lt;div class="container"&gt;
  &lt;div class="box"&gt;1&lt;/div&gt;
  &lt;div class="box"&gt;2&lt;/div&gt;
  &lt;div class="box"&gt;3&lt;/div&gt;
  &lt;div class="box"&gt;4&lt;/div&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">.container {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px;
}

.box {
  background-color: lightblue;
  padding: 20px;
  text-align: center;
}
</code></pre>
<p>📌 Penjelasan:</p>
<ul>
<li><p><code>display: grid;</code> → Mengubah elemen menjadi grid container.</p>
</li>
<li><p><code>grid-template-columns</code> → Menentukan jumlah dan lebar kolom.</p>
</li>
<li><p><code>1fr</code> → Fraction unit, membagi ruang secara proporsional.</p>
</li>
</ul>
<hr />
<h3>🎛 3. Properti Penting dalam Grid</h3>
<table>
<thead>
<tr>
<th>Properti</th>
<th>Fungsi</th>
</tr>
</thead>
<tbody><tr>
<td><code>grid-template-columns</code> / <code>rows</code></td>
<td>Menentukan jumlah kolom/baris</td>
</tr>
<tr>
<td><code>gap</code></td>
<td>Jarak antar item</td>
</tr>
<tr>
<td><code>grid-column</code>, <code>grid-row</code></td>
<td>Menentukan posisi item</td>
</tr>
<tr>
<td><code>grid-area</code></td>
<td>Memberi nama area layout</td>
</tr>
<tr>
<td><code>justify-items</code>, <code>align-items</code></td>
<td>Posisi isi item di dalam cell</td>
</tr>
<tr>
<td><code>grid-template-areas</code></td>
<td>Menyusun layout dengan nama area</td>
</tr>
</tbody></table>
<p>Contoh penggunaan <code>grid-template-areas</code>:</p>
<pre><code class="language-css">.container {
  display: grid;
  grid-template-areas:
    "header header"
    "sidebar content"
    "footer footer";
}
</code></pre>
<hr />
<h3>📱 4. Grid Layout Responsif</h3>
<p>Kamu bisa membuat layout yang menyesuaikan layar dengan media query atau menggunakan unit <code>fr</code>, <code>minmax()</code>, dan <code>auto-fit</code>.</p>
<p>Contoh:</p>
<pre><code class="language-css">.container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
</code></pre>
<p>Ini memungkinkan jumlah kolom menyesuaikan ukuran layar tanpa perlu media query.</p>
<hr />
<h3>💡 5. Studi Kasus Sederhana: Galeri Foto</h3>
<pre><code class="language-html">&lt;div class="gallery"&gt;
  &lt;img src="img1.jpg"&gt;
  &lt;img src="img2.jpg"&gt;
  &lt;img src="img3.jpg"&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">.gallery {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 15px;
}
.gallery img {
  width: 100%;
  height: auto;
}
</code></pre>
<p>📌 Layout ini akan otomatis menyesuaikan jumlah kolom tergantung ukuran layar.</p>
<hr />
<h3>🎯 Kesimpulan</h3>
<p>CSS Grid memberikan cara yang elegan dan efisien untuk membangun layout website modern. Meskipun pada awalnya terlihat kompleks, dengan latihan kamu akan bisa membuat desain website yang rapi, responsif, dan mudah dikelola.</p>
]]></content:encoded></item><item><title><![CDATA[Memanipulasi DOM dengan JavaScript: Dasar yang Harus Dikuasai Web Developer Pemula]]></title><description><![CDATA[📌 Pendahuluan
Salah satu kemampuan paling penting bagi pengembang web adalah bagaimana berinteraksi dengan elemen HTML secara dinamis. Di sinilah DOM Manipulation (Document Object Model) berperan.
Ar]]></description><link>https://deniyuniawan.hashnode.dev/memanipulasi-dom-dengan-javascript-dasar-yang-harus-dikuasai-web-developer-pemula</link><guid isPermaLink="true">https://deniyuniawan.hashnode.dev/memanipulasi-dom-dengan-javascript-dasar-yang-harus-dikuasai-web-developer-pemula</guid><category><![CDATA[Web Development]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[frontend]]></category><category><![CDATA[DOM]]></category><dc:creator><![CDATA[deni yuniawan]]></dc:creator><pubDate>Wed, 25 Jun 2025 17:00:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/685022dc00b401e40fbad471/8acb3f82-44c6-416a-8603-cda6467a9f6f.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>📌 Pendahuluan</h3>
<p>Salah satu kemampuan paling penting bagi pengembang web adalah bagaimana berinteraksi dengan elemen HTML secara dinamis. Di sinilah <strong>DOM Manipulation (Document Object Model)</strong> berperan.</p>
<p>Artikel ini akan membantu kamu memahami konsep dasar DOM, serta bagaimana kamu bisa <strong>mengambil, mengubah, menambahkan, dan menghapus</strong> elemen HTML menggunakan JavaScript murni — tanpa framework.</p>
<hr />
<h3>🧠 1. Apa Itu DOM?</h3>
<p>DOM adalah representasi struktur halaman HTML sebagai <strong>pohon objek (tree of objects)</strong>. Setiap tag HTML seperti <code>&lt;div&gt;</code>, <code>&lt;h1&gt;</code>, dan <code>&lt;p&gt;</code> menjadi objek yang bisa kamu akses dan manipulasi menggunakan JavaScript.</p>
<p>Misalnya:</p>
<pre><code class="language-html">&lt;body&gt;
  &lt;h1 id="judul"&gt;Halo Dunia!&lt;/h1&gt;
&lt;/body&gt;
</code></pre>
<p>Melalui DOM, kamu bisa mengganti teks <code>Halo Dunia!</code> menjadi apapun yang kamu inginkan secara dinamis.</p>
<hr />
<h3>🔍 2. Cara Mengakses Elemen DOM</h3>
<p>Beberapa metode populer untuk mengambil elemen HTML:</p>
<pre><code class="language-javascript">document.getElementById('judul');            // Berdasarkan ID
document.querySelector('h1');                // Berdasarkan selector
document.getElementsByClassName('title');    // Berdasarkan class
document.getElementsByTagName('p');          // Berdasarkan tag
</code></pre>
<p>Contoh penggunaan:</p>
<pre><code class="language-javascript">const judul = document.getElementById('judul');
judul.textContent = 'Selamat Datang!';
</code></pre>
<hr />
<h3>🔧 3. Mengubah Konten &amp; Atribut</h3>
<p>Selain membaca, kamu bisa mengubah elemen secara langsung.</p>
<pre><code class="language-javascript">judul.style.color = 'blue';
judul.innerHTML = '&lt;em&gt;Hai!&lt;/em&gt;';
judul.setAttribute('class', 'highlight');
</code></pre>
<p>Ini memungkinkan kamu mengubah gaya, struktur HTML, atau menambahkan atribut baru.</p>
<hr />
<h3>🛠️ 4. Menambahkan dan Menghapus Elemen</h3>
<p>Kamu bisa membuat elemen HTML baru dengan <code>createElement()</code> dan menambahkannya ke halaman menggunakan <code>appendChild()</code> atau <code>insertBefore()</code>.</p>
<pre><code class="language-javascript">const newItem = document.createElement('li');
newItem.textContent = 'Item Baru';
document.querySelector('ul').appendChild(newItem);
</code></pre>
<p>Menghapus elemen:</p>
<pre><code class="language-javascript">document.querySelector('li').remove();
</code></pre>
<hr />
<h3>🎯 5. Event Listener: Interaksi Pengguna</h3>
<p>DOM juga memungkinkan kamu menangani <strong>event</strong>, seperti klik, input, atau hover.</p>
<pre><code class="language-javascript">const tombol = document.getElementById('klikSaya');
tombol.addEventListener('click', function () {
  alert('Tombol diklik!');
});
</code></pre>
<p>Event ini penting agar website kamu menjadi <strong>interaktif</strong>.</p>
<hr />
<h3>🧪 Studi Kasus: To-Do List Sederhana</h3>
<p><strong>HTML:</strong></p>
<pre><code class="language-html">&lt;input type="text" id="taskInput"&gt;
&lt;button id="addTask"&gt;Tambah&lt;/button&gt;
&lt;ul id="taskList"&gt;&lt;/ul&gt;
</code></pre>
<p><strong>JavaScript:</strong></p>
<pre><code class="language-javascript">document.getElementById('addTask').addEventListener('click', function () {
  const input = document.getElementById('taskInput');
  const task = document.createElement('li');
  task.textContent = input.value;
  document.getElementById('taskList').appendChild(task);
  input.value = '';
});
</code></pre>
<p>Dengan beberapa baris JavaScript saja, kamu sudah bisa membuat fitur tambah-tugas yang interaktif!</p>
<hr />
<h3>📘 Kesimpulan</h3>
<p>Menguasai DOM adalah <strong>fondasi penting</strong> sebelum kamu melangkah ke framework seperti React atau Vue. Dengan memahami bagaimana HTML dan JavaScript bekerja secara langsung, kamu akan menjadi web developer yang <strong>lebih solid dan fleksibel</strong>.</p>
]]></content:encoded></item><item><title><![CDATA[Flexbox CSS: Solusi Cerdas Layout Web yang Fleksibel & Responsif]]></title><description><![CDATA[“Bikin layout rapi dan responsif tanpa ribet? Jawabannya: Flexbox!”


🎯 1. Apa Itu Flexbox?
Flexbox (Flexible Box Layout) adalah fitur CSS yang memudahkan kamu dalam menyusun dan mengatur elemen seca]]></description><link>https://deniyuniawan.hashnode.dev/flexbox-css-solusi-cerdas-layout-web-yang-fleksibel-and-responsif</link><guid isPermaLink="true">https://deniyuniawan.hashnode.dev/flexbox-css-solusi-cerdas-layout-web-yang-fleksibel-and-responsif</guid><category><![CDATA[Web Development]]></category><category><![CDATA[flexbox]]></category><category><![CDATA[CSS]]></category><category><![CDATA[frontend]]></category><dc:creator><![CDATA[deni yuniawan]]></dc:creator><pubDate>Wed, 25 Jun 2025 05:31:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/685022dc00b401e40fbad471/a407740b-e888-4763-91c2-769d735c8a4d.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p>“Bikin layout rapi dan responsif tanpa ribet? Jawabannya: Flexbox!”</p>
</blockquote>
<hr />
<h2>🎯 1. Apa Itu Flexbox?</h2>
<p><strong>Flexbox (Flexible Box Layout)</strong> adalah fitur CSS yang memudahkan kamu dalam menyusun dan mengatur elemen secara fleksibel di halaman web. Cocok banget untuk:</p>
<ul>
<li><p>Navbar yang responsif</p>
</li>
<li><p>Galeri gambar</p>
</li>
<li><p>Card layout</p>
</li>
<li><p>Centering elemen secara vertikal dan horizontal</p>
</li>
</ul>
<hr />
<h2>🛠️ 2. Dasar-Dasar Properti Flexbox</h2>
<h3>📦 a. Container Flex</h3>
<pre><code class="language-css">.container {
  display: flex;
}
</code></pre>
<h3>🔄 b. Arah (Main Axis)</h3>
<pre><code class="language-css">.container {
  flex-direction: row; /* default: horizontal */
  flex-direction: column; /* vertikal */
}
</code></pre>
<h3>📏 c. Pembagian Ruang</h3>
<pre><code class="language-css">.container {
  justify-content: space-between;
}
</code></pre>
<ul>
<li><code>flex-start</code>, <code>flex-end</code>, <code>center</code>, <code>space-between</code>, <code>space-around</code>, <code>space-evenly</code></li>
</ul>
<h3>🧭 d. Penyesuaian Arah Samping (Cross Axis)</h3>
<pre><code class="language-css">.container {
  align-items: center;
}
</code></pre>
<ul>
<li><code>flex-start</code>, <code>flex-end</code>, <code>center</code>, <code>stretch</code>, <code>baseline</code></li>
</ul>
<hr />
<h2>💡 3. Contoh Layout Sederhana</h2>
<pre><code class="language-html">&lt;div class="container"&gt;
  &lt;div class="box"&gt;1&lt;/div&gt;
  &lt;div class="box"&gt;2&lt;/div&gt;
  &lt;div class="box"&gt;3&lt;/div&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">.container {
  display: flex;
  justify-content: space-around;
  align-items: center;
}
.box {
  width: 100px;
  height: 100px;
  background: steelblue;
  color: white;
  font-size: 2rem;
  text-align: center;
}
</code></pre>
<hr />
<h2>📱 4. Buat Layout Responsif dengan Flexbox</h2>
<p>Flexbox memudahkan pembuatan layout mobile-first:</p>
<pre><code class="language-css">.container {
  display: flex;
  flex-wrap: wrap;
}
.box {
  flex: 1 1 300px;
}
</code></pre>
<p>Artinya:</p>
<ul>
<li><p><code>1</code>: grow (boleh membesar)</p>
</li>
<li><p><code>1</code>: shrink (boleh mengecil)</p>
</li>
<li><p><code>300px</code>: ukuran dasar</p>
</li>
</ul>
<hr />
<h2>⚡ 5. Trik Flexbox Populer</h2>
<ul>
<li><strong>Centering horizontal &amp; vertical:</strong></li>
</ul>
<pre><code class="language-css">.centered {
  display: flex;
  justify-content: center;
  align-items: center;
}
</code></pre>
<ul>
<li><strong>Buat sidebar &amp; konten utama:</strong></li>
</ul>
<pre><code class="language-css">.layout {
  display: flex;
}
.sidebar {
  flex: 1;
}
.content {
  flex: 3;
}
</code></pre>
<hr />
<h2>🧪 6. Tools untuk Belajar Flexbox</h2>
<ul>
<li><p><a href="https://flexboxfroggy.com/">Flexbox Froggy</a> 🐸 — Belajar lewat game</p>
</li>
<li><p><a href="https://css-tricks.com/snippets/css/a-guide-to-flexbox/">CSS Tricks Flexbox Guide</a></p>
</li>
<li><p>Chrome DevTools → "Elements" tab untuk inspect properti Flex</p>
</li>
</ul>
<hr />
<h2>📌 Kesimpulan</h2>
<p>Flexbox adalah senjata wajib front-end developer modern. Dengan pemahaman dasar Flexbox, kamu bisa membuat layout profesional dan responsif tanpa mengandalkan framework.</p>
]]></content:encoded></item><item><title><![CDATA[Responsive Design: Cara Membuat Website Nyaman di Semua Ukuran Layar]]></title><description><![CDATA["Kalau website-mu harus di-zoom di HP, kamu butuh responsive design."


🎯 1. Apa Itu Responsive Design?
Responsive design adalah teknik membuat website yang bisa menyesuaikan tampilan berdasarkan uku]]></description><link>https://deniyuniawan.hashnode.dev/responsive-design-cara-membuat-website-nyaman-di-semua-ukuran-layar</link><guid isPermaLink="true">https://deniyuniawan.hashnode.dev/responsive-design-cara-membuat-website-nyaman-di-semua-ukuran-layar</guid><category><![CDATA[Web Development]]></category><category><![CDATA[responsive design]]></category><category><![CDATA[frontend]]></category><category><![CDATA[CSS]]></category><dc:creator><![CDATA[deni yuniawan]]></dc:creator><pubDate>Tue, 24 Jun 2025 17:00:36 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/685022dc00b401e40fbad471/c46791a5-ff31-4b14-96d5-804a8fa4d6c4.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p>"Kalau website-mu harus di-zoom di HP, kamu butuh responsive design."</p>
</blockquote>
<hr />
<h2>🎯 1. Apa Itu Responsive Design?</h2>
<p>Responsive design adalah teknik membuat website yang bisa menyesuaikan tampilan berdasarkan ukuran layar, baik itu:</p>
<ul>
<li><p><strong>Desktop</strong></p>
</li>
<li><p><strong>Tablet</strong></p>
</li>
<li><p><strong>Smartphone</strong></p>
</li>
</ul>
<p>Tanpa responsive design, pengguna mobile bisa kesulitan membaca atau berinteraksi dengan website-mu.</p>
<hr />
<h2>🏗️ 2. Kunci Utama: Viewport &amp; Media Queries</h2>
<h3>🔧 a. Atur Viewport di HTML</h3>
<p>Di <code>&lt;head&gt;</code>, tambahkan ini:</p>
<pre><code class="language-html">&lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
</code></pre>
<p>Tanpa ini, mobile browser tidak tahu ukuran layar yang harus digunakan.</p>
<h3>🎨 b. Gunakan Media Query di CSS</h3>
<pre><code class="language-css">@media (max-width: 768px) {
  .nav-menu {
    flex-direction: column;
  }
  .hero h1 {
    font-size: 1.5rem;
  }
}
</code></pre>
<hr />
<h2>🧱 3. Gunakan Layout Fleksibel</h2>
<p>Gunakan unit seperti:</p>
<ul>
<li><p><code>%</code> (persentase)</p>
</li>
<li><p><code>vw</code>, <code>vh</code> (viewport width/height)</p>
</li>
<li><p><code>em</code>, <code>rem</code> (relatif terhadap ukuran font)</p>
</li>
</ul>
<pre><code class="language-css">.container {
  width: 90%;
  margin: auto;
}
</code></pre>
<hr />
<h2>🧰 4. Teknik CSS Modern</h2>
<h3>✅ Flexbox</h3>
<pre><code class="language-css">.navbar {
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
}
</code></pre>
<h3>✅ Grid Layout</h3>
<pre><code class="language-css">.grid-layout {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
</code></pre>
<hr />
<h2>🔄 5. Contoh Sederhana Responsive Web</h2>
<pre><code class="language-html">&lt;div class="card"&gt;
  &lt;img src="image.jpg" alt="Gambar" /&gt;
  &lt;h2&gt;Judul&lt;/h2&gt;
  &lt;p&gt;Deskripsi singkat konten.&lt;/p&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">.card {
  width: 30%;
}
@media (max-width: 768px) {
  .card {
    width: 90%;
  }
}
</code></pre>
<hr />
<h2>✅ 6. Tips Cepat untuk Responsif</h2>
<ul>
<li><p>Gunakan font dan elemen UI yang cukup besar di layar kecil.</p>
</li>
<li><p>Gunakan hamburger menu untuk navigasi.</p>
</li>
<li><p>Uji tampilan dengan <strong>Chrome DevTools</strong> atau <strong>Responsively App</strong>.</p>
</li>
<li><p>Gunakan framework seperti <strong>Bootstrap</strong> atau <strong>Tailwind</strong> jika butuh cepat.</p>
</li>
</ul>
<hr />
<h2>📌 Kesimpulan</h2>
<p>Responsive design bukan tambahan, tapi keharusan. Sekarang lebih dari 50% pengunjung website berasal dari perangkat mobile. Kalau kamu ingin user betah, website-mu harus bisa menyesuaikan.</p>
]]></content:encoded></item><item><title><![CDATA[Bikin Website Portofolio Sederhana Hanya dengan HTML & CSS]]></title><description><![CDATA[“Portofolio online adalah CV visual kamu di dunia digital.”


🎯 1. Mengapa Penting Membuat Portofolio?
Mau freelance atau melamar kerja, portofolio bisa jadi senjata untuk:

Menunjukkan kemampuan HTM]]></description><link>https://deniyuniawan.hashnode.dev/bikin-website-portofolio-sederhana-hanya-dengan-html-and-css</link><guid isPermaLink="true">https://deniyuniawan.hashnode.dev/bikin-website-portofolio-sederhana-hanya-dengan-html-and-css</guid><category><![CDATA[Web Development]]></category><category><![CDATA[HTML]]></category><category><![CDATA[CSS]]></category><category><![CDATA[portofolio]]></category><dc:creator><![CDATA[deni yuniawan]]></dc:creator><pubDate>Tue, 24 Jun 2025 06:03:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/685022dc00b401e40fbad471/cad1ed2a-6e0b-4430-99ad-bc944a8e6a07.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p>“Portofolio online adalah CV visual kamu di dunia digital.”</p>
</blockquote>
<hr />
<h2>🎯 1. Mengapa Penting Membuat Portofolio?</h2>
<p>Mau freelance atau melamar kerja, portofolio bisa jadi senjata untuk:</p>
<ul>
<li><p>Menunjukkan kemampuan HTML &amp; CSS dasar</p>
</li>
<li><p>Memberi kesan profesional</p>
</li>
<li><p>Menjadi landing page personal</p>
</li>
</ul>
<hr />
<h2>🏗️ 2. Struktur Dasar HTML</h2>
<p>Buatlah file <code>index.html</code>:</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="id"&gt;
&lt;head&gt;
  &lt;meta charset="UTF-8" /&gt;
  &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"/&gt;
  &lt;title&gt;Portofolio Saya&lt;/title&gt;
  &lt;link rel="stylesheet" href="style.css" /&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;header&gt;
    &lt;h1&gt;Halo, Saya Deni&lt;/h1&gt;
    &lt;p&gt;Web Developer Pemula 🚀&lt;/p&gt;
  &lt;/header&gt;
  
  &lt;section id="projects"&gt;
    &lt;h2&gt;Proyek Saya&lt;/h2&gt;
    &lt;div class="project-card"&gt;
      &lt;h3&gt;Kalkulator Web&lt;/h3&gt;
      &lt;p&gt;Aplikasi kalkulator sederhana berbasis JavaScript.&lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="project-card"&gt;
      &lt;h3&gt;To-Do List&lt;/h3&gt;
      &lt;p&gt;Aplikasi manajemen tugas harian.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;footer&gt;
    &lt;p&gt;Hubungi saya di: emailkamu@gmail.com&lt;/p&gt;
  &lt;/footer&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<hr />
<h2>🎨 3. Styling Dasar CSS</h2>
<p>Buat file <code>style.css</code>:</p>
<pre><code class="language-css">body {
  font-family: Arial, sans-serif;
  line-height: 1.6;
  margin: 0;
  padding: 0;
  background: #f0f2f5;
}

header, footer {
  background-color: #007bff;
  color: white;
  text-align: center;
  padding: 2rem;
}

section {
  padding: 2rem;
}

.project-card {
  background: white;
  border-radius: 8px;
  padding: 1rem;
  margin-bottom: 1rem;
  box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
</code></pre>
<hr />
<h2>📱 4. Responsif untuk Mobile</h2>
<p>Tambahkan media query:</p>
<pre><code class="language-css">@media (max-width: 600px) {
  header, footer {
    padding: 1rem;
  }

  .project-card {
    padding: 0.8rem;
  }
}
</code></pre>
<hr />
<h2>🔗 5. Bonus: Tambahkan Link dan Gambar</h2>
<pre><code class="language-html">&lt;a href="https://github.com/username/project1" target="_blank"&gt;Lihat Proyek&lt;/a&gt;
&lt;img src="project1-thumbnail.png" alt="Tampilan proyek kalkulator" width="100%"&gt;
</code></pre>
<hr />
<h2>✅ 6. Kesimpulan</h2>
<ul>
<li><p>Portofolio sederhana bisa dibuat hanya dengan HTML dan CSS.</p>
</li>
<li><p>Tambahkan proyek kecil yang kamu buat sendiri.</p>
</li>
<li><p>Gunakan GitHub untuk menyimpan dan menampilkan hasil kerjamu.</p>
</li>
<li><p>Hosting gratis bisa pakai GitHub Pages atau Netlify.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[CSS Grid: Tools untuk Desain Web 2 Dimensi]]></title><description><![CDATA[“Kalau Flexbox untuk garis satu dimensi, maka Grid adalah solusi untuk layout dua dimensi yang kompleks.”


📐 1. Apa Itu CSS Grid?
CSS Grid adalah sistem layout berbasis baris dan kolom. Sangat cocok]]></description><link>https://deniyuniawan.hashnode.dev/css-grid-tools-untuk-desain-web-2-dimensi</link><guid isPermaLink="true">https://deniyuniawan.hashnode.dev/css-grid-tools-untuk-desain-web-2-dimensi</guid><category><![CDATA[Web Development]]></category><category><![CDATA[CSS Grid]]></category><category><![CDATA[frontend]]></category><dc:creator><![CDATA[deni yuniawan]]></dc:creator><pubDate>Fri, 20 Jun 2025 07:01:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/685022dc00b401e40fbad471/4485fe12-d1f2-4a0e-a15e-de7b7dea9125.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p>“Kalau Flexbox untuk garis satu dimensi, maka Grid adalah solusi untuk layout dua dimensi yang kompleks.”</p>
</blockquote>
<hr />
<h2>📐 1. Apa Itu CSS Grid?</h2>
<p>CSS Grid adalah sistem layout berbasis baris dan kolom. Sangat cocok digunakan saat kamu ingin membuat tampilan web yang terdiri dari berbagai area — seperti header, sidebar, konten, dan footer — dengan kontrol posisi yang presisi.</p>
<hr />
<h2>🔧 2. Struktur Dasar CSS Grid</h2>
<p>Kamu hanya perlu satu baris kode untuk memulai Grid!</p>
<pre><code class="language-html">&lt;div class="grid-container"&gt;
  &lt;div class="box"&gt;1&lt;/div&gt;
  &lt;div class="box"&gt;2&lt;/div&gt;
  &lt;div class="box"&gt;3&lt;/div&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">.grid-container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr; /* 3 kolom sama rata */
  gap: 10px;
}
.box {
  background-color: lightcoral;
  padding: 20px;
  color: white;
}
</code></pre>
<hr />
<h2>📏 3. Properti Penting CSS Grid</h2>
<h3>Di Container:</h3>
<table>
<thead>
<tr>
<th>Properti</th>
<th>Fungsi</th>
</tr>
</thead>
<tbody><tr>
<td><code>display: grid</code></td>
<td>Mengaktifkan Grid layout</td>
</tr>
<tr>
<td><code>grid-template-columns</code></td>
<td>Mengatur jumlah &amp; ukuran kolom</td>
</tr>
<tr>
<td><code>grid-template-rows</code></td>
<td>Mengatur jumlah &amp; ukuran baris</td>
</tr>
<tr>
<td><code>gap</code> / <code>row-gap</code> / <code>column-gap</code></td>
<td>Jarak antar elemen</td>
</tr>
</tbody></table>
<h3>Di Item:</h3>
<table>
<thead>
<tr>
<th>Properti</th>
<th>Fungsi</th>
</tr>
</thead>
<tbody><tr>
<td><code>grid-column</code></td>
<td>Menentukan kolom tempat item ditempatkan</td>
</tr>
<tr>
<td><code>grid-row</code></td>
<td>Menentukan baris tempat item ditempatkan</td>
</tr>
<tr>
<td><code>grid-area</code></td>
<td>Kombinasi grid-column dan grid-row</td>
</tr>
</tbody></table>
<hr />
<h2>🗂️ 4. Contoh Kasus: Layout Majalah 3x2</h2>
<pre><code class="language-html">&lt;div class="grid-magazine"&gt;
  &lt;div class="header"&gt;Header&lt;/div&gt;
  &lt;div class="menu"&gt;Menu&lt;/div&gt;
  &lt;div class="main"&gt;Main Content&lt;/div&gt;
  &lt;div class="aside"&gt;Aside&lt;/div&gt;
  &lt;div class="footer"&gt;Footer&lt;/div&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">.grid-magazine {
  display: grid;
  grid-template-areas:
    "header header"
    "menu main"
    "footer footer";
  grid-template-columns: 1fr 2fr;
  gap: 10px;
}

.header  { grid-area: header; background: #f76c6c; }
.menu    { grid-area: menu; background: #f8b195; }
.main    { grid-area: main; background: #355c7d; }
.aside   { grid-area: aside; background: #6c5b7b; }
.footer  { grid-area: footer; background: #c06c84; }

.grid-magazine &gt; div {
  color: white;
  padding: 20px;
}
</code></pre>
<hr />
<h2>📱 5. Responsif? Mudah Banget!</h2>
<p>Kamu bisa ubah <code>grid-template-columns</code> dengan media queries untuk tampilan mobile:</p>
<pre><code class="language-css">@media (max-width: 600px) {
  .grid-magazine {
    grid-template-areas:
      "header"
      "menu"
      "main"
      "footer";
    grid-template-columns: 1fr;
  }
}
</code></pre>
<hr />
<h2>✅ 6. Kesimpulan</h2>
<ul>
<li><p>CSS Grid cocok untuk layout kompleks, dua dimensi.</p>
</li>
<li><p>Kombinasikan dengan Flexbox untuk hasil maksimal.</p>
</li>
<li><p>Sangat direkomendasikan dipelajari setelah memahami dasar CSS &amp; Flexbox.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Layout dengan Flexbox: Mengatur Posisi Elemen Jadi Lebih Mudah!]]></title><description><![CDATA[“Ingin elemen di web bisa rapi dan fleksibel di semua ukuran layar, belajar Flexbox adalah kuncinya.”


🎯 1. Apa Itu Flexbox?
Flexbox (Flexible Box Layout) adalah fitur di CSS yang membantu kita kita]]></description><link>https://deniyuniawan.hashnode.dev/layout-dengan-flexbox-mengatur-posisi-elemen-jadi-lebih-mudah</link><guid isPermaLink="true">https://deniyuniawan.hashnode.dev/layout-dengan-flexbox-mengatur-posisi-elemen-jadi-lebih-mudah</guid><category><![CDATA[Web Development]]></category><category><![CDATA[CSS]]></category><category><![CDATA[flexbox]]></category><category><![CDATA[frontend]]></category><dc:creator><![CDATA[deni yuniawan]]></dc:creator><pubDate>Thu, 19 Jun 2025 05:06:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/685022dc00b401e40fbad471/5e583306-02fe-465c-b90e-ccfc267c1840.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p>“Ingin elemen di web bisa rapi dan fleksibel di semua ukuran layar, belajar Flexbox adalah kuncinya.”</p>
</blockquote>
<hr />
<h2>🎯 1. Apa Itu Flexbox?</h2>
<p>Flexbox (Flexible Box Layout) adalah fitur di CSS yang membantu kita kita untuk mengatur posisi elemen di dalam sebuah container. Cocok banget untuk menyusun layout responsif tanpa ribet dengan <code>float</code> atau <code>position</code>.</p>
<hr />
<h2>🧱 2. Struktur Dasar Flexbox</h2>
<p>Untuk mulai menggunakan Flexbox, cukup tambahkan <code>display: flex</code> pada container.</p>
<pre><code class="language-html">&lt;div class="container"&gt;
  &lt;div class="box"&gt;A&lt;/div&gt;
  &lt;div class="box"&gt;B&lt;/div&gt;
  &lt;div class="box"&gt;C&lt;/div&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">.container {
  display: flex;
}
.box {
  padding: 20px;
  background: lightblue;
  margin: 5px;
}
</code></pre>
<hr />
<h2>🔧 3. Properti Flexbox Paling Sering Digunakan</h2>
<h3>Pada <strong>Container</strong>:</h3>
<table>
<thead>
<tr>
<th>Properti</th>
<th>Fungsi</th>
</tr>
</thead>
<tbody><tr>
<td><code>display: flex</code></td>
<td>Mengaktifkan Flexbox</td>
</tr>
<tr>
<td><code>flex-direction</code></td>
<td>Mengatur arah: <code>row</code> (default) atau <code>column</code></td>
</tr>
<tr>
<td><code>justify-content</code></td>
<td>Mengatur posisi horizontal: <code>flex-start</code>, <code>center</code>, <code>space-between</code></td>
</tr>
<tr>
<td><code>align-items</code></td>
<td>Mengatur posisi vertikal: <code>stretch</code>, <code>center</code>, <code>flex-end</code></td>
</tr>
<tr>
<td><code>flex-wrap</code></td>
<td>Memungkinkan elemen pindah ke baris berikutnya</td>
</tr>
</tbody></table>
<h3>Pada <strong>Item</strong>:</h3>
<table>
<thead>
<tr>
<th>Properti</th>
<th>Fungsi</th>
</tr>
</thead>
<tbody><tr>
<td><code>flex</code></td>
<td>Ukuran relatif item</td>
</tr>
<tr>
<td><code>align-self</code></td>
<td>Menimpa <code>align-items</code> pada item tertentu</td>
</tr>
<tr>
<td><code>order</code></td>
<td>Mengubah urutan tampil elemen</td>
</tr>
</tbody></table>
<hr />
<h2>🖼️ 4. Contoh Kasus: Galeri 3 Kotak Rata Tengah</h2>
<pre><code class="language-html">&lt;div class="gallery"&gt;
  &lt;div class="item"&gt;1&lt;/div&gt;
  &lt;div class="item"&gt;2&lt;/div&gt;
  &lt;div class="item"&gt;3&lt;/div&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-css">.gallery {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 200px;
}
.item {
  background: salmon;
  padding: 30px;
  margin: 10px;
  color: white;
  font-size: 20px;
}
</code></pre>
<hr />
<h2>📱 5. Tips Responsif: <code>flex-wrap</code> dan <code>media queries</code></h2>
<p>Tambahkan <code>flex-wrap: wrap;</code> untuk memastikan elemen bisa turun ke baris berikutnya di layar kecil.</p>
<pre><code class="language-css">.gallery {
  display: flex;
  flex-wrap: wrap;
}
</code></pre>
<p>Gunakan media queries untuk mengatur layout berdasarkan ukuran layar:</p>
<pre><code class="language-css">@media (max-width: 600px) {
  .item {
    flex: 100%;
  }
}
</code></pre>
<hr />
<h2>✅ 6. Kesimpulan</h2>
<ul>
<li><p>Flexbox memudahkan layouting horizontal &amp; vertikal.</p>
</li>
<li><p>Properti penting: <code>justify-content</code>, <code>align-items</code>, dan <code>flex-direction</code>.</p>
</li>
<li><p>Cocok untuk membuat layout responsif, galeri, navigasi, dsb.</p>
</li>
</ul>
<hr />
]]></content:encoded></item><item><title><![CDATA[Mengenal CSS: Cara Mempercantik Tampilan Web Anda]]></title><description><![CDATA[“HTML adalah kerangka rumah. CSS adalah cat, dekorasi, dan pencahayaan yang membuat rumah terlihat hidup.”


🧭 1. Apa Itu CSS?
CSS (Cascading Style Sheets) adalah bahasa gaya (style language) yang di]]></description><link>https://deniyuniawan.hashnode.dev/mengenal-css-cara-mempercantik-tampilan-web-anda</link><guid isPermaLink="true">https://deniyuniawan.hashnode.dev/mengenal-css-cara-mempercantik-tampilan-web-anda</guid><category><![CDATA[Web Development]]></category><category><![CDATA[CSS]]></category><category><![CDATA[Frontend Development]]></category><dc:creator><![CDATA[deni yuniawan]]></dc:creator><pubDate>Wed, 18 Jun 2025 06:00:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/685022dc00b401e40fbad471/d92b3cb8-0520-41a8-bd4b-0627da842b4e.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p>“HTML adalah kerangka rumah. CSS adalah cat, dekorasi, dan pencahayaan yang membuat rumah terlihat hidup.”</p>
</blockquote>
<hr />
<h2>🧭 1. Apa Itu CSS?</h2>
<p>CSS (Cascading Style Sheets) adalah bahasa gaya (style language) yang digunakan untuk mengatur tampilan elemen-elemen HTML di halaman web. CSS tidak bekerja sendiri—ia digunakan bersama dengan HTML untuk mempercantik halaman web.</p>
<p>Contoh sederhananya:</p>
<pre><code class="language-plaintext">htmlCopyEdit&lt;p style="color:blue; font-size:20px;"&gt;Halo, dunia!&lt;/p&gt;
</code></pre>
<p>Atau dengan file CSS terpisah:</p>
<pre><code class="language-plaintext">cssCopyEditp {
  color: blue;
  font-size: 20px;
}
</code></pre>
<hr />
<h2>🏗️ 2. Struktur dan Cara Menulis CSS</h2>
<p>Ada 3 cara menyisipkan CSS:</p>
<h3>a. Inline CSS</h3>
<p>Langsung di dalam elemen HTML</p>
<pre><code class="language-plaintext">htmlCopyEdit&lt;h1 style="color:red;"&gt;Judul&lt;/h1&gt;
</code></pre>
<h3>b. Internal CSS</h3>
<p>Dimasukkan di dalam tag <code>&lt;style&gt;</code> di <code>&lt;head&gt;</code></p>
<pre><code class="language-plaintext">htmlCopyEdit&lt;style&gt;
  h1 {
    color: red;
  }
&lt;/style&gt;
</code></pre>
<h3>c. External CSS</h3>
<p>File CSS terpisah yang di-link dari HTML</p>
<pre><code class="language-plaintext">htmlCopyEdit&lt;link rel="stylesheet" href="style.css" /&gt;
</code></pre>
<hr />
<h2>🎨 3. Properti-Poperti Dasar CSS yang Wajib Diketahui</h2>
<p>Untuk pemula, berikut beberapa properti dasar yang sering digunakan:</p>
<table>
<thead>
<tr>
<th>Properti</th>
<th>Fungsi</th>
</tr>
</thead>
<tbody><tr>
<td><code>color</code></td>
<td>Mengatur warna teks</td>
</tr>
<tr>
<td><code>background-color</code></td>
<td>Warna latar belakang</td>
</tr>
<tr>
<td><code>font-size</code></td>
<td>Ukuran font</td>
</tr>
<tr>
<td><code>margin</code></td>
<td>Jarak luar elemen</td>
</tr>
<tr>
<td><code>padding</code></td>
<td>Jarak dalam elemen</td>
</tr>
<tr>
<td><code>border</code></td>
<td>Bingkai elemen</td>
</tr>
<tr>
<td><code>width</code> / <code>height</code></td>
<td>Ukuran elemen</td>
</tr>
</tbody></table>
<p>Contoh:</p>
<pre><code class="language-plaintext">cssCopyEdit.container {
  background-color: #f5f5f5;
  padding: 20px;
  margin: 10px;
}
</code></pre>
<hr />
<h2>📐 4. CSS Box Model: Dasar Layouting</h2>
<p>CSS melihat semua elemen sebagai <strong>box</strong> yang terdiri dari:</p>
<ul>
<li><p><strong>Content</strong>: isi seperti teks atau gambar</p>
</li>
<li><p><strong>Padding</strong>: ruang di sekitar content</p>
</li>
<li><p><strong>Border</strong>: garis luar elemen</p>
</li>
<li><p><strong>Margin</strong>: ruang antara elemen</p>
</li>
</ul>
<img src="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model/css-box-model-standard-small.png" alt="CSS Box Model" />

<hr />
<h2>🎯 5. Latihan Mini Project: Kartu Profil Sederhana</h2>
<p>Coba buat komponen seperti ini:</p>
<pre><code class="language-plaintext">htmlCopyEdit&lt;div class="card"&gt;
  &lt;h2&gt;Nama Anda&lt;/h2&gt;
  &lt;p&gt;Web Developer Pemula&lt;/p&gt;
&lt;/div&gt;
</code></pre>
<p>CSS-nya:</p>
<pre><code class="language-plaintext">cssCopyEdit.card {
  background: #fff;
  border: 1px solid #ccc;
  border-radius: 8px;
  padding: 15px;
  width: 250px;
  box-shadow: 2px 2px 10px rgba(0,0,0,0.1);
}
</code></pre>
<hr />
<h2>🧠 6. Kesimpulan</h2>
<ul>
<li><p>CSS adalah bahasa yang mengatur tampilan HTML.</p>
</li>
<li><p>Ada banyak properti CSS yang bisa dikombinasikan untuk menciptakan desain yang menarik.</p>
</li>
<li><p>Pahami konsep dasar seperti box model dan struktur penulisan CSS agar tidak bingung di awal.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Apa Itu HTML dan Cara Kerjanya di Web untuk Pemula]]></title><description><![CDATA[Saat kamu membuka halaman web di browser—entah itu Google, berita, atau media sosial—kamu sebenarnya sedang melihat hasil kerja dari sebuah bahasa markup bernama HTML. Tapi, apa sih HTML itu sebenarny]]></description><link>https://deniyuniawan.hashnode.dev/apa-itu-html-dan-cara-kerjanya-di-web-untuk-pemula</link><guid isPermaLink="true">https://deniyuniawan.hashnode.dev/apa-itu-html-dan-cara-kerjanya-di-web-untuk-pemula</guid><category><![CDATA[Web Development]]></category><category><![CDATA[HTML]]></category><category><![CDATA[frontend]]></category><dc:creator><![CDATA[deni yuniawan]]></dc:creator><pubDate>Tue, 17 Jun 2025 05:39:24 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/685022dc00b401e40fbad471/5f335c42-37ee-4a17-a170-645c64702c5b.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Saat kamu membuka halaman web di browser—entah itu Google, berita, atau media sosial—kamu sebenarnya sedang melihat hasil kerja dari sebuah bahasa markup bernama <strong>HTML</strong>. Tapi, apa sih HTML itu sebenarnya? Bagaimana cara kerjanya? Dan kenapa penting bagi pemula yang ingin belajar web development?</p>
<p>Artikel ini akan menjelaskan semuanya secara sederhana dan step-by-step. Yuk mulai!</p>
<hr />
<h2>Apa Itu HTML?</h2>
<p>HTML adalah singkatan dari <strong>HyperText Markup Language</strong>. Ini adalah bahasa standar yang digunakan untuk menyusun <strong>struktur halaman web</strong>.</p>
<blockquote>
<p>💡 Catatan: HTML <strong>bukan bahasa pemrograman</strong>, melainkan bahasa markup yang digunakan untuk memberi “penanda” atau “markup” pada elemen dalam halaman web.</p>
</blockquote>
<p>Dengan HTML, kamu bisa membuat:</p>
<ul>
<li><p>Judul dan paragraf</p>
</li>
<li><p>Gambar dan video</p>
</li>
<li><p>Tabel dan daftar</p>
</li>
<li><p>Formulir input</p>
</li>
<li><p>Link ke halaman lain</p>
</li>
</ul>
<p>Tanpa HTML, halaman web tidak akan memiliki struktur apapun—hanya layar kosong.</p>
<hr />
<h2>Bagaimana HTML Bekerja?</h2>
<p>HTML bekerja dengan cara <strong>dibaca dan ditafsirkan oleh browser</strong> (Chrome, Firefox, Safari, dll). Ketika kamu membuka file <code>.html</code>, browser akan:</p>
<ol>
<li><p>Membaca elemen dan tag HTML dari atas ke bawah</p>
</li>
<li><p>Menyusun tampilan halaman sesuai urutan tersebut</p>
</li>
<li><p>Menggabungkan dengan <strong>CSS</strong> (untuk tampilan) dan <strong>JavaScript</strong> (untuk interaksi)</p>
</li>
</ol>
<h3>Ilustrasi Sederhana:</h3>
<pre><code class="language-plaintext">[ HTML (struktur) ]
        ↓
[ CSS (desain) ]
        ↓
[ JavaScript (interaktif) ]
</code></pre>
<p>Jadi, HTML adalah pondasi utama dalam membangun sebuah halaman website.</p>
<hr />
<h2>Struktur Dasar File HTML</h2>
<p>Berikut contoh sederhana dari struktur HTML:</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Halo Dunia&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;h1&gt;Halo, dunia!&lt;/h1&gt;
    &lt;p&gt;Ini adalah halaman HTML pertamaku.&lt;/p&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>Mari kita uraikan satu per satu:</p>
<table>
<thead>
<tr>
<th>Elemen</th>
<th>Fungsi</th>
</tr>
</thead>
<tbody><tr>
<td><code>&lt;!DOCTYPE html&gt;</code></td>
<td>Menandakan bahwa ini adalah dokumen HTML5</td>
</tr>
<tr>
<td><code>&lt;html&gt;</code></td>
<td>Tag pembungkus seluruh isi halaman</td>
</tr>
<tr>
<td><code>&lt;head&gt;</code></td>
<td>Berisi informasi tentang halaman (judul, meta data)</td>
</tr>
<tr>
<td><code>&lt;title&gt;</code></td>
<td>Menentukan judul halaman di tab browser</td>
</tr>
<tr>
<td><code>&lt;body&gt;</code></td>
<td>Berisi semua konten yang akan tampil di layar</td>
</tr>
<tr>
<td><code>&lt;h1&gt;</code></td>
<td>Judul besar (heading 1)</td>
</tr>
<tr>
<td><code>&lt;p&gt;</code></td>
<td>Paragraf teks</td>
</tr>
</tbody></table>
<hr />
<h2>Fungsi HTML dalam Pembuatan Website</h2>
<p>HTML sangat penting karena:</p>
<p>✅ Menyusun <strong>struktur konten</strong> di halaman ✅ Memungkinkan developer menata halaman secara logis ✅ Berfungsi sebagai "kerangka rumah", sebelum ditata tampilannya oleh CSS dan diberi fungsi oleh JavaScript</p>
<p>Tanpa HTML, browser tidak tahu di mana meletakkan judul, teks, gambar, atau elemen lainnya.</p>
<hr />
<h2>Di Mana HTML Digunakan?</h2>
<p>HTML digunakan <strong>di hampir semua halaman web</strong>. Selain itu, HTML juga digunakan pada:</p>
<ul>
<li><p>Email newsletter (HTML Email)</p>
</li>
<li><p>CMS seperti WordPress</p>
</li>
<li><p>Template landing page</p>
</li>
<li><p>Dashboard internal perusahaan</p>
</li>
<li><p>Aplikasi web modern (dalam kombinasi dengan React, Vue, dsb)</p>
</li>
</ul>
<hr />
<h2>Kelebihan Belajar HTML untuk Pemula</h2>
<ul>
<li><p>Mudah dimulai tanpa install software</p>
</li>
<li><p>Bisa langsung dicoba di browser</p>
</li>
<li><p>Satu langkah lebih dekat jadi Web Developer!</p>
</li>
</ul>
<hr />
<h2>Kesimpulan</h2>
<p>HTML adalah titik awal dalam dunia web development. Sebagai pemula, kamu wajib memahami HTML karena:</p>
<ul>
<li><p>HTML menyusun <strong>kerangka halaman web</strong></p>
</li>
<li><p>Mudah dipelajari dan langsung bisa dipraktikkan</p>
</li>
<li><p>Menjadi fondasi sebelum kamu melangkah ke CSS dan JavaScript</p>
</li>
</ul>
<p>Cukup dengan browser dan text editor (seperti VS Code), kamu sudah bisa mulai bereksperimen.</p>
]]></content:encoded></item></channel></rss>