Jak używać arkuszy stylów specyficznych dla kontrolera w Rails 3.2.1?
Using Rails 3.2.1
Stworzyłem prosty kontroler o nazwie Home używając polecenia:
rails g controller Home index
I stworzył dla mnie nowy kontroler i widok:
Zauważ, że istnieją dwa arkusze stylów, jeden "Application" i jeden "Home". Nie mogę znaleźć żadnej dokumentacji na poparcie tego założenia, ale zgaduję, że umieściłeś style, które będą stosowane tylko do widoków "Home", W Domu.css.plik scss, zgadza się?
Więc jako test dodałem w jakimś globalnym style do zastosowania.css.scss.erb i uruchomił aplikację.
Style zastosowane zgodnie z oczekiwaniami.
Następnie dodałem kilka zasad do domu.css.plik scss i odwiedziłem widok "Home / index" , jednak styl w tym pliku nie był dołączony, ani jako oddzielny odnośnik do CSS, ani nawet dołączony do pojedynczej aplikacji.css.plik scss. Jest to dla mnie bardzo mylące, ponieważ komentarze mówią:
// Place all the styles related to the Home controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
Dlaczego zasady nie są napisane w domu.css.scss applied to my website?
4 answers
Myślę, że to nie działa w ten sposób (Home.css
jest stosowane tylko do Home
akcji kontrolera). Poszczególne pliki są po prostu do oddzielenia, aby wyjaśnić, jakie są reguły CSS opisujące. Możesz przeczytać ten przewodnik o potoku zasobów. Domyślam się, że zmieniłeś domyślną application.css.scss
i usunąłeś linię importującą wszystkie pliki CSS z app/assets/stylesheets
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-12 00:29:13
To może działać w ten sposób i Marek jest całkiem poprawny, odpowiedź jest w poradniku. W wstęp do sekcji 2.1:
Na przykład, jeśli wygenerujesz
ProjectsController
, Rails również doda nowy plik wapp/assets/javascripts/projects.js.coffee
i inny wapp/assets/stylesheets/projects.css.scss
. Należy umieścić dowolny JavaScript lub CSS unikalne do kontrolera wewnątrz ich odpowiednich plików zasobów, jak te pliki mogą być ładowane tylko dla tych kontrolerów z linii, takich jak<%= javascript_include_tag params[:controller] %>
lub<%= stylesheet_link_tag params[:controller] %>
.
Więc aby ustawić swoją aplikację na load controller specific stylesheets:
Najpierw wyłącz domyślne ładowanie wszystkich arkuszy stylów, usuwając wszelkie dodatkowe wymagania w aplikacji.Manifest css.
Zazwyczaj zobaczysz taki wpis:
*= require_tree .
Jeśli nadal chcesz załadować niektóre popularne pliki css, możesz przenieść je do podkatalogu i zrobić coś takiego:
*= require_tree ./common
Po drugie, w układzie aplikacji Dodaj sugerowany stylsheet_link_tag np
<%= stylesheet_link_tag "application", :media => "all" %>
<%= stylesheet_link_tag params[:controller] %>
W tym przykładzie najpierw Załaduj plik CSS aplikacji, a następnie załaduj dowolny plik css, który pasuje do bieżącej nazwy kontrolera.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-24 13:45:15
Rozwiązałem ten problem prostym rozwiązaniem. Dodaję do body
nazwę kontrolera jako klasę, edytując views/layouts/application.html.slim
:
body class=controller.controller_name
Lub views/layouts/application.html.erb
:
<body class="<%= controller.controller_name%>">
A potem w moim css używam body.controller_name
jako przestrzeni nazw :
/* example for /users/ */
body.users {
color: #000;
}
body.users a {
text-decoration: none;
}
Dla małych projektów myślę, że jest w porządku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-07 14:47:30
TL; DR:
Zignoruj ten komentarz, nie jest napisany przez Sass. Ale umieścić:
@import "*";
do Twojej aplikacji.css.plik scss i automatycznie zaimportuje wszystkie pliki SCSS kontrolera.
Pełna wersja:
Zastrzeżenie: to jest moje obecne zrozumienie przepływu potoku zasobów z Sass i bez niego.
Myślę, że ten komentarz jest napisany przez standard Rails Asset pipeline( sprockets), a nie przez Sass:
// Place all the styles related to the Home controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
Standardowy rurociąg będzie obsługiwał pliki scss, ale nie zakłada aplikacji.css.scss plik. Ale jeśli utworzysz taki plik za pomocą Sass, to Sass skompiluje go do aplikacji.plik css .
Jeśli używasz zwykłego potoku zasobów rails, bez Sass, to sprockets załaduje plik css do aplikacji .plik css automatycznie (jeśli w tym pliku znajduje się domyślna linia *= require_tree .
).
Kiedy używasz Sass, z aplikacją .css.scss / align = "left" / skompiluj ten plik do aplikacji .plik css . (Zakładam, że nadpisuje lub ma pierwszeństwo przed dowolną aplikacją.plik css, który już miałeś).
Aby dostać się do domu.css.plik scss (i inne pliki kontrolera) Automatycznie dołączony, umieść tę linię w swojej aplikacji .css.scss plik:
@import "*";
W celach informacyjnych, zobacz to pytanie: czy można zaimportować cały katalog w sass używając @import?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:32