2012-02-21 10 views
8

mi piacerebbe (temporaneamente) rimuovere le unità delle mie variabili @baseLineHeight e @baseFontSize, in modo che possa dividerli per ottenere un parente line-height . Questo è quello che ho provato:MENO CSS - Impossibile dividere due unità pixel e restituire un valore unitario-less

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

genera il seguente errore:

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

uscita preferita:

font: 12px/1.5 sans-serif; 

risposta

6

Nel frattempo sembra che ci sia una funzione per quel: http://lesscss.org/functions/#misc-functions-unit

Ecco il codice dal commento, solo per completezza. (grazie a cfx).

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

Questa dovrebbe essere la risposta corretta. Il tuo LESS dovrebbe essere 'font: @ baseFontSize ~"/"unità (@ baseLineHeight/@ baseFontSize) sans-serif;' – cfx

+0

Questa è davvero la risposta corretta. Sono piuttosto sicuro che la mia precedente risposta fosse per una versione precedente di LESS che non implementasse questo metodo. – Vitamin

2

ho perso la parte della documentazione per quanto riguarda la valutazione JavaScript. Questo sembra risolvere il mio problema:

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

Segna come ha risposto se ti dà l'uscita si voleva;) – bzx

+0

@bzx 4 ore per andare prima che io sono in grado di: o – Vitamin

+0

scusa non lo sapevo .. @Vague – bzx

1

Le altre risposte sembrano non funzionare.

In base allo LESS documentation, lo unit() function rimuove o modifica l'unità di una quota. Dal momento che la funzione accetta solo una sola dimensione come parametro (e un parametro opzionale), si può usare il seguente:

unit((@baseLineHeight/@baseFontSize)) 

A causa di strict math, si noterà che la linea sopra può bisogno di essere racchiuso tra parentesi in modo che la matematica sia effettivamente valutata.

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

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

meno al di sopra di uscita volontà, i seguenti risultati desiderati:

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

Bene, poiché di default 'strict-math' è disattivato,' unità (@ baseLineHeight/@ baseFontSize) 'funzionerà per la maggior parte (e per' sm = on' sarà 'unit ((@ baseLineHeight/@ baseFontSize)) '- non c'è bisogno di ripetere' unità' due volte). –

+1

@ seven-phases-max Bene, stavo usando [questo compilatore LESS online] (http://winless.org/online-less-compiler), e mentre 'strict-math' è disattivato di default, sembra che il le parentesi aggiuntive erano richieste semplicemente perché erano riuscite con '~"/"' (che presumo lo indurrà a valutarlo come se la matematica rigorosa fosse attiva per quella linea). Sono andato avanti e ho rimosso la funzione ridondante 'unit()', però. Grazie per l'utile commento. –

+1

Per correggere me stesso, sì: 'unit (@ baseLineHeight/@ baseFontSize)' non funzionerà in 'font' perché questa proprietà è hardcoded per usare sempre' sm: on'. Quindi in realtà l'intera istruzione sarà quindi 'font: @baseFontSize/unit ((@ baseLineHeight/@ baseFontSize)) sans-serif;' con l'impostazione del compilatore 'sm'.(per maggiori dettagli vedi # 1627: anche se personalmente tratterei tali proprietà hardcoded come un difetto del linguaggio, dal momento che non si sa mai quale sia stato codificato e quale non lo sia). –

Problemi correlati