Apakah ada cara untuk mengimpor file CSS biasa dengan @import
perintah Sass ? Meskipun saya tidak menggunakan semua sintaks SCSS dari sass, saya masih menikmati itu menggabungkan / mengompresi fitur, dan ingin dapat menggunakannya tanpa mengubah nama semua file saya ke * .scss
509
@import
dalam file CSS biasa seharusnya hanya menghasilkan impor CSS biasa . Itu berarti satu permintaan HTTP lagi dan tidak ada penggabungan atau kompresi. Jika beberapa implementasi berperilaku berbeda maka saya akan mengatakan itu adalah fitur non-standar yang menyimpang dari spesifikasi bahasa.Jawaban:
Sepertinya ini belum diterapkan, pada saat penulisan ini:https://github.com/sass/sass/issues/193Untuk libsass (implementasi C / C ++), impor bekerja
*.css
dengan cara yang sama seperti untuk*.scss
file - cukup hapus ekstensi:Ini akan mengimpor
path/to/file.css
.Lihat jawaban ini untuk perincian lebih lanjut.
Lihat jawaban ini untuk implementasi Ruby (sass gem)
sumber
@import
pernyataan tidak berubah sama sekali dan muncul dalam file CSS yang dihasilkan, Sass tidak menyertakan file CSS direferensikan seperti @GSto meminta. Sepertinya akan diterapkan di Sass 3.4 atau 4.0libsass
. Lihat jawaban stackoverflow.com/questions/7111610/… dan PR github.com/sass/libsass/pull/754*.css
dengan cara yang sama seperti untuk*.css
file" adalah sebuah tautologi. Anda bermaksud salah satu dari mereka*.scss
, kan?Setelah mengalami masalah yang sama, saya menjadi bingung dengan semua jawaban di sini dan komentar-komentar tentang repositori sass di github.
Saya hanya ingin menunjukkan bahwa pada Desember 2014, masalah ini telah diatasi. Sekarang dimungkinkan untuk mengimpor
css
file langsung ke file sass Anda. PR berikut di github memecahkan masalah ini.Sintaksnya sama seperti sekarang -
@import "your/path/to/the/file"
, tanpa ekstensi setelah nama file. Ini akan mengimpor file Anda secara langsung. Jika Anda menambahkan*.css
di akhir, itu akan diterjemahkan ke dalamcss
aturan@import url(...)
.Jika Anda menggunakan beberapa bundler modul "mewah" baru seperti webpack , Anda mungkin perlu menggunakan penggunaan
~
di awal jalan. Jadi, jika Anda ingin mengimpor jalur berikutnode_modules/bootstrap/src/core.scss
Anda akan menulis sesuatu seperti@import "~bootstrap/src/core"
.CATATAN:
Tampaknya ini tidak berfungsi untuk semua orang. Jika penerjemah Anda didasarkan pada
libsass
itu harus berfungsi dengan baik (periksa ini ). Saya sudah diuji menggunakan@import
pada node-sass dan itu berfungsi dengan baik. Sayangnya ini berfungsi dan tidak berfungsi pada beberapa contoh ruby.sumber
libsass
tetapi ketika menggunakan implementasi ruby dari sass, tampaknya sintaks ini berfungsi, tetapi hanya jika Anda telahsass-css-importer
diminta. Setidaknya itulah yang saya lihat. Adakah yang bisa mengkonfirmasi ini?ruby
dannodejs
penerjemah. Sudahkah Anda memeriksa jika Anda tidak menempatkan ekstensi setelah nama file? Sintaks yang benar adalah@import "path/to/style/file
(tanpa.css
ekstensi)Error: File to import not found or unreadable: cssdep/cssfile
. Jika saya membuatnyacssdep/cssfile.scss
tiba-tiba berfungsi. Jadi bukan masalah jalur, untuk beberapa alasan saya masih tidak bisa memasukkan file '.css' dari SASS :(ruby -v
:ruby 2.2.2p95 (2015-04-13 revision 50295) [x64-mingw32]
sass -v
:Sass 3.4.17 (Selective Steve)
Tidak bekerja di sini@import "node_modules/normalize.css/normalize";
Anda harus menambahkan awal garis bawah ke file css untuk disertakan, dan mengalihkan ekstensinya ke scss (mis
_yourfile.scss
. :) . Maka Anda hanya perlu menyebutnya seperti ini:Dan itu akan mencakup isi file, alih-alih menggunakan direktif standar impor CSS.
sumber
Ini diimplementasikan dan digabung mulai dari versi
3.2
( tarikan # 754 digabung pada 2 Jan 2015 untuklibsass
, masalah aslinya didefinisikan di sini:sass
# 193 # 556 ,libsass
# 318 ).Untuk mempersingkat cerita, sintaksis berikutnya:
untuk mengimpor (termasuk) file CSS mentah
sintaksnya tanpa.css
ekstensi di akhir (menghasilkan pembacaan aktual sebagians[ac]ss|css
dan menyertakannya sebaris ke SCSS / SASS):@import "path/to/file";
untuk mengimpor file CSS dengan cara tradisional
sintaks berjalan dengan cara tradisional, dengan.css
ekstensi di akhir (hasil@import url("path/to/file.css");
dalam CSS yang dikompilasi):@import "path/to/file.css";
Dan itu sangat bagus: sintaks ini elegan dan singkat, ditambah kompatibel dengan belakang! Ia bekerja dengan sangat baik dengan
libsass
dannode-sass
.__
Untuk menghindari spekulasi lebih lanjut dalam komentar, menulis ini secara eksplisit: Sass berbasis Ruby masih memiliki fitur ini tidak diterapkan setelah 7 tahun diskusi. Pada saat menulis jawaban ini, dijanjikan bahwa pada 4.0 akan ada cara sederhana untuk mencapai ini, mungkin dengan bantuan . Tampaknya akan ada implementasi segera, tag baru
"terencana""Proposal Diterima" ditugaskan untuk masalah # 556 dan fitur baru .@use
@use
jawabannya mungkin diperbarui, segera setelah sesuatu berubah .
sumber
Node-sass
adalah perpustakaan Node.js LibSass ( versi C dari Sass). Tidak satu pun menyebutkan itulibsass
ataunode-sass
berbasis Ruby, tidak satu pun menyebutkan tentang versi RUBY hanya dalam pertanyaan asli. Tolong, baca dengan seksama, sebelum menulis 3 komentar berturut-turut lain kali. Saya memiliki semua referensi: sesuai masalah # 193 masih belum diterapkan setelah 5 tahun diskusi untuk versi Ruby, mereka menjanjikan fungsi ini hanya ketika ver. 4.0 akan tersedia.Berita baik semua orang, Chris Eppstein membuat plugin kompas dengan fungsionalitas inline css import:
https://github.com/chriseppstein/sass-css-importer
Sekarang, mengimpor file CSS semudah:
sumber
Jika Anda memiliki
.css
file yang tidak ingin Anda modifikasi, jangan ubah ekstensi ke.scss
( mis. File ini berasal dari proyek bercabang yang tidak Anda pertahankan ), Anda selalu dapat membuat symlink dan kemudian mengimpornya ke file Anda.scss
.Membuat symlink:
Impor file symlink ke target
.scss
:.css
File output target Anda akan menyimpan konten dari.scss
file symlink yang diimpor , bukan aturan impor CSS ( disebutkan oleh @yaz dengan suara komentar tertinggi ). Dan Anda tidak memiliki file duplikat dengan ekstensi berbeda, apa artinya setiap pembaruan yang dibuat di dalam.css
file awal segera diimpor ke output target Anda.sumber
.css
dan symlink yang dibuat) tersedia untuk semua orang melalui repositori bersama, misalnya.mklink /H <link> <target>
, dan itu disebut hard link @ mrsafraz.Anda dapat menggunakan pihak ketiga
importer
untuk menyesuaikan@import
semantik.node-sass-import-once , yang bekerja dengan node-sass (untuk Node.js) dapat secara inline mengimpor file CSS.
Contoh penggunaan langsung:
Contoh konfigurasi grunt-sass :
Perhatikan bahwa node-sass-import-once saat ini tidak dapat mengimpor parsial Sass tanpa garis bawah utama yang eksplisit. Misalnya dengan file
partials/_partial.scss
:@import partials/_partial.scss
berhasil@import * partials/partial.scss
gagalSecara umum, ketahuilah bahwa importir khusus dapat mengubah semantik impor apa pun . Baca dokumen sebelum Anda mulai menggunakannya.
sumber
Jika saya benar css kompatibel dengan scss sehingga Anda dapat mengubah ekstensi css ke scss dan itu harus terus bekerja. Setelah Anda mengubah ekstensi, Anda dapat mengimpornya dan itu akan disertakan dalam file.
Jika Anda tidak melakukannya sass akan menggunakan css @import yang merupakan sesuatu yang tidak Anda inginkan.
sumber
Saya menemukan cara Rails yang elegan untuk melakukannya. Pertama, ganti nama
.scss
file Anda.scss.erb
, kemudian gunakan sintaks seperti ini (contoh untuk highlight_js-rails4 gem CSS aset ):Mengapa Anda tidak dapat meng-host file secara langsung melalui SCSS :
Melakukan
@import
dalam SCSS berfungsi dengan baik untuk file CSS selama Anda secara eksplisit menggunakan path lengkap dengan satu atau lain cara. Dalam mode pengembangan,rails s
melayani aset tanpa mengompilasinya, jadi jalur seperti ini berfungsi ...... karena jalur yang di-host secara harfiah
/assets/highlight_js/github.css
. Jika Anda mengklik kanan pada halaman dan "melihat sumber", lalu klik pada tautan untuk stylesheet dengan yang di atas@import
, Anda akan melihat garis di sana yang terlihat seperti:Mesin SCSS diterjemahkan
"highlight_js/github.css"
menjadiurl(highlight_js/github.css)
. Ini akan bekerja dengan baik sampai Anda memutuskan untuk mencoba menjalankannya di produksi di mana aset dikompilasi memiliki hash yang disuntikkan ke nama file. File SCSS masih akan menyelesaikan ke statis/assets/highlight_js/github.css
yang tidak dikompilasi dan tidak ada dalam produksi.Bagaimana solusi ini bekerja:
Pertama, dengan memindahkan
.scss
file ke.scss.erb
, kami telah secara efektif mengubah SCSS menjadi templat untuk Rails. Sekarang, setiap kali kita menggunakan<%= ... %>
tag templat, prosesor templat Rails akan mengganti snippet ini dengan output kode (sama seperti templat lainnya).Menyatakan
asset_path("highlight_js/github")
dalam.scss.erb
file melakukan dua hal:rake assets:precompile
tugas untuk mengkompilasi file CSS yang sesuai.Ini juga berarti bahwa mesin SCSS bahkan tidak mem-parsing file CSS; itu hanya menampung tautan! Jadi tidak ada patch monyet tipu atau solusi kotor. Kami melayani aset CSS melalui SCSS sebagaimana dimaksud, dan menggunakan URL untuk mengatakan aset CSS sebagai Rails dimaksudkan. Manis!
sumber
Solusi sederhana:
Semua, atau hampir semua file css dapat juga diartikan seolah-olah itu adalah scss. Ini juga memungkinkan untuk mengimpornya di dalam blok. Ubah nama css menjadi scss, dan impor itu.
Dalam konfigurasi aktual saya, saya melakukan hal berikut:
Pertama-tama saya menyalin file .css menjadi file sementara, kali ini dengan ekstensi .scss. Contoh konfigurasi kasar:
Kemudian Anda dapat mengimpor file .scss dari scss induk Anda (dalam contoh saya, bahkan diimpor ke dalam blok):
Catatan: ini bisa berbahaya, karena secara efektif akan menghasilkan bahwa css akan diuraikan beberapa kali. Periksa css asli Anda karena mengandung artefak scss-interpretable (tidak mungkin, tetapi jika itu terjadi, hasilnya akan sulit untuk di-debug dan berbahaya).
sumber
Sekarang dimungkinkan menggunakan:
sumber
sass-css-importer
diinstal, sass disebut dengan sakelar-r sass-css-importer
dan.css
dihilangkan dari jalur berkasSaya dapat mengkonfirmasi ini berfungsi:
Kredit untuk Chriss Epstein: https://github.com/sass/sass/issues/193
sumber
Sederhana.
@import "path / to / file.css";
sumber