Je voudrais utiliser des conditions dans mon CSS.
L'idée est que j'ai une variable que je remplace lorsque le site est exécuté pour générer la bonne feuille de style.
Je le veux pour qu'en fonction de cette variable la feuille de style change!
On dirait:
[if {var} eq 2 ]
background-position : 150px 8px;
[else]
background-position : 4px 8px;
Cela peut-il être fait? Comment est-ce que tu fais ça?
css
stylesheet
conditional-statements
Haim Evgi
la source
la source
Réponses:
Pas dans le sens traditionnel, mais vous pouvez utiliser des classes pour cela, si vous avez accès au HTML. Considère ceci:
et dans votre fichier CSS:
C'est la manière CSS de le faire.
Ensuite, il y a les préprocesseurs CSS comme Sass . Vous pouvez utiliser des conditions là-bas, qui ressemblent à ceci:
Les inconvénients sont que vous êtes obligé de prétraiter vos feuilles de style et que la condition est évaluée au moment de la compilation, pas au moment de l'exécution.
Une nouvelle fonctionnalité de CSS proprement dite est les propriétés personnalisées (alias les variables CSS). Ils sont évalués au moment de l'exécution (dans les navigateurs les prenant en charge).
Avec eux, vous pouvez faire quelque chose dans le sens:
Enfin, vous pouvez prétraiter votre feuille de style avec votre langage serveur préféré. Si vous utilisez PHP, diffusez un
style.css.php
fichier qui ressemble à ceci:Dans ce cas, vous aurez cependant un impact sur les performances, car la mise en cache d'une telle feuille de style sera difficile.
la source
Voici mon ancienne réponse qui est toujours valable mais j'ai une approche plus opiniâtre aujourd'hui:
L'une des raisons pour lesquelles le CSS est si nul est précisément qu'il n'a pas de syntaxe conditionnelle. CSS est en soi totalement inutilisable dans la pile Web moderne. Utilisez SASS pendant un petit moment et vous saurez pourquoi je dis cela. SASS a une syntaxe conditionnelle ... et BEAUCOUP d'autres avantages par rapport au CSS primitif.
Ancienne réponse (toujours valide):
Cela ne peut pas être fait en CSS en général!
Vous avez les conditions du navigateur comme:
Mais personne ne vous empêche d'utiliser Javascript pour modifier le DOM ou attribuer des classes dynamiquement ou même concaténer des styles dans votre langage de programmation respectif.
J'envoie parfois des classes css sous forme de chaînes à la vue et les renvoie dans le code comme ça (php):
la source
Vous pouvez utiliser
calc()
en combinaison avecvar()
pour trier des conditionnelles mimiques:concept
la source
Vous pouvez créer deux feuilles de style distinctes et en inclure une en fonction du résultat de la comparaison
Dans l'un des vous pouvez mettre
Dans l'autre
Je pense que le seul contrôle que vous pouvez effectuer en CSS est la reconnaissance du navigateur:
Conditionnel-CSS
la source
Je suis surpris que personne n'ait mentionné les pseudo-classes CSS, qui sont également une sorte de conditionnelles en CSS. Vous pouvez faire des choses assez avancées avec cela, sans une seule ligne de JavaScript.
Quelques pseudo-classes:
Exemple:
la source
Configurez le serveur pour analyser les fichiers css en PHP, puis définissez la variable variable avec une simple instruction PHP.
Bien sûr, cela suppose que vous utilisez PHP ...
la source
@import url('dynamic.css.php')
.Vous pouvez utiliser not au lieu de if like
la source
Autant que je sache, il n'y a pas de if / then / else en css. Vous pouvez également utiliser la fonction javascript pour modifier la propriété background-position d'un élément.
la source
Une autre option (selon que vous voulez que l'instruction if soit évaluée dynamiquement ou non) consiste à utiliser le préprocesseur C, comme décrit ici .
la source
(Oui, ancien fil de discussion. Mais il est apparu en plus d'une recherche Google, donc d'autres pourraient aussi être intéressés)
Je suppose que la logique if / else pourrait être effectuée avec javascript, qui à son tour peut charger / décharger dynamiquement les feuilles de style. Je n'ai pas testé cela sur les navigateurs, etc. mais cela devrait fonctionner. Cela vous permettra de démarrer:
http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml
la source
Ceci est une petite information supplémentaire à la réponse de Boldewyn ci-dessus.
Ajoutez du code php pour faire le if / else
la source
Vous pouvez ajouter un conteneur div pour toute la portée de votre condition.
Ajoutez la valeur de la condition en tant que classe au div de conteneur. (vous pouvez le définir par programmation côté serveur - php / asp ...)
Vous pouvez désormais utiliser la classe conteneur comme variable globale pour tous les éléments du div à l'aide d'un sélecteur imbriqué, sans ajouter la classe à chaque élément.
la source
Vous pouvez utiliser javascript à cette fin, de cette façon:
la source
CSS est un paradigme bien conçu, et nombre de ses fonctionnalités ne sont pas très utilisées.
Si par une condition et une variable vous entendez un mécanisme pour distribuer un changement d'une certaine valeur à l'ensemble du document, ou sous une portée d'un élément, alors voici comment le faire:
De cette façon, vous répartissez l'impact de la variable dans les styles CSS. C'est similaire à ce que proposent @amichai et @SeReGa, mais plus polyvalent.
Une autre astuce consiste à distribuer l'ID d'un élément actif dans tout le document, par exemple lors de la mise en évidence d'un menu: (syntaxe Freemarker utilisée)
Bien sûr, cela n'est pratique qu'avec un ensemble limité d'articles, comme des catégories ou des états, et non des ensembles illimités comme des produits de boutique en ligne, sinon le CSS généré serait trop gros. Mais c'est particulièrement pratique lors de la génération de documents statiques hors ligne.
Une autre astuce pour faire des "conditions" avec CSS en combinaison avec la plate-forme génératrice est la suivante:
la source
Si vous êtes prêt à utiliser jquery, vous pouvez définir des instructions conditionnelles en utilisant javascript dans le html:
Cela changera la couleur du texte de
.class
en vert si la valeur de Variable est supérieure à0
.la source
faites-le simplement en html en utilisant un opérateur ternaire pas sinon
class = "{{condition? 'class1': 'class2'}}"
ou
[ngClass] = "condition? 'classe1': 'classe2'"
la source
Vous pouvez utiliser php si vous écrivez css dans le tag
la source