Calculando a largura de porcentagem a pixel, depois menos por pixel em MENOS CSS


100

Vou calcular a largura em algum elemento de porcentagem a pixel, então irei menos -10px usando LESS e calc () . É possível?

div {
    span {
        width:calc(100% - 10px);
    }
}

Estou usando CSS3 calc()por isso não funciona:calc(100% - 10px)

Exemplo: se 100% = 500px, então largura = 490px (500-10);

Fiz uma demonstração para teste: http://jsfiddle.net/4DujZ/55/

então o preenchimento dirá: 5 (10px / 2) o tempo todo quando eu redimensionar.

Posso fazer em menos ? Eu sei como fazer em jQuery e CSS simples como preenchimento de margem ou então ... mas vou tentar fazer funcional em menos comcalc()


1
Como regra geral, não estilize seletores que não tenham semântica , como divou span.
Pavlo

1
Aqui está um cross-browser mixin que escrevi para usar calc em qualquer propriedade css: stackoverflow.com/a/24790931/916734
Patrick Berkeley

Respostas:


246

Você pode escapar dos calcargumentos para evitar que sejam avaliados na compilação.

Usando seu exemplo, você simplesmente envolveria os argumentos, como este:

calc(~'100% - 10px')

Demo: http://jsfiddle.net/c5aq20b6/


Acho que uso isso de uma das três maneiras a seguir:

Escape Básico

Tudo dentro dos calcargumentos é definido como uma string e é totalmente estático até que seja avaliado pelo cliente:

MENOS entrada

div {
    > span {
        width: calc(~'100% - 10px');
    }
}

Saída CSS

div > span {
  width: calc(100% - 10px);
}

Interpolação de Variáveis

Você pode inserir uma variável LESS na string:

MENOS entrada

div {
    > span {
        @pad: 10px;
        width: calc(~'100% - @{pad}');
    }
}

Saída CSS

div > span {
  width: calc(100% - 10px);
}

Combinação de valores escapados e compilados

Você pode querer escapar de um valor percentual, mas vá em frente e avalie algo na compilação:

MENOS entrada

@btnWidth: 40px;
div {
    > span {
        @pad: 10px;
        width: calc(~'(100% - @{pad})' - (@btnWidth * 2));
    }
}

Saída CSS

div > span {
  width: calc((100% - 10px) - 80px);
}

Fonte: http://lesscss.org/functions/#string-functions-escape .


2
Você é demais, cara! Obrigado por esses exemplos e explicações. Você sabe como eu poderia dividir uma largura desconhecida de um contêiner (vamos chamá-lo de div.categories) em 4 partes iguais, usando MENOS?
Shawn Spencer

5
@ShawnSpencer: Nas entrelinhas, há muita obscuridade. Você pode criar um JSFiddle ilustrando o que você está tentando resolver? Posso tentar adivinhar o caso de uso, mas estou inibido por não saber todos os detalhes, e tenho certeza de que você sabe como é - suas piores inibições tendem a deixá-lo maluco no final.
natchiketa

2
Não estou inclinado a renunciar à maturidade. Como estou buscando uma solução CSS direta e como fui capaz de fazer as coisas funcionarem usando uma das respostas, estou pronto por enquanto. Obrigado por se oferecer para olhar um exemplo do JSFiddle. Muito apreciado.
Shawn Spencer

0

Eu acho width: -moz-calc(25% - 1em);que é o que você está procurando. E você pode querer dar uma olhada neste link para qualquer assistência adicional


-3

Ou você pode usar o atributo de margem assim:

    {
    background:#222;
    width:100%;
    height:100px;
    margin-left: 10px;
    margin-right: 10px;
    display:block;
    }

3
OP quer uma largura de 10px menor que 100% de largura. Seu CSS não faz isso. Isso o tornará mais amplo do que 100%.
Andrew Barber

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.