Pelajari cara membuat efek api prosedural. Tutorial ini menggabungkan mode campuran CSS untuk tampilan bercahaya dan JavaScript untuk menghasilkan gerakan partikel acak.
Dalam tutorial ini, kita akan membuat efek api biru yang ajaib. Tidak seperti gambar statis, api ini bersifat prosedural. Kita menggunakan JavaScript untuk menghasilkan puluhan partikel kecil dan CSS untuk menggerakkannya ke atas, menciptakan tampilan yang cair dan organik.
Rahasia Utama: Blend Modes
Kunci agar elemen div terlihat seperti api, bukan hanya lingkaran biru, adalah mix-blend-mode: screen. Ketika partikel-partikel ini saling tumpang tindih, warnanya akan menyatu (additive), menciptakan pusat yang putih panas dan tepi yang transparan.
1. HTML
HTML kita sangat sederhana. Kita hanya membutuhkan wadah (container) untuk menampung api kita.
<div class="circle" id="circle"></div>
2. CSS: Fisika Api
Kita menggunakan CSS Keyframes untuk menentukan perilaku satu partikel. Partikel dimulai dari bawah, memudar masuk (fade in), bergerak ke atas (translateY), dan akhirnya memudar keluar sambil mengecil.
Menulis 50 elemen div secara manual sangat melelahkan. Kita menggunakan JavaScript untuk membuatnya secara otomatis. Kita juga menambahkan pengacakan (randomness) pada penundaan animasi agar api tidak terlihat seperti pola yang berulang kaku.
const circle = document.getElementById("circle");
const flameCount = 50;
circle.appendChild(createFire("orb"));
for (let i = 0; i < 8; i++) {
circle.appendChild(createFire("around", i));
}
function createFire(className, index = null) {
const fire = document.createElement("div");
fire.className = `fire ${className}`;
for (let i = 0; i < flameCount; i++) {
const flame = document.createElement("div");
flame.className = "flame";
const delay = Math.random() * 1.5;
flame.style.animationDelay = `${delay}s`;
const duration = 1.2 + (Math.random() * 0.4 - 0.2);
flame.style.animationDuration = `${duration}s`;
const leftPosition = (i / (flameCount - 1)) * 100;
flame.style.left = `calc((100% - 5em) * ${leftPosition / 100})`;
fire.appendChild(flame);
}
if (index) {
fire.style.animationDelay = `${-index * 1}s`;
fire.style.setProperty("--angle", `${index * 45}deg`);
}
return fire;
}
Ringkasan
Dengan menghasilkan banyak elemen yang saling tumpang tindih dengan sedikit variasi acak dalam kecepatan dan waktu, kita mensimulasikan sifat kacau api asli menggunakan elemen DOM standar.
Membuat Sistem Partikel Api Biru dengan CSS & JS | Hibuno