Witam,
posiadam obecnie aplikację (rails3) do której chciałbym zmienić część stylów - chciałbym jednak te zmiany zapisywać w nowym pliku (żeby nie naruszać oryginalnej, dość rozbudowanej struktury zdefiniowanych już reguł css) - chodzi mi np. o to, że ten plik przechowywałby tylko te wartości, które chciałbym zmienić w bieżącym layoucie np.:
plik: superduperchanges.css
.image{
display: block;
}
Jak sprawić, żeby wartość display z pliku main.css została nadpisana przez tą z superduperchanges.css? Słyszałem, że trzeba sprawić, żeby ten plik superduperchanges.css był ładowany przez aplikację jako ostatni - ale jak to zrobić? plz help
w application.css musisz ustawić po kolei, które pliki mają być łądowane których z railcastów, dotyczących rails 3.1 pokazywał jak to dokładnie rozwiązać. Oczywiście musisz mieć rails >=3.1 w starszych wersjach to w pliku szablonu określasz kolejność plików.
ok ustawione, niestety nie działa - tzn. style nie są nadpisywane - czy może powinienem do każdej modyfikacji z pliku superduperchanges.css dodać !important;?
EDIT:
ok znalazłem tego railscasta (#268), dzięki za pomoc, spróbuję zrobić wg. wskazówek
*/[/code]
później było odkomentowane wszystko - też nie działało, później zgodnie z raislcastami usunięte _tree, zmiana rozszerzenia na .css.scss i dodanie @import - też nic
Nadpisywanie css w ten sposób jest moim zdaniem najgorsza rzeczą jaką możesz zrobić…
Zamiast kombinować z kolejnością ładowania plików spróbuj swoje nowe style zdefiniowac tak aby były bardziej dokładne niż oryginały, czyli jak masz w oryginale:
a {color: red}
to u siebie daj np:
body a {color: green}
Css ma to do siebie ze najważniejsze są dla niego style najdokładniej dopasowane do danego elementu. I tak to powinno banglać. W kodzie ruby chyba nie nadpisujesz metod w plikach ładowanych na koncu?
ok, spróbuję zrobić tak jak mi polecałeś. Co do tego nadpisywania metod - tylko gdzieś słyszałem/czytałem że taki myk można zrobić - tylko nie wiem czy railsach i czy nie trzeba czegoś dodatkowo dopisać (jakiś js czy coś)
możesz również w w application.css ladować każdy css z osobna, wtedy będziesz w pełni panował nad kolejnością ładowania plików, ale uwaga, jak będziesz chciał skorzystać z tego rozwiązanie to nie używaj require_tree . bo ono ładuje wszystkie pliki z drzewa, możesz też zrobić tak że wrzucisz wszystkie css do jakiegos podfolderu a ten jeden zostawisz na obecnym miejscu, wtedy wszystkie css poza tym jednym możesz załadować za pomocą require_tree podfolder/ (lub jakoś tak) a ten jeden ladujesz przez require. O tym też chyba było na railscast
problem rozwiązany: działa sposób z dodaniem kolejnego *= require w pliku application.css, ale zadziałało dopiero po tym, jak zmieniłem nazwę pliku na main_defaults.css (nadpisuje style z main.css i innych - nie czaję dlaczego wcześniej to nie działało - na pewno nie miałem nigdzie literówki - ktoś to potrafi wytłumaczyć?) anyway, dzięki za pomoc
Nie zgodzę się. Tzn. nie bezwarunkowo. Jeśli to jest ogólna praktyka w jakichkolwiek plikach css, to krzyż na drogę.
Za to jest miejsce, w którym coś takiego się sprawdza. Jeśli masz jakiś css bazowy, który raczej się nie zmienia, jeśli chodzi o konwencję (na przykład ostatnio modny bootstrap.css lub znany reset.css od Erica Meyera).
Polecam technikę:
Plik z requireami o nazwie layoutu, na przykład application, admin itp.
Folder o tej samej nazwie z ogólnymi plikami
Wtedy na przykład zawartość pliku wygląda tak:
admin.css.sass:
//=require bootstrap
//=require_tree ./admin
Wtedy style z bootstrap lub reset zostaną wczytane pierwsze. Wczytanie całego katalogu admin wymusi tworzenie szerszych definicji pomiędzy poszczególnymi cssami, ale oszczędzi nam tego przy nadpisywaniu definicji bootstrap / reset (co tym bardziej w przypadku tego drugiego jest porządane.