JavaScript modülleriyle aynı söz dizimini kullanarak CSS stil sayfalarını içe aktarmak için CSS modülü komut dosyalarını nasıl kullanacağınızı öğrenin.
Yeni CSS modülü komut dosyaları özelliğiyle, CSS stil sayfalarını JavaScript modüllerinde olduğu gibi import
ifadeleriyle yükleyebilirsiniz. Stil sayfaları daha sonra oluşturulabilir stil sayfalarıyla aynı şekilde dokümanlara veya gölge köklerine uygulanabilir. Bu yöntem, CSS'yi içe aktarma ve uygulamanın diğer yollarından daha kullanışlı ve daha verimli olabilir.
Tarayıcı Desteği
CSS modülü komut dosyaları, Chrome ve Edge'in 93 sürümünde varsayılan olarak kullanılabilir.
Firefox ve Safari'de henüz destek sunulmamaktadır. Uygulama ilerleme durumu sırasıyla Gecko hatası ve WebKit hatası sayfalarında takip edilebilir.
Ön koşullar
- JavaScript modülleri hakkında bilgi sahibi olmanız gerekir.
- Yapılabilir stil sayfaları hakkında bilgi sahibi olmak.
CSS modülü komut dosyalarını kullanma
Bir CSS modülü komut dosyasını içe aktarın ve aşağıdaki gibi bir dokümana veya gölge köküne uygulayın:
import sheet from './styles.css' assert { type: 'css' };
document.adoptedStyleSheets = [sheet];
shadowRoot.adoptedStyleSheets = [sheet];
CSS modülü komut dosyasının varsayılan dışa aktarma işlemi, içeriği içe aktarılan dosyanın içeriği olan bir oluşturulabilir stil sayfasıdır. Diğer tüm oluşturulabilir stil sayfaları gibi, adoptedStyleSheets
kullanılarak dokümanlara veya gölge köklere uygulanır.
JavaScript'den CSS uygulamanın diğer yollarının aksine, <style>
öğeleri oluşturmanıza veya CSS metinlerinin JavaScript dizeleriyle uğraşmanıza gerek yoktur.
CSS modülleri, JavaScript modülleriyle aynı avantajlardan bazılarını da sunar.
- Tekilleştirme: Aynı CSS dosyası bir uygulamadaki birden fazla yerden içe aktarılırsa yine de yalnızca bir kez getirilir, örneklenir ve ayrıştırılır.
- Değerlendirmenin tutarlı sırası: İçe aktarıcı JavaScript çalışırken, içe aktardığı stil sayfasının önceden getirilmiş ve ayrıştırılmış olmasına güvenebilir.
- Güvenlik: Modüller CORS ile getirilir ve sıkı MIME türü kontrolü kullanır.
İçe Aktarma Onayları ("assert
" ile ne olur?)
import
ifadesinin assert { type: 'css' }
kısmı bir içe aktarma beyanı'dır. Bu zorunludur; aksi takdirde import
normal bir JavaScript modülü içe aktarma işlemi olarak değerlendirilir ve içe aktarılan dosyanın MIME türü JavaScript dışındaysa işlem başarısız olur.
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".
Dinamik olarak içe aktarılan stil sayfaları
type:
'css'
içe aktarma beyanı için yeni bir ikinci parametreyle dinamik içe aktarma özelliğini kullanarak da CSS modülü içe aktarabilirsiniz:
const cssModule = await import('./style.css', {
assert: { type: 'css' }
});
document.adoptedStyleSheets = [cssModule.default];
@import
kurallarına henüz izin verilmedi
Şu anda CSS @import
kuralları, CSS modül komut dosyaları da dahil olmak üzere, yapılandırılabilir stil sayfalarında çalışmamaktadır. Oluşturulabilir bir stil sayfasında @import
kuralları varsa bu kurallar yok sayılır.
/* 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>
CSS modülü komut dosyalarında @import
desteği spesifikasyona eklenebilir. Bu spesifikasyon tartışmasını GitHub sorununda takip edin.