Pelajari cara menggunakan skrip modul CSS untuk mengimpor stylesheet CSS menggunakan sintaksis yang sama dengan modul JavaScript.
Dengan fitur skrip modul CSS baru, Anda dapat memuat sheet gaya CSS dengan pernyataan import
, seperti modul JavaScript. Sheet gaya kemudian dapat diterapkan ke dokumen atau root bayangan dengan cara yang sama seperti sheet gaya yang dapat dibuat. Cara ini dapat lebih praktis dan lebih berperforma daripada cara lain untuk mengimpor dan menerapkan CSS.
Dukungan Browser
Skrip modul CSS tersedia secara default di Chrome dan Edge versi 93.
Dukungan di Firefox dan Safari belum tersedia. Progres implementasi dapat dilacak di bug Gecko dan bug WebKit.
Prasyarat
- Pemahaman tentang modul JavaScript.
- Pemahaman tentang stylesheet yang dapat dibuat.
Menggunakan skrip modul CSS
Impor skrip modul CSS dan terapkan ke dokumen atau root bayangan seperti ini:
import sheet from './styles.css' assert { type: 'css' };
document.adoptedStyleSheets = [sheet];
shadowRoot.adoptedStyleSheets = [sheet];
Ekspor default skrip modul CSS adalah stylesheet yang dapat dibuat yang isinya adalah file yang diimpor. Seperti stylesheet lain yang dapat dibuat, stylesheet ini diterapkan ke dokumen atau root bayangan menggunakan adoptedStyleSheets
.
Tidak seperti cara lain untuk menerapkan CSS dari JavaScript, Anda tidak perlu membuat elemen <style>
atau mengganggu string JavaScript dari teks CSS.
Modul CSS juga memiliki beberapa manfaat yang sama dengan modul JavaScript.
- Penghapusan duplikat: jika file CSS yang sama diimpor dari beberapa tempat dalam aplikasi, file tersebut hanya akan diambil, dibuat instance-nya, dan diuraikan satu kali.
- Urutan evaluasi yang konsisten: saat JavaScript impor berjalan, JavaScript dapat mengandalkan stylesheet yang diimpor yang telah diambil dan diuraikan.
- Keamanan: modul diambil dengan CORS dan menggunakan pemeriksaan jenis MIME yang ketat.
Impor Pernyataan (apa yang dimaksud dengan 'assert
'?)
Bagian assert { type: 'css' }
dari pernyataan import
adalah pernyataan impor. Hal ini diperlukan; tanpanya, import
akan diperlakukan sebagai impor modul JavaScript normal, dan akan gagal jika file yang diimpor memiliki jenis MIME non-JavaScript.
import sheet from './styles.css'; // Failed to load module script:
// Expected a JavaScript module
// script but the server responded
// with a MIME type of "text/css".
Stylesheet yang diimpor secara dinamis
Anda juga dapat mengimpor modul CSS menggunakan impor dinamis, dengan parameter kedua baru untuk pernyataan impor type: 'css'
:
const cssModule = await import('./style.css', {
assert: { type: 'css' }
});
document.adoptedStyleSheets = [cssModule.default];
Aturan @import
belum diizinkan
Saat ini, aturan @import
CSS tidak berfungsi dalam stylesheet yang dapat dibuat, termasuk skrip modul CSS. Jika aturan @import
ada dalam stylesheet yang dapat dibuat, aturan tersebut akan diabaikan.
/* atImported.css */
div {
background-color: blue;
}
/* styles.css */
@import url('./atImported.css'); /* Ignored in CSS module */
div {
border: 1em solid green;
}
<!-- index.html -->
<script type="module">
import styles from './styles.css' assert { type: "css" };
document.adoptedStyleSheets = [styles];
</script>
<div>This div will have a green border but no background color.</div>
Dukungan untuk @import
dalam skrip modul CSS dapat ditambahkan ke spesifikasi. Lacak diskusi spesifikasi ini di masalah .