Chciałbym używać warunków w moim CSS.
Chodzi o to, że mam zmienną, którą zastępuję, gdy witryna jest uruchamiana, aby wygenerować odpowiedni arkusz stylów.
Chcę, żeby zmienił się arkusz stylów zgodnie z tą zmienną!
To wygląda jak:
[if {var} eq 2 ]
background-position : 150px 8px;
[else]
background-position : 4px 8px;
Czy można to zrobić? Jak Ty to robisz?
css
stylesheet
conditional-statements
Haim Evgi
źródło
źródło
Odpowiedzi:
Nie w tradycyjnym sensie, ale możesz użyć do tego klas, jeśli masz dostęp do HTML. Rozważ to:
aw pliku CSS:
To jest sposób CSS, aby to zrobić.
Są też preprocesory CSS, takie jak Sass . Możesz tam użyć warunków warunkowych , które wyglądałyby tak:
Wadą jest to, że jesteś zobowiązany do wstępnego przetwarzania swoich arkuszy stylów i że warunek jest oceniany w czasie kompilacji, a nie w czasie wykonywania.
Nowszą cechą właściwego CSS są właściwości niestandardowe (inaczej zmienne CSS). Są one oceniane w czasie wykonywania (w obsługujących je przeglądarkach).
Dzięki nim możesz zrobić coś wzdłuż linii:
Na koniec możesz wstępnie przetworzyć swój arkusz stylów za pomocą ulubionego języka po stronie serwera. Jeśli używasz PHP, podaj
style.css.php
plik, który wygląda mniej więcej tak:W takim przypadku będziesz miał jednak wpływ na wydajność, ponieważ buforowanie takiego arkusza stylów będzie trudne.
źródło
Poniżej znajduje się moja stara odpowiedź, która jest nadal aktualna, ale dziś mam bardziej uparte podejście:
Jednym z powodów, dla których CSS jest tak bardzo do bani, jest to, że nie ma on składni warunkowej. CSS jest sam w sobie całkowicie bezużyteczny w nowoczesnym stosie internetowym. Użyj SASS tylko przez chwilę, a będziesz wiedział, dlaczego to mówię. SASS ma składnię warunkową ... i WIELE innych zalet w porównaniu z prymitywnym CSS.
Stara odpowiedź (nadal ważna):
W ogóle nie da się tego zrobić w CSS!
Masz warunki przeglądarki, takie jak:
Ale nikt nie powstrzymuje Cię przed używaniem Javascript do zmiany DOM lub dynamicznego przypisywania klas lub nawet łączenia stylów w Twoim języku programowania.
Czasami wysyłam klasy css jako ciągi do widoku i powtarzam je w kodzie w ten sposób (php):
źródło
Możesz używać
calc()
w połączeniu z,var()
aby posortować naśladujące warunki:pojęcie
źródło
Możesz utworzyć dwa oddzielne arkusze stylów i dołączyć jeden z nich na podstawie wyniku porównania
W jednym z możesz umieścić
W drugim
Myślę, że jedyne sprawdzenie, jakie możesz wykonać w CSS, to rozpoznawanie przeglądarki:
Warunkowy CSS
źródło
Dziwię się, że nikt nie wspomniał o pseudoklasach CSS, które są również rodzajem warunków w CSS. Dzięki temu możesz zrobić całkiem zaawansowane rzeczy bez ani jednej linii JavaScript.
Niektóre pseudoklasy:
Przykład:
źródło
Ustaw serwer tak, aby parsował pliki css jako PHP, a następnie zdefiniuj zmienną zmienną za pomocą prostej instrukcji PHP.
Oczywiście zakłada się, że używasz PHP ...
źródło
@import url('dynamic.css.php')
.Możesz użyć not zamiast if like
źródło
O ile wiem, w css nie ma if / then / else. Alternatywnie możesz użyć funkcji javascript do zmiany właściwości background-position elementu.
źródło
Jeszcze inną opcją (w zależności od tego, czy chcesz, aby instrukcja była obliczana dynamicznie, czy nie) jest użycie preprocesora C, jak opisano tutaj .
źródło
(Tak, stary wątek. Ale pojawił się w wyszukiwarce Google, więc inni też mogą być zainteresowani)
Wydaje mi się, że logikę if / else można wykonać za pomocą javascript, który z kolei może dynamicznie ładować / usuwać arkusze stylów. Nie testowałem tego w różnych przeglądarkach itp., Ale powinno działać. To pozwoli Ci zacząć:
http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml
źródło
To trochę dodatkowych informacji do powyższej odpowiedzi Boldewyn.
Dodaj trochę kodu PHP, aby wykonać if / else
źródło
Możesz dodać element div kontenera dla całego zakresu warunku.
Dodaj wartość warunku jako klasę do elementu div kontenera. (można to ustawić przez programowanie po stronie serwera - php / asp ...)
Teraz możesz użyć klasy kontenera jako zmiennej globalnej dla wszystkich elementów w div za pomocą zagnieżdżonego selektora, bez dodawania klasy do każdego elementu.
źródło
W tym celu możesz użyć javascript w ten sposób:
źródło
CSS to ładnie zaprojektowany paradygmat, a wiele z jego funkcji jest rzadko używanych.
Jeśli przez warunek i zmienną masz na myśli mechanizm rozprowadzania zmiany jakiejś wartości na cały dokument lub w zakresie jakiegoś elementu, to tak to zrobić:
W ten sposób rozkładasz wpływ zmiennej na style CSS. Jest to podobne do tego, co proponują @amichai i @SeReGa, ale bardziej wszechstronne.
Inną taką sztuczką jest rozprowadzenie identyfikatora jakiejś aktywnej pozycji w całym dokumencie, np. Ponownie podczas podświetlania menu: (używana składnia Freemarker)
Jasne, jest to praktyczne tylko w przypadku ograniczonego zestawu elementów, takich jak kategorie lub stany, a nie nieograniczonych zestawów, takich jak towary ze sklepu internetowego, w przeciwnym razie wygenerowany CSS byłby zbyt duży. Jest to jednak szczególnie wygodne przy generowaniu statycznych dokumentów offline.
Jeszcze jedna sztuczka umożliwiająca wykonanie „warunków” za pomocą CSS w połączeniu z platformą generującą to:
źródło
Jeśli jesteś otwarty na używanie jquery, możesz ustawić instrukcje warunkowe za pomocą javascript w html:
Spowoduje to zmianę koloru tekstu
.class
na zielony, jeśli wartość zmiennej jest większa niż0
.źródło
po prostu zrób to w html za pomocą operatora trójargumentowego, a nie if else
class = "{{warunek? 'klasa1': 'klasa2'}}"
lub
[ngClass] = "stan? 'klasa1': 'klasa2'"
źródło
Możesz użyć php, jeśli napiszesz css w tagu
źródło