Eu gostaria de usar condições no meu CSS.
A ideia é que eu tenho uma variável que substituo quando o site é executado para gerar a folha de estilo certa.
Eu quero que de acordo com esta variável a folha de estilo mude!
Parece:
[if {var} eq 2 ]
background-position : 150px 8px;
[else]
background-position : 4px 8px;
Isso pode ser feito? Como você faz isso?
css
stylesheet
conditional-statements
Haim Evgi
fonte
fonte
Respostas:
Não no sentido tradicional, mas você pode usar classes para isso, se tiver acesso ao HTML. Considere isto:
e em seu arquivo CSS:
Essa é a maneira CSS de fazer isso.
Depois, há pré-processadores CSS como o Sass . Você pode usar condicionais lá, que seriam assim:
As desvantagens são que você precisa pré-processar suas folhas de estilo e que a condição é avaliada em tempo de compilação, não em tempo de execução.
Um recurso mais recente do CSS adequado são as propriedades personalizadas (também conhecidas como variáveis CSS). Eles são avaliados em tempo de execução (em navegadores que os suportam).
Com eles, você poderia fazer algo ao longo da linha:
Finalmente, você pode pré-processar sua folha de estilo com sua linguagem de servidor favorita. Se estiver usando PHP, forneça um
style.css.php
arquivo parecido com este:Nesse caso, você terá, no entanto, um impacto no desempenho, já que armazenar em cache essa folha de estilo será difícil.
fonte
Abaixo está minha resposta antiga que ainda é válida, mas hoje tenho uma abordagem mais opinativa:
Uma das razões pelas quais o CSS é tão ruim é exatamente que ele não tem sintaxe condicional. CSS é por si só completamente inutilizável na pilha da web moderna. Use o SASS por apenas um tempo e você saberá por que digo isso. O SASS tem sintaxe condicional ... e muitas outras vantagens sobre o CSS primitivo também.
Resposta antiga (ainda válida):
Isso não pode ser feito em CSS em geral!
Você tem as condicionais do navegador como:
Mas ninguém impede você de usar Javascript para alterar o DOM ou atribuir classes dinamicamente ou mesmo concatenar estilos em sua respectiva linguagem de programação.
Às vezes, envio classes css como strings para o modo de exibição e as ecoo no código assim (php):
fonte
Você pode usar
calc()
em combinação comvar()
para simular condicionais:conceito
fonte
Você pode criar duas folhas de estilo separadas e incluir uma delas com base no resultado da comparação
Em um dos você pode colocar
No outro
Acho que a única verificação que você pode realizar no CSS é o reconhecimento do navegador:
CSS condicional
fonte
Estou surpreso que ninguém tenha mencionado as pseudo classes CSS, que também são uma espécie de condicionais em CSS. Você pode fazer algumas coisas bastante avançadas com isso, sem uma única linha de JavaScript.
Algumas pseudo-classes:
Exemplo:
fonte
Configure o servidor para analisar arquivos css como PHP e, em seguida, defina a variável variável com uma instrução PHP simples.
Claro, isso assume que você está usando PHP ...
fonte
@import url('dynamic.css.php')
.Você pode usar não em vez de se gostar
fonte
Pelo que eu sei, não há if / then / else no css. Alternativamente, você pode usar a função javascript para alterar a propriedade background-position de um elemento.
fonte
Ainda outra opção (com base em se você deseja que a instrução if seja avaliada dinamicamente ou não) é usar o pré-processador C, conforme descrito aqui .
fonte
(Sim, conversa antiga. Mas apareceu no topo de uma pesquisa do Google para que outras pessoas também possam se interessar)
Acho que a lógica if / else poderia ser feita com javascript, que por sua vez pode carregar / descarregar folhas de estilo dinamicamente. Não testei isso em navegadores, etc., mas deve funcionar. Isso o ajudará a começar:
http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml
fonte
Esta é uma pequena informação extra para a resposta de Boldewyn acima.
Adicione algum código php para fazer o if / else
fonte
Você pode adicionar contêiner div para todo o seu escopo de condição.
Adicione o valor da condição como uma classe ao div do contêiner. (você pode configurá-lo pela programação do lado do servidor - php / asp ...)
Agora você pode usar a classe do contêiner como uma variável global para todos os elementos no div usando um seletor aninhado, sem adicionar a classe a cada elemento.
fonte
Você pode usar javascript para essa finalidade, desta forma:
fonte
CSS é um paradigma bem projetado e muitos de seus recursos não são muito usados.
Se por condição e variável você entende um mecanismo para distribuir uma mudança de algum valor para todo o documento, ou sob o escopo de algum elemento, então faça o seguinte:
Dessa forma, você distribui o impacto da variável entre os estilos CSS. Isso é semelhante ao que propõem @amichai e @SeReGa, mas mais versátil.
Outro truque é distribuir o ID de algum item ativo por todo o documento, por exemplo, novamente ao destacar um menu: (sintaxe do Freemarker usada)
Claro, isso só é prático com um conjunto limitado de itens, como categorias ou estados, e não conjuntos ilimitados como produtos de e-shop, caso contrário, o CSS gerado seria muito grande. Mas é especialmente conveniente ao gerar documentos offline estáticos.
Mais um truque para fazer "condições" com CSS em combinação com a plataforma de geração é este:
fonte
Se você está aberto para usar jquery, pode definir declarações condicionais usando javascript no HTML:
Isso mudará a cor do texto de
.class
para verde se o valor da variável for maior que0
.fonte
apenas faça isso em html usando o operador ternário, caso contrário
classe = "{{condição? 'classe1': 'classe2'}}"
ou
[ngClass] = "condição? 'classe1': 'classe2'"
fonte
Você pode usar php se escrever css na tag
fonte