Jadi, saya memiliki app/assets/stylesheets/
struktur direktori yang terlihat seperti ini:
|-dialogs
|-mixins
|---buttons
|---gradients
|---vendor_support
|---widgets
|-pages
|-structure
|-ui_elements
Di setiap direktori, ada beberapa bagian sass (biasanya * .css.scss, tetapi satu atau dua * .css.scss.erb).
Saya mungkin berasumsi banyak, tetapi Rails HARUS secara otomatis mengkompilasi semua file di direktori tersebut karena *= require_tree .
di application.css, bukan?
Saya baru-baru ini mencoba merestrukturisasi file-file ini dengan menghapus semua variabel warna dan menempatkannya dalam file di app/assets/stylesheets
folder root (_colors.css.scss). Saya kemudian membuat file di app/assets/stylesheets
folder root bernama master.css.scss yang terlihat seperti ini:
// Color Palette
@import "colors";
// Mixins
@import "mixins/buttons/standard_button";
@import "mixins/gradients/table_header_fade";
@import "mixins/vendor_support/rounded_corners";
@import "mixins/vendor_support/rounded_corners_top";
@import "mixins/vendor_support/box_shadow";
@import "mixins/vendor_support/opacity";
Saya tidak begitu mengerti bagaimana rel menangani urutan kompilasi aset, tetapi jelas tidak menguntungkan saya. Tampaknya tidak ada file yang menyadari bahwa mereka memiliki variabel atau mixin yang diimpor, sehingga menimbulkan kesalahan dan saya tidak dapat mengkompilasi.
Undefined variable: "$dialog_divider_color".
(in /home/blah/app/assets/stylesheets/dialogs/dialog.css.scss.erb)
Undefined mixin 'rounded_corners'.
(in /home/blah/app/assets/stylesheets/widgets.css.scss)
Variabel $dialog_divider_color
didefinisikan dengan jelas di _colors.css.scss, dan _master.css.scss
mengimpor warna dan semua mixin saya. Tapi rupanya rel tidak mendapatkan memo itu.
Apakah ada cara agar saya dapat memperbaiki kesalahan ini, atau apakah saya perlu menggunakan semua definisi variabel saya kembali ke setiap file individual, serta semua impor mixin?
Sayangnya, orang ini sepertinya tidak berpikir itu mungkin, tapi saya berharap dia salah. Pikiran apa pun sangat dihargai.
sumber
application.css
dan mengubah namanya menjadiapplication.scss
. Karenarequire_tree
hanya mencakup semuanya dan Anda biasanya ingin mengontrol pesananuntuk menggunakan variabel dan sejenisnya di seluruh file, Anda perlu menggunakan direktif @import. file diimpor sesuai urutan yang ditentukan.
kemudian, gunakan application.css untuk meminta file yang mendeklarasikan impor. inilah cara untuk mencapai kendali yang Anda inginkan.
terakhir, dalam file layout.erb, Anda dapat menentukan file css "master" mana yang akan digunakan
contoh akan lebih membantu:
misalkan Anda memiliki dua modul di aplikasi Anda yang membutuhkan kumpulan css yang berbeda: "application" dan "admin"
file
|-app/ |-- assets/ |--- stylesheets/ | // the "master" files that will be called by the layout |---- application.css |---- application_admin.css | | // the files that contain styles |---- config.scss |---- styles.scss |---- admin_styles.scss | | // the files that define the imports |---- app_imports.scss |---- admin_imports.scss | | |-- views/ |--- layouts/ |---- admin.html.haml |---- application.html.haml
inilah tampilan file di dalamnya:
-------- THE STYLES -- config.scss // declare variables and mixins $font-size: 20px; -- app_imports.scss // using imports lets you use variables from `config` in `styles` @import 'config' @import 'styles' -- admin_imports.scss // for admin module, we import an additional stylesheet @import 'config' @import 'styles' @import 'admin_styles' -- application.css // in the master application file, we require the imports *= require app_imports *= require some_other_stylesheet_like_a_plugin *= require_self -- application_admin.css // in the master admin file, we require the admin imports *= require admin_imports *= require some_other_stylesheet_like_a_plugin *= require_self -------- THE LAYOUTS -- application.html.haml // in the application layout, we call the master css file = stylesheet_link_tag "application", media: "all" -- admin.html.haml // in the admin layout, we call the admin master css file = stylesheet_link_tag "application_admin", media: "all"
sumber
Buat struktur folder berikut:
+ assets | --+ base | | | --+ mixins (with subfolders as noted in your question) | --+ styles | --+ ...
Dalam folder
base
buat file "globals.css.scss". Di file ini, nyatakan semua impor Anda:@import 'base/colors'; @import 'base/mixins/...'; @import 'base/mixins/...';
Di application.css.scss, Anda harus memiliki:
*= require_self *= depends_on ./base/globals.css.scss *= require_tree ./styles
Dan sebagai langkah terakhir (ini penting), nyatakan
@import 'base/globals'
di setiap file gaya di mana Anda ingin menggunakan variabel atau mixin. Anda mungkin mempertimbangkan overhead ini, tetapi saya sebenarnya menyukai gagasan bahwa Anda harus mendeklarasikan dependensi gaya Anda di setiap file. Tentu saja, Anda hanya perlu mengimpor mixin dan variabel di globals.css.scss karena mereka tidak menambahkan definisi gaya. Jika tidak, definisi gaya akan disertakan beberapa kali dalam file yang telah dikompilasi sebelumnya ...sumber
Menurut pertanyaan ini , Anda HANYA dapat menggunakan
application.css.sass
untuk menentukan variabel impor dan berbagi di antara template Anda.=> Sepertinya hanya masalah nama.
Cara lain adalah memasukkan semuanya dan menonaktifkan pipeline ini .
sumber
Saya punya masalah yang sangat mirip. Yang membantu saya adalah memasukkan garis bawah ke pernyataan @import saat mengimpor parsial. Begitu
@import "_base";
dari pada
@import "base";
Ini mungkin bug yang aneh ...
sumber