Disable LESS-Sobrescribir CSS calc () [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Ahora mismo estoy tratando de hacer esto en CSS3 en mi código LESS:

width: calc(100% - 200px);

Sin embargo, cuando LESS compila está produciendo esto:

width: calc(-100%);

¿Hay alguna manera de decirle a LESS que no lo compile de esa manera y que lo genere normalmente?

Author: dippas, 2013-07-28

5 answers

Usando un cadena de escape (también conocido como valor escapado):

width: ~"calc(100% - 200px)";

También, en caso de que necesite mezclar menos matemáticas con cadenas escapadas:

width: calc(~"100% - 15rem +" (10px+5px) ~"+ 2em");

Compila para:

width: calc(100% - 15rem + 15px + 2em);

Esto funciona como Menos concatena valores (las cadenas escapadas y el resultado matemático) con un espacio por defecto.

 735
Author: Fabrício Matté,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-07 01:09:20

Además de usar un valor escapado como se describe en mi otra respuesta, también es posible solucionar este problema activando la configuración Strict Math.

Con matemáticas estrictas activadas, solo se procesarán las matemáticas que estén dentro de paréntesis innecesarios, por lo que su código:

width: calc(100% - 200px);

Funcionaría como se esperaba con la opción matemática estricta habilitada.

Sin embargo , tenga en cuenta que la Matemática Estricta se aplica globalmente, no solo dentro de calc(). Eso significa, si usted tienen:

font-size: 12px + 2px;

La matemática ya no será procesada por Less will producirá font-size: 12px + 2px que es, obviamente, CSS no válido. Tendrías que envolver todas las matemáticas que deberían ser procesadas por Less en paréntesis (previamente innecesarios):

font-size: (12px + 2px);

Strict Math es una buena opción a considerar al iniciar un nuevo proyecto, de lo contrario, posiblemente tendría que reescribir una buena parte del código base. Para los casos de uso más comunes, el enfoque de cadena escapada descrito en la otra respuesta es más adecuado.

 60
Author: Fabrício Matté,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:36

Aquí hay un mixin menos para usar CSS calc con cualquier propiedad:

.calc(@prop; @val) {
  @{prop}: calc(~'@{val}');
  @{prop}: -moz-calc(~'@{val}');
  @{prop}: -webkit-calc(~'@{val}');
  @{prop}: -o-calc(~'@{val}');
}

Ejemplo de uso:

.calc(width; "100% - 200px");

Y el CSS que es la salida:

width: calc(100% - 200px);
width: -moz-calc(100% - 200px);
width: -webkit-calc(100% - 200px);
width: -o-calc(100% - 200px);

Un codepen de este ejemplo: http://codepen.io/patrickberkeley/pen/zobdp

 23
Author: Patrick Berkeley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-30 16:54:59

Ejemplo para cadena de escape con variable:

@some-variable-height: 10px;

...

div {
    height: ~"calc(100vh - "@some-variable-height~")";
}

Compila a

div {
    height: calc(100vh - 10px );
}
 11
Author: Achim Koellner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-12 13:03:59

Las soluciones de Fabricio funcionan bien.

Un caso de uso muy común de calc es agregar 100% de ancho y agregar algún margen alrededor del elemento.

Uno puede hacerlo con:

@someMarginVariable: 15px;

margin: @someMarginVariable;
width: calc(~"100% - "@someMarginVariable*2);
width: -moz-calc(~"100% - "@someMarginVariable*2);
width: -webkit-calc(~"100% - "@someMarginVariable*2);
width: -o-calc(~"100% - "@someMarginVariable*2);

O puede usar un mixin como:

.fullWidthMinusMarginPaddingMixin(@marginSize,@paddingSize) {
  @minusValue: (@marginSize+@paddingSize)*2;
  padding: @paddingSize;
  margin: @marginSize;
  width: calc(~"100% - "@minusValue);
  width: -moz-calc(~"100% - "@minusValue);
  width: -webkit-calc(~"100% - "@minusValue);
  width: -o-calc(~"100% - "@minusValue);
}
 6
Author: Sebastien Lorber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-13 11:30:19