Alat yang Anda butuhkan, siap dipakai

Formatter & Minifier CSS

Tempel CSS lalu pilih Rapikan untuk membentangkan kode yang menumpuk dalam satu baris menjadi satu deklarasi per baris, atau Kompres untuk meringkasnya menjadi satu baris untuk produksi. Karena karakter dibaca sesuai spesifikasi CSS, bagian yang maknanya berubah bila disentuh, seperti spasi di dalam calc(), 0% pada keyframes, serta string dan url(), dibiarkan apa adanya. Peta ukuran di bawah menggambar dengan skala sama berapa byte yang dipakai aturan, @media, dan komentar, berapa yang tersisa setelah dikompres, dan berapa ukurannya bila server mengirim dengan gzip. Alat ini juga menunjuk baris tempat satu } berlebih membuat sebuah aturan hilang seluruhnya.

Terakhir diperbarui 2026-10-22Semua perhitungan terjadi di browser Anda
Indentasi
Komentar
Komentar
Contoh
CSS yang Anda masukkan hanya diproses di browser ini
CSS yang dirapikan

Peta ukuran
Asli
    Yang diubah

      Satuan pada 0px dan 0%, spasi di kedua sisi + − dalam calc(), aturan kosong, serta isi string dan url() dibiarkan karena mengubahnya bisa mengubah makna.

      Temuan

          Terakhir diperbarui 2026-10-22Masukan Anda tidak disimpan

          Standar ROBERINAlat yang Anda butuhkan,
          siap dipakai.
          • Jelas sekilasPosisi input dan hasil terlihat jelas.
          • Hasil lebih duluAngka utama tampil dulu; prosesnya hanya saat dibutuhkan.
          • Minta lebih sedikitTanpa pendaftaran atau data yang tidak perlu.

          Tempel untuk merapikan, kompres untuk melihat apa saja yang berkurang dan seberapa banyak

          Formatter & Minifier CSS mengubah stylesheet yang sama ke dua arah. Merapikan (format, beautify) memecah kode yang menumpuk dalam satu baris seperti .card{margin:0;padding:16px} menjadi satu deklarasi per baris dengan indentasi yang seragam, sehingga mudah dibaca manusia. Mengompres (minify) bekerja sebaliknya: karakter yang tidak dibaca browser, seperti komentar, spasi, dan baris baru, dihapus agar file untuk produksi menjadi lebih kecil. Kedua hasil harus menghasilkan tampilan yang sama dengan kode aslinya, dan alat ini dibuat untuk menjaga syarat tersebut.

          Cara yang menghapus spasi dengan ekspresi reguler sekaligus mudah merusak calc(100% - 2rem), karena spasi di kedua sisi tanda kurang ikut hilang dan nilainya menjadi tidak valid. Alat ini membaca kode per komentar, string, tanda kurung, dan deklarasi sesuai spesifikasi CSS sebelum menulisnya ulang, sehingga dapat membedakan spasi yang aman dihapus dari spasi yang bila dihapus mengubah makna. Peta ukuran di bawah hasil menggambar versi asli dan hasil sebagai pita berskala sama, menunjukkan berapa byte yang dipakai aturan biasa, @media, dan komentar, serta berapa yang berkurang. Bagian “Temuan” menunjuk, lengkap dengan nomor baris, kasus seperti satu } berlebih yang membuat sebuah aturan hilang seluruhnya.

          Kapan perlu merapikan dan mengompres

          Bentuk stylesheet yang disukai penulisnya berbeda dengan yang disukai browser. Saat mengedit, kode yang terbentang lebih nyaman; saat dikirim, kode yang pendek lebih menguntungkan. Alat ini berguna pada situasi seperti berikut.

          • Saat harus membaca file .min.css milik sebuah library: jika Anda hanya punya versi terkompres dan ingin tahu di mana warna tombol ditentukan, file itu perlu dibentangkan dulu. Tempel ke mode rapikan, lalu cari di kolom hasil.
          • Saat merapikan gaya yang disalin dari developer tools atau situs lain: kode hasil salinan sering memiliki indentasi campur aduk atau tersambung dalam satu baris. Setelah dirapikan sekali, batas antara selektor dan deklarasi langsung terlihat.
          • Saat memasukkan CSS ke kolom “CSS tambahan” di editor blog atau toko online: jika ada batas jumlah karakter atau kolomnya sempit, versi terkompres lebih praktis. Simpan versi aslinya di tempat lain dan tempel hanya versi terkompres.
          • Saat gaya tidak berlaku hanya pada sebagian tampilan: penyebabnya sering berupa } berlebih pada aturan sebelumnya atau tanda kurung yang tidak tertutup. “Temuan” menunjukkan baris itu beserta selektor yang dibuang.
          • Saat ingin memastikan seberapa besar efek kompresi yang sebenarnya: persentase pengurangan byte berbeda dengan persentase pengurangan ketika server mengirim file dengan gzip. Pita gzip pada peta ukuran memperlihatkan kedua angka itu sekaligus.

          Cara memakai

          1. Tempel CSS di kolom input sebelah kiri (di atas pada layar sempit). Anda juga dapat menekan “Buka file” atau menyeret file .css ke kolom itu. File hingga 5 MB bisa dibuka.
          2. Pilih Rapikan atau Kompres di bagian atas. Hasil berubah seketika selagi Anda mengetik.
          3. Pada mode rapikan, Anda dapat mengatur indentasi (2 spasi, 4 spasi, atau tab), apakah komentar disimpan, dan apakah selektor dipecah per koma. Pada mode kompres, pilih penanganan komentar (hanya /*! disimpan, hapus semua, simpan semua) dan pemendekan warna HEX.
          4. Klik sebuah segmen pita pada peta ukuran, maka bagian itu ditandai di kolom hasil. Menekan tombol nomor baris di “Temuan” akan memilih baris tersebut di kolom input.
          5. Gunakan “Salin hasil” untuk menaruhnya di clipboard atau “Simpan sebagai file” untuk mengunduh. Hasil kompres disimpan dengan nama berakhiran .min.css.

          Beginilah hasil setelah dirapikan

          Merapikan tidak mengubah urutan karakter; hanya baris dan spasi yang ditata ulang. Satu deklarasi per baris, satu spasi setelah titik dua, titik koma di ujungnya, dan aturan bersarang menjorok satu tingkat lebih dalam. Antarblok diberi satu baris kosong, dan komentar yang berada di baris yang sama dengan sebuah deklarasi tetap berada di ujung deklarasi itu setelah dirapikan.

          InputHasil rapiAturan
          .a{color:red;margin:0}.a { / color: red; / margin: 0; / }Satu baris per deklarasi, spasi setelah titik dua
          h1,h2>a{…}h1, / h2 > a {Baris baru pada tiap koma tingkat atas, spasi di kedua sisi > + ~
          rgba(0,0,0,.5)rgba(0, 0, 0, .5)Spasi setelah koma di dalam nilai
          @media (min-width:600px)@media (min-width: 600px)Spasi setelah titik dua di dalam kurung kondisi
          color:red!importantcolor: red !important;Spasi sebelum !important
          .menu{&:hover{…}}.menu { /   &:hover {Aturan bersarang menjorok satu tingkat lebih dalam
          --list: a,b--list: a,b;Properti kustom (--) hanya dijadikan satu spasi

          Seperti pada baris terakhir, properti kustom yang diawali -- tidak diberi spasi setelah koma. Nilai properti kustom disimpan persis seperti yang ditulis, dan getPropertyValue() di JavaScript mengembalikan teks yang sama. Jadi, satu spasi yang ditambahkan agar tampak rapi dapat mengubah nilai yang dibaca skrip. Pemecahan baris pada koma selektor bisa dimatikan; jika mati, hasilnya ditulis berurutan dalam satu baris seperti h1, h2 > a {.

          Yang dihapus kompresi dan yang sengaja dipertahankan

          Kompresi hanya memperpendek karakter dalam batas yang menghasilkan tampilan sama. Sebagian besar spasi boleh dihapus, tetapi ada spasi yang merupakan bagian dari tata bahasa itu sendiri; bila dihapus, kodenya menjadi lain. Enam baris terbawah pada tabel di bawah adalah tempat yang sering rusak pada cara kompresi lain, dan alat ini membiarkannya.

          SasaranSaat dikompresAlasan
          KomentarDihapus (komentar berawalan /*! disimpan secara bawaan)/*! adalah kebiasaan untuk mempertahankan keterangan lisensi, dan pembersihan komentar cssnano juga menyimpannya secara bawaan
          Baris baru, indentasi, spasi di sekitar { } : ; ,DihapusSpasi yang tidak diperlukan untuk memisahkan token
          Titik koma di akhir blokDihapusTanda ; setelah deklarasi terakhir, ada atau tidak, hasilnya sama
          #FFFFFF, #AABBCCDD#fff, #abcdHEX dengan pasangan digit kembar sama dengan notasi 3 dan 4 digit, warnanya sama (CSS Color 4 §5.2)
          Spasi di kedua sisi + − dalam calc(100% - 2rem)DipertahankanSpasi di kedua sisi penjumlahan dan pengurangan wajib ada (Values 4 §10.8). 100%-2rem tidak valid
          Spasi di and ( dan not (DipertahankanJika dirapatkan, and( dibaca sebagai fungsi (Media Queries 4 §3)
          Spasi pada .card :hoverDipertahankanSpasi itu sendiri adalah kombinator keturunan; bila dihapus, selektornya berubah menjadi .card:hover (Selectors 4 §14.1)
          Satuan pada 0px dan 0%DipertahankanJika satuan pada flex: 1 0px dihapus, angka 0 dibaca sebagai faktor penyusutan (Flexbox §7.1), dan 0% pada keyframes hanya menerima bentuk dengan % (Animations 1 §3)
          Aturan kosong dan blok @layer kosongDipertahankanUrutan layer ditentukan oleh urutan deklarasi pertama (Cascade 5 §6.4.3), sehingga @layer base {} yang kosong pun menentukan urutan
          Nilai properti kustom, string, dan isi url()Hanya spasi dirapikan, karakter apa adanyaNilai properti kustom adalah teks yang tertulis, dan karakter di dalam string maupun URL adalah isinya

          Karena itu, nilai properti kustom seperti --brand: #C44A00 tetap berupa HEX huruf besar setelah dikompres, sedangkan hanya color: #FFFFFF pada properti biasa yang menjadi #fff. Daftar “Yang diubah” menampilkan secara terpisah jumlah komentar dan byte yang dihapus, jumlah titik koma yang dihapus, jumlah warna yang dipersingkat, dan byte yang berkurang dari spasi.

          Seberapa kecil hasilnya: rasio kompresi dan ukuran transfer gzip

          Byte yang berkurang karena kompresi tidak sama dengan byte yang benar-benar lewat di jaringan. Kebanyakan server mengirim CSS setelah dikompres lagi dengan gzip atau brotli, dan kompresi semacam ini sangat efektif untuk karakter yang berulang, sehingga spasi berpola sama seperti indentasi dan baris baru sudah banyak berkurang pada tahap itu. Tabel di bawah memuat nilai dari contoh di halaman ini dan file distribusi library publik Bootstrap 5.3.8 yang dikompres dengan alat ini, dengan ukuran transfer yang diukur memakai gzip di browser (Chromium).

          FileAsliHasil kompresgzip asli → kompres
          Contoh “Sumber dengan komentar” (6 komentar)687 B459 B (−33,2%)443 B → 345 B (−22,1%)
          Contoh yang sama, semua komentar dihapus687 B414 B (−39,7%)443 B → 303 B (−31,6%)
          Bootstrap 5.3.8 bootstrap.css280.311 B232.759 B (−17,0%)33.326 B → 30.776 B (−7,7%)
          Pembanding: bootstrap.min.css resmi280.311 B232.111 B (−17,2%)33.326 B → 30.823 B (−7,5%)

          Pada file besar seperti Bootstrap, byte berkurang 17% setelah dikompres, tetapi ukuran transfer gzip hanya berkurang sekitar 8%. Sebabnya, spasi sudah nyaris hilang pada tahap gzip. Pada file kecil terjadi sebaliknya: efek gzip itu sendiri kecil karena header dan footer gzip menambah 18 byte tetap (RFC 1952). Meski begitu, kompresi mengurangi jumlah karakter yang harus dibaca dan ditafsirkan browser, dan di lingkungan tanpa gzip, ukurannya langsung menjadi volume transfer. Versi terkompres resmi Bootstrap melakukan transformasi tambahan, misalnya mengubah urutan selektor atau mengganti rgba(0,0,0,0) menjadi transparent, sehingga lebih kecil 648 B dalam byte, tetapi dalam ukuran transfer gzip, hasil alat ini lebih kecil 47 B. Ketika versi terkompres dari alat ini dibaca browser, 2.660 entri, termasuk aturan di dalam @media, ditafsirkan sama persis dengan aslinya, dan satu-satunya perbedaan adalah spasi di samping koma pada nilai var().

          Nilai gzip pada tabel diukur dengan pengaturan bawaan browser, sehingga bisa sedikit berbeda menurut tingkat kompresi server atau penggunaan brotli. KB pada peta ukuran dihitung dengan 1 KB = 1.024 B.

          Kesalahan yang membuat aturan hilang seluruhnya

          CSS tidak berhenti ketika menemui kesalahan; bagian itu dibuang dan pembacaan berlanjut. Karena itu halaman tidak rusak total, tetapi browser tidak memberi tahu bagian mana yang dibuang, sehingga penyebabnya sulit dicari. Enam kasus di bawah mengikuti cara browser benar-benar membaca (CSS Syntax 3). Alat ini membaca dengan cara yang sama lalu menampilkannya di “Temuan” beserta nomor baris.

          KesalahanCara browser membacaPada alat ini
          } berlebih di luar aturan (.nav{…}})} berlebih ditempelkan di depan selektor aturan berikutnya sehingga terbaca sebagai selektor keliru } .logo, dan aturan itu dibuang seluruhnya (§5.5.3)Nama selektor yang dibuang diberitahukan, dan hasilnya juga memperlihatkan } .logo {
          ( yang tidak tertutup (calc(100% - 20px;)Sampai ) pasangannya muncul, ; dan } ikut masuk ke dalam nilai, sehingga semua aturan sesudahnya hilangBaris kurung buka diberitahukan
          { yang tidak tertutupDianggap tertutup di akhir file. Jika file lain disambung sesudahnya, seluruh file berikutnya masuk ke dalam aturan itu} ditambahkan pada hasil dan baris pembukanya diberitahukan
          Tanda kutip yang tidak tertutup sampai akhir barisDibaca sebagai string yang salah dan deklarasi itu dibuangBaris tempat tanda kutip dibuka diberitahukan
          Komentar /* yang tidak tertutupSemuanya sampai akhir file menjadi komentarBaris tempat komentar dimulai diberitahukan
          Deklarasi tanpa titik dua (font-size 20px)Hanya deklarasi itu yang dibuang, lalu pembacaan dilanjutkan setelah ; berikutnya (§5.5.6)Ditandai sebagai peringatan

          Hal yang bukan kesalahan tetapi layak diperiksa juga ditampilkan. Bila properti yang sama muncul dua kali dalam satu aturan, hanya nilai yang belakangan yang berlaku. Karena bisa saja itu cadangan untuk browser lama seperti display: -webkit-box; display: flex;, hal ini hanya ditandai sebagai “catatan”. Aturan kosong tanpa satu pun deklarasi juga diberitahukan sebagai catatan, tetapi tidak dihapus saat kompresi.

          CSS bersarang dan sintaks baru tetap terbaca

          CSS nesting adalah sintaks yang memungkinkan &:hover { … } atau @media ditulis langsung di dalam sebuah aturan, dan kini didukung semua browser utama. Alat ini membedakan nesting dengan cara spesifikasi: di dalam blok, bila { muncul lebih dulu daripada ; atau }, itu aturan; jika tidak, itu deklarasi. Saat merapikan, tiap tingkat dijorokkan satu langkah. Saat mengompres, tanda ; di antara deklarasi dan aturan bersarang yang mengikutinya dipertahankan.

          FiturChromeFirefoxSafariPada alat ini
          CSS nesting (&)12011717.2Menjorok satu tingkat demi satu, ; antara deklarasi dan aturan dipertahankan saat kompresi
          @layer999715.4Bentuk pernyataan dan bentuk blok sama-sama menurut urutan, blok kosong tetap ada
          Pengukuran gzip (CompressionStream)8011316.4Pada browser yang lebih lama, baris gzip disembunyikan

          Versi tersebut adalah versi pertama yang mendukung fitur, dicek pada data kompatibilitas browser MDN tanggal 2026-10-22. Mulai versi di atas, nesting juga mendukung aturan bersarang yang diawali nama tag seperti a { … }, sedangkan Chrome 112-119 dan Safari 16.5-17.1 sebelumnya tidak mendukung bentuk ini. @-rule lain seperti @container, @supports, @scope, dan @property dibaca dengan cara yang sama.

          Kesalahan yang sering terjadi

          • Mengedit versi terkompres lalu mengompresnya lagi: versi terkompres bisa dirapikan dan diedit, tetapi komentar yang sudah dihapus tidak kembali. Simpan file sumber untuk diedit di tempat terpisah dan buat versi terkompres dari sumber itu setiap kali akan dirilis.
          • Mengurutkan properti menurut abjad: pada margin-top: 8px; margin: 0;, margin: 0 di belakang menang sehingga margin atas 0, tetapi pengurutan menurut abjad memindahkan margin ke depan, margin-top: 8px menang, dan margin atas berubah menjadi 8px. Itulah alasan alat ini tidak menyediakan fitur pengurutan.
          • Ikut menghapus komentar lisensi /*!: banyak kode, seperti yang berlisensi MIT, mensyaratkan pemberitahuan hak cipta tetap ada pada salinannya. Saat mengompres CSS buatan orang lain, biarkan pengaturan bawaan (hanya /*! disimpan).
          • Mengganti 0px menjadi 0 secara massal: ada tempat yang memerlukan satuan, seperti flex: 1 0px, 0% pada keyframes, dan calc(0px + 10%). Jangan mengubahnya sekaligus dengan cari dan ganti.
          • Membiarkan komentar // milik SCSS di dalam CSS: CSS tidak memiliki komentar //. Aturan pada baris sesudah // tombol akan dibuang karena teks itu menempel pada selektornya. Jika pada hasil rapi ada // di depan selektor, inilah kasusnya.
          • Menyambung file yang kehilangan } terakhir: saat beberapa file CSS digabung menjadi satu, blok yang tidak tertutup pada file sebelumnya menelan seluruh file sesudahnya. Sebelum menggabung, tempel setiap file dan pastikan “Temuan” kosong.

          Batasan dan hal yang perlu diperhatikan

          • CSS dibaca dengan sintaks standar. $variabel, @mixin dan @include, komentar //, serta ekspresi hitung milik SCSS dan Less tidak ditafsirkan sebagai CSS, jadi rapikan file semacam itu dengan compiler Sass atau Less, atau dengan Prettier.
          • Optimasi struktural tidak dilakukan: menggabungkan selektor yang sama, menghapus deklarasi ganda, meringkas margin-top dan sejenisnya menjadi satu margin, serta merapikan prefiks vendor. Pekerjaan seperti itu ditangani alat build semacam cssnano, Lightning CSS, dan esbuild.
          • Source map tidak dibuat. Karena /*# sourceMappingURL=… */ di akhir file juga komentar biasa, komentar itu dihapus pada pengaturan kompresi bawaan; bila perlu dipertahankan, ubah pengaturan komentar menjadi “Simpan semua”.
          • Pemeriksaan sintaks hanya sampai tingkat kurung, tanda kutip, komentar, dan titik dua. Salah ketik nama properti seperti colr: red, kesalahan satuan nilai, dan dukungan browser tidak dinilai.
          • File hingga 5 MB dapat dibuka. Jika hasilnya melebihi 300.000 karakter, pewarnaan dilewati demi kecepatan dan hanya teks yang ditampilkan.
          • Ukuran gzip diukur dengan kompresi bawaan browser dan dapat berbeda dari pengaturan server.

          Tanggal acuan Spesifikasi CSS W3C (Syntax 3, Values 4, Media Queries 4, Color 4, Flexbox 1, Cascade 5, Nesting 1) dan data kompatibilitas browser MDN dicek langsung pada sumber aslinya tanggal 2026-10-22. Tabel ukuran berisi nilai yang diukur pada hari yang sama dengan CompressionStream di Chromium, dan Bootstrap mengacu pada file distribusi 5.3.8.

          Sumber

          Pertanyaan yang sering diajukan

          Apa bedanya merapikan CSS dengan mengompres CSS?

          Merapikan (format, beautify) berarti membentangkan deklarasi satu per baris dan menyeragamkan indentasi agar mudah dibaca manusia. Mengompres (minify) berarti menghapus karakter yang tidak diperlukan seperti komentar, spasi, dan baris baru, tanpa mengubah makna bagi browser, sehingga file menjadi lebih kecil. Keduanya menerapkan gaya yang sama, jadi alur yang aman adalah menyimpan file sumber untuk diedit dalam keadaan rapi dan hanya mengompres salinan untuk produksi.

          Apakah CSS bisa rusak setelah dikompres?

          Bisa, bila kompresornya menghapus semua spasi secara mekanis. Jika spasi di kedua sisi tanda kurang pada calc(100% - 2rem) dihapus, nilainya menjadi tidak valid, dan jika spasi pada .card :hover dihapus, selektornya menjadi lain. Alat ini membaca per token menurut spesifikasi CSS, sehingga spasi semacam itu, satuan 0px dan 0%, serta isi string dan url() dibiarkan. Namun, jika kode aslinya sudah rusak, hasilnya pun rusak dengan cara yang sama, jadi perbaiki dulu kesalahan pada bagian Temuan.

          Apakah semua komentar dihapus saat dikompres?

          Pengaturan bawaan hanya menyimpan komentar yang diawali /*! dan menghapus sisanya. /*! adalah kebiasaan untuk mempertahankan keterangan lisensi atau hak cipta, dan alat kompresi seperti cssnano juga menyimpannya secara bawaan. Anda dapat mengubahnya menjadi hapus semua atau simpan semua.

          Mengapa 0px tidak diubah menjadi 0?

          Pada sebagian besar tempat hasilnya sama, tetapi ada tempat yang maknanya berubah. Jika 0px pada flex: 1 0px diubah menjadi 0, angka kedua dibaca sebagai faktor penyusutan; 0% pada @keyframes menjadi tidak valid bila ditulis 0; dan calc(0px + 10%) tidak dapat dihitung bila menjadi 0. Penghematannya hanya 2-3 byte per tempat dan selisihnya lebih kecil lagi setelah gzip, jadi alat ini memilih sisi yang aman.

          Apakah properti diurutkan menurut abjad?

          Tidak. Dalam CSS, deklarasi yang ditulis belakangan menang bila prioritasnya sama. Aturan yang menulis margin: 0 setelah margin-top: 8px memiliki margin atas 0, tetapi pengurutan menurut abjad memindahkan margin ke depan sehingga margin-top: 8px menang dan margin atas menjadi 8px. Urutan dibiarkan seperti aslinya, dan hanya tempat yang memuat properti sama dua kali yang diberitahukan di bagian Temuan.

          Mengapa satu } berlebih menjadi masalah?

          } berlebih di luar aturan tidak diabaikan browser, melainkan ditempelkan di depan selektor aturan berikutnya. Hasilnya adalah selektor keliru seperti '} .logo', dan satu aturan sesudahnya dibuang seluruhnya. Ini kasus khas ketika hanya sebagian tampilan yang aneh dan penyebabnya sulit dicari, sehingga alat ini menampilkan barisnya bersama selektor yang dibuang.

          Apakah SCSS atau Less juga bisa dirapikan?

          Alat ini membaca sintaks CSS standar, jadi sintaks yang juga ada di CSS, seperti nesting (&) dan deklarasi di dalam @media, dapat dirapikan. Namun sintaks yang hanya ada di SCSS atau Less, seperti komentar satu baris //, $variabel, @mixin dan @include, serta ekspresi hitung, tidak ditafsirkan sebagai CSS dan hasilnya bisa meleset. Rapikan file semacam itu dengan compiler Sass atau Less, atau dengan Prettier.

          Apakah CSS yang saya masukkan disimpan atau dikirim ke suatu tempat?

          Tidak. Merapikan, mengompres, menghitung ukuran, dan mengukur gzip semuanya berlangsung di dalam browser ini, dan tidak ada yang dikirim ke server atau disimpan. Isi input ikut hilang saat halaman ditutup, jadi salin hasil yang Anda perlukan atau simpan sebagai file.