Eu recebo o Invalid property valueerro. Em todos os navegadores, incluindo a versão Canárias do Chrome.
Mike Fielden
Se existe uma função Sass thatd me conseguir o que quero isso é legal, eu estava apenas brincando com calc...
Mike Fielden
Sim :) Como eu disse, eu não me importo como isso é feito, calcfui eu primeiro e não funcionou. Parece que calcnão funciona em nenhum dos meus navegadores, então uma implementação sass seria melhor, eu acho.
Mike Fielden
1
O Sass não pode atuar como um polyfill para calc (). Ele não sabe converter 25% em px para fazer as contas e gerar o CSS. Dependendo de suas necessidades exatas, pode haver uma alternativa, como o uso da família display de mesa, mudando sua caixa-sizing, ou usar margens negativas ( jsfiddle.net/5JZGt )
cimmanon
Respostas:
239
O Sass não pode executar aritmética em valores que não podem ser convertidos de uma unidade para a seguinte. Sass não tem como saber exatamente o quão grande é "100%" em termos de pixels ou qualquer outra unidade. Isso é algo que apenas o navegador sabe.
Se seus valores estão em variáveis, pode ser necessário usar a interpolação para transformá-los em strings (caso contrário, o Sass apenas tenta executar aritmética):
Eu diria que o calc () não funciona na maioria dos navegadores. As plataformas móveis são tão importantes quanto os computadores.
21813 dalgard
3
Não há argumento, mas conte os navegadores! Mais suporte a calc () do que não, e ainda mais o suportará em um futuro próximo!
Chrisgonzalez
5
Eu tive problemas largura usando uma variável dentro das funções do Calc, mas encontrada aqui: stackoverflow.com/questions/13542164/... que eu poderia fazer referência a variável assim: calc(25% - #{$var}).
mlunoe
Para acompanhar a declaração de @ dalgard, em termos de navegadores lançados existentes, o calc não funciona mais do que funciona. Consulte: caniuse.com/#search=calc
imjared
3
Você sempre pode usar uma opção de retorno adicionando width: 22%acima de todos os widths comcalc
Hengjie 3/13
23
Há uma calcfunção no SCSS [tempo de compilação] e CSS [tempo de execução]. Você provavelmente está invocando o primeiro em vez do último.
Por razões óbvias, as unidades de mixagem não funcionam em tempo de compilação, mas em tempo de execução.
Você pode forçar o último usando unquote, uma função SCSS.
Obrigado por postar uma resposta a esta pergunta! As respostas somente de código são desencorajadas no Stack Overflow, porque um despejo de código sem contexto não explica como ou por que a solução funcionará, dificultando o pôster original (ou futuros leitores) entender a lógica por trás disso. Edite sua pergunta e inclua uma explicação do seu código para que outras pessoas possam se beneficiar da sua resposta. Obrigado!
Maximillian Laumeister
Isso me salvou. width: unquote ("calc (100% - # {$ leftnav-width})");
Http
5
Se você souber a largura do contêiner, poderá fazer o seguinte:
Desculpe por reviver o thread antigo - o alongamento da bússola com um pseudo-seletor: after pode atender ao seu objetivo - por exemplo. se você deseja que uma div preencha a largura da esquerda para (50% + 10px) da tela, você pode usar (na sintaxe recuada do SASS):
.example
background: red
+stretch(0, -10px, 0, 0)
&:after
+stretch(0, 0, 0, 50%)
content: ' '
background: blue
O elemento: after preenche 50% à direita do .example (deixando 50% disponível para a largura do .example) e, em seguida, o .example é estendido para essa largura mais 10px.
Invalid property value
erro. Em todos os navegadores, incluindo a versão Canárias do Chrome.calc
...calc
fui eu primeiro e não funcionou. Parece quecalc
não funciona em nenhum dos meus navegadores, então uma implementação sass seria melhor, eu acho.Respostas:
O Sass não pode executar aritmética em valores que não podem ser convertidos de uma unidade para a seguinte. Sass não tem como saber exatamente o quão grande é "100%" em termos de pixels ou qualquer outra unidade. Isso é algo que apenas o navegador sabe.
Você precisa usar em seu
calc()
lugar. Verifique a compatibilidade do navegador em Posso usar ...Se seus valores estão em variáveis, pode ser necessário usar a interpolação para transformá-los em strings (caso contrário, o Sass apenas tenta executar aritmética):
fonte
calc(25% - #{$var})
.width: 22%
acima de todos oswidth
s comcalc
Há uma
calc
função no SCSS [tempo de compilação] e CSS [tempo de execução]. Você provavelmente está invocando o primeiro em vez do último.Por razões óbvias, as unidades de mixagem não funcionam em tempo de compilação, mas em tempo de execução.
Você pode forçar o último usando
unquote
, uma função SCSS.fonte
fonte
Se você souber a largura do contêiner, poderá fazer o seguinte:
Estou ciente de que, em muitos casos, o #container pode ter uma largura relativa. Então isso não funcionaria.
fonte
Desculpe por reviver o thread antigo - o alongamento da bússola com um pseudo-seletor: after pode atender ao seu objetivo - por exemplo. se você deseja que uma div preencha a largura da esquerda para (50% + 10px) da tela, você pode usar (na sintaxe recuada do SASS):
O elemento: after preenche 50% à direita do .example (deixando 50% disponível para a largura do .example) e, em seguida, o .example é estendido para essa largura mais 10px.
fonte
Basta adicionar o valor percentual em uma variável e usar
#{$variable}
por exemplofonte