2013-07-02 6 views
21

Mit LESS, wie kann ich Werte mit "px" am Ende der Variablen subtrahieren. Ich habe die folgende Variable:WENIGER: Von Variable abziehen

@bpMobile: 600px 

Was ich tun möchte, ist dies subtrahieren von 1px

@media only screen and (max-width: @bpMobile - 1px) { 
} 

Wie kann ich das erreichen mit weniger?

+1

versuchte nur, dass offenbar nicht arbeiten. – cusejuice

Antwort

10

Sie können dafür immer die calc function verwenden.

Syntax: calc(expression)

ZB:

abc { 
    width:calc(100%-20px) 
} 

Here sind die Liste von Browser, der diese Funktion

EDIT 1 unterstützt:

Sie können es in der Verwendung folgende zwei Möglichkeiten:

WENIGER Eingang:

@bpMobile: 600px; 
max-width: calc(~'@{bpMobile} - 1px'); 

CSS Output:

max-width: calc(600px - 1px); 

2. Weg: Weniger Input:

@bpMobile: 600px; 
max-width: calc(@bpMobile - 1px); 

CSS Output:

max-width: calc(599px); 

Mit der ersten Option werden die calc-Argumente maskiert, um zu verhindern, dass sie bei der Kompilierung ausgewertet werden. Die Werte bleiben vollständig statisch, bis sie vom Client ausgewertet werden.

Mit der zweiten Option wird der berechnete Wert beim Kompilieren ausgewertet. Und es wäre die gleich wie

max-width: @bpMobile - 1px; 

was zur Folge haben wird in

max-width: 599px; 
+0

Kann ich das mit Variablen verwenden? Wie calc (@ bpMobile - 1px)? – cusejuice

+0

calc wird nicht mit Medienabfragen unterstützt –

+0

Die erste Lösung wäre schrecklich, auch wenn es funktioniert: Immerhin sind beide Werte (@bpMobile und 1px) bei weniger-compileTime bekannt, also sollte der 2. Weg es sein! - Immerhin gut, dass Sie das "richtige Entkommen" für Szenarios zeigen, wo dies nicht möglich ist, zB 'height: 100vh - @ someHeightInPx', wobei eine Laufzeit' calc() '(= lesbar in der css) ist die einzige Option ... –

3

Das Problem ist nicht die mathematische Funktion ist, dann ist es, dass Sie versuchen, es Abfrage in einem Medium zu verwenden. The docs sagen, dass Sie die gesamte Abfrage eine Variable zu machen brauchen:

@bpMobile: 600px; 
@bpMobile1: @bpMobile - 1px; 

@singleQuery: ~"only screen and (max-width: @{bpMobile1})"; 

@media @singleQuery { 
} 
+0

Ich denke, dass die URL nun zu http://lesscss.org/features/#features-overview-feature-operations geändert wurde – Nick

3

Das Update von freejosh für mich auf lesscss 1.7.0 funktioniert nicht.

Was funktioniert der Trick einfach geklam- mert in einer Medien-Abfrage um jede Variable oder Berechnung ist das Hinzufügen:

@media only screen and (max-width: (@bpMobile - 1px)) { ... } 

oder

@other: @bpMobile - 1px; 
@media only screen and (max-width: (@other)) { ... } 
+0

Die Lösung von unten funktioniert für mich. Der Schlüssel besteht darin, alles genau wie in der Abbildung dargestellt zu platzieren und Klammern um die Variable in der Medienabfrage hinzuzufügen. Ich verwende LESS 2.3 – AgnosticDev

23

Sorry für die Beantwortung dieses spät, aber ich hatte genau dieses Problem und es scheint WENIGER ist wählerisch über den Abstand. Sie benötigen auch () um Ihre Berechnung.

arbeitet Dies wird nicht:

@media screen and (max-width: (@widthSmall-2)) { } 

Dies wird jedoch (den Raum zwischen den Variablen und der Ziffer bemerken):

@media screen and (max-width: (@widthSmall - 2)) { } 
+1

Nun, natürlich ist Less wählerisch bei Leerzeichen, da '-' Teil eines Bezeichners in CSS sein kann. Z.B. Wir erwarten nicht, dass "max-width" die Breite von "max" subtrahiert. Wie bei Parens für '@ media' Query-Werte - ja, sie sind unabhängig von der Option - strict-math erforderlich. –

Verwandte Themen