2012-02-21 4 views
8

Chciałbym (tymczasowo) usuwać jednostki moich zmiennych @baseLineHeight i @baseFontSize, tak, że mogę podzielić je, aby uzyskać względną line-height . To co próbowałem:LESS CSS - Nie można podzielić dwie jednostki pixel i zwracają wartość jednostkową mniej

@baseFontSize: 12px; 
@baseLineHeight: 18px; 
font: @baseFontSize~"/"@baseLineHeight/@baseFontSize sans-serif; 

generuje następujący błąd:

Object #<Object> has no method 'toCSS' (Less::ParseError) 

Preferowany wyjściowego:

font: 12px/1.5 sans-serif; 

Odpowiedz

6

Tymczasem wydaje się, że funkcja: http://lesscss.org/functions/#misc-functions-unit

Oto kod z komentarzem, po prostu dla kompletności. (dzięki cfx).

font: @baseFontSize~"/"unit(@baseLineHeight/@baseFontSize) sans-serif; 
+1

To powinna być poprawna odpowiedź. Twój LESS powinien być 'font: @ baseFontSize ~"/"unit (@ baseLineHeight/@ baseFontSize) sans-serif;' – cfx

+0

To jest rzeczywiście poprawna odpowiedź. Jestem prawie pewien, że moja poprzednia odpowiedź dotyczyła starszej wersji LESS, która nie implementowała tej metody. – Vitamin

2

brakowało mi część dokumentacji dotyczącej oceny JavaScript. To wydaje się rozwiązać mój problem:

font: @baseFontSize~"/"`parseInt("@{baseLineHeight}")/parseInt("@{baseFontSize}")` sans-serif; 
+1

oznaczyć jako odpowiedział jeśli to daje wyjście chciałeś;) – bzx

+0

@bzx 4 godzin, zanim jestem w stanie: o – Vitamin

+0

Przepraszam, nie wiedziałem. @Vague – bzx

1

Inne odpowiedzi wydają się nie działać.

Zgodnie z LESS documentation, unit() function usunie lub zmieni jednostkę wymiaru. Ponieważ funkcja przyjmuje tylko jeden wymiar jako parametr (a opcjonalnym parametru), należy użyć następujących:

unit((@baseLineHeight/@baseFontSize)) 

powodu strict math, można zauważyć, że linia powyżej may konieczności być owinięte w nawias, tak aby matematyka była faktycznie oceniana.

@baseFontSize: 12px; 
@baseLineHeight: 18px; 

p { 
    font: @baseFontSize ~"/" unit((@baseLineHeight/@baseFontSize)) sans-serif; 
} 

słabiej powyżej wyjściem będzie następujące, pożądane rezultaty:

p { 
    font: 12px/1.5 sans-serif; 
} 
+0

Ponieważ domyślnie 'strict-matath' jest wyłączony,' unit (@ baseLineHeight/@ baseFontSize) 'zadziała dla większości (a dla' sm = on' będzie to 'unit ((@ baseLineHeight/@ baseFontSize)) '- nie ma potrzeby powtarzania' jednostki' dwa razy). –

+1

@ seven-phase-max No cóż, używałem [tego kompilatora LESS online] (http://winless.org/online-less-compiler), i podczas gdy 'strict-math' jest domyślnie wyłączone, wygląda na to, że dodatkowe nawiasy były wymagane tylko dlatego, że odniosły sukces "~"/"(co, jak przypuszczam, spowoduje, że oceni to tak, jakby ścisła matematyka była włączona dla tej linii). Mimo to usunąłem zbędną funkcję 'unit()'. Dzięki za pomocny komentarz. –

+1

Aby poprawić siebie, tak: 'unit (@ baseLineHeight/@ baseFontSize)' nie będzie działało w 'font', ponieważ ta właściwość jest zakodowana tak, aby zawsze używać' sm: on'. Tak więc cała instrukcja będzie następująca: 'font: @baseFontSize/unit ((@ baseLineHeight/@ baseFontSize)) sans-serif;' z ustawieniem kompilatora 'sm'.(po więcej szczegółów zobacz # 1627: chociaż osobiście traktowałbym takie zakodowane właściwości jako defekt językowy, ponieważ nigdy nie wiadomo, który z nich jest zakodowany, a który nie). –

Powiązane problemy