Eu estou tentando usar variáveis CSS na consulta de mídia e ele não funciona.
:root {
--mobile-breakpoint: 642px;
}
@media (max-width: var(--mobile-breakpoint)) {
}
Eu estou tentando usar variáveis CSS na consulta de mídia e ele não funciona.
:root {
--mobile-breakpoint: 642px;
}
@media (max-width: var(--mobile-breakpoint)) {
}
Respostas:
Das especificações ,
Portanto, não, você não pode usá-lo em uma consulta de mídia.
E isso faz sentido. Porque você pode definir,
--mobile-breakpoint
por exemplo:root
, para , ou seja, o<html>
elemento e, a partir daí, ser herdado para outros elementos. Mas uma consulta de mídia não é um elemento, ela não herda de<html>
, portanto, não pode funcionar.Não é isso que as variáveis CSS estão tentando realizar. Você pode usar um pré-processador CSS.
fonte
Como a Oriol respondeu , atualmente, o nível 1 das variáveis CSS
var()
não pode ser usado em consultas de mídia . No entanto, houve desenvolvimentos recentes que abordarão esse problema. Dentro de alguns anos, quando o Módulo 1 de variáveis de ambiente CSS for padronizado e implementado, poderemos usarenv()
variáveis em consultas de mídia em todos os navegadores modernos.Se você ler a especificação e tiver alguma preocupação, ou se desejar expressar seu suporte ao caso de uso de consulta de mídia, ainda poderá fazê-lo no GitHub w3c / csswg-draft # 1693 ou em qualquer problema de CSS GitHub prefixado com "[ css-env-1] " .
Resposta original 09/11/2017 : Recentemente, o Grupo de Trabalho CSS decidiu que o nível de variáveis 2 do CSS oferecerá suporte ao uso de variáveis de ambiente definidas pelo usuário
env()
e tentará torná-las válidas em consultas de mídia . O Grupo resolveu isso depois que a Apple propôs propriedades padrão de agente de usuário pela primeira vez , pouco antes do anúncio oficial do iPhone X em setembro de 2017 (consulte também o WebKit: “Criando sites para o iPhone X” de Timothy Horton ). Outros representantes do navegador concordaram que seriam geralmente úteis em muitos dispositivos, como telas de televisão e impressão a tinta com bordas de sangria. (env()
costumava ser chamadoconstant()
, mas que agora foi descontinuado. Você ainda pode ver artigos que se referem ao nome antigo, como este artigo de Peter-Paul Koch .) Depois de algumas semanas, Cameron McCormack, da Mozilla, percebeu que essas variáveis de ambiente seriam utilizáveis em consultas de mídia e Tab Atkins, Jr. o Google então percebeu que variáveis de ambiente definidas pelo usuário seriam especialmente úteis como variáveis raiz globais e não substituíveis, utilizáveis em consultas de mídia. Agora, Dean "Dino" Jackson, da Apple, se juntará a Atkins na edição do Nível 2.Você pode se inscrever para receber atualizações sobre esse assunto na
w3c/csswg-drafts
edição 1693 do GitHub . (Para detalhes históricos especialmente relevantes, expanda os logs de reunião incorporados nas resoluções do CSSWG Meeting Bot e procure por "MQ", que significa "consultas de mídia".)Pretendo atualizar esta questão no futuro, quando ocorrerem mais desenvolvimentos. O futuro é emocionante.
Atualização 2018-02-08 : O Safari Technology Preview 49 adicionou suporte para análise
calc()
em consultas de mídia, o que pode ser um prelúdio para o suporte aenv()
elas também.Atualização 2018-04-27 : a equipe do Chromium no Google decidiu começar a trabalhar
env()
. Em resposta, a Atkins começou a especificarenv()
em um rascunho padrão não oficial: o Módulo de Variáveis de Ambiente CSS Nível 1 . (Veja seu comentário no GitHub em w3c / csswg-drafts # 1693 e seu comentário em w3c / csswg-drafts # 1817. ) O rascunho chama variáveis nas consultas de mídia como um caso de uso explícito:Se você ler a especificação e tiver alguma preocupação, ou se desejar expressar seu suporte ao caso de uso de consulta de mídia, ainda poderá fazê-lo no GitHub w3c / csswg-draft # 1693 ou em qualquer problema de CSS GitHub prefixado com "[ css-env-1] " .
Atualização 2019-07-06 : O trabalho continua com as especificações. O problema do GitHub nº 2627 e o do GitHub nº 3578 são dedicados a variáveis ambientais personalizadas em consultas de mídia.
fonte
No entanto, o que você PODE fazer é @media consultar sua instrução: root!
Funciona totalmente no Chrome, Firefox e Edge pelo menos nas versões de produção mais recentes a partir desta publicação.
fonte
var
, também pode ser usado em cálculos em outros locaiscss
, isso ainda exige colocar o "valor mágico" (aqui, 479px) em dois lugares: a consulta de mídia e uma declaração var.Aparentemente, não é possível usar variáveis CSS nativas como essa. É uma das limitações .
Uma maneira inteligente de usá-lo é alterar suas variáveis na consulta de mídia, impactando todo o seu estilo. Eu recomendo este artigo .
fonte
Uma maneira de conseguir o que você deseja é usar o pacote npm
postcss-media-variables
.Se você está bem com o uso de pacotes npm, pode dar uma olhada no documentatoin para o mesmo aqui
Exemplo
fonte
Como você pode ler outras respostas, ainda não é possível fazer isso.
Alguém mencionou variáveis de ambiente personalizadas (semelhantes às variáveis de CSS personalizadas em
env()
vez devar()
), e o princípio é sólido, embora ainda existam 2 problemas principais:fonte
Resposta curta
Você pode usar o JavaScript para alterar o valor das consultas de mídia e configurá-lo para o valor de uma variável css.
Resposta longa
Escrevi um pequeno script que você pode incluir em sua página. Ele substitui todas as regras de mídia por um valor de
1px
com o valor da variável css--replace-media-1px
, regras por valor2px
com--replace-media-2px
e assim por diante. Isso funciona para as consultas de mídiawith
,min-width
,max-width
,height
,min-height
emax-height
mesmo quando eles estão conectados usandoand
.JavaScript:
CSS:
fonte