Calcolo della larghezza da percentuale a pixel, quindi meno per pixel in MENO CSS


100

Calcolerò la larghezza in alcuni elementi dalla percentuale al pixel, quindi meno -10px usando LESS e calc () . È possibile?

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

Uso CSS3 calc()quindi non funziona:calc(100% - 10px)

Esempio: se 100% = 500 px allora larghezza = 490 px (500-10);

Ho fatto una demo per il test: http://jsfiddle.net/4DujZ/55/

quindi il padding dirà: 5 (10px / 2) tutto il tempo durante il ridimensionamento.

Posso farlo in MENO ? So come fare in jQuery e CSS semplici come il riempimento del margine o altro ... ma cercherò di farlo funzionale in MENO concalc()


1
Come regola generale, non definire lo stile dei selettori che non hanno semantica , come divo span.
Pavlo

1
Ecco un mixin cross browser che ho scritto per l'utilizzo di calc su qualsiasi proprietà CSS: stackoverflow.com/a/24790931/916734
Patrick Berkeley

Risposte:


246

È possibile eseguire l'escape degli calcargomenti per evitare che vengano valutati durante la compilazione.

Usando il tuo esempio, dovresti semplicemente racchiudere gli argomenti, in questo modo:

calc(~'100% - 10px')

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


Trovo che lo uso in uno dei tre modi seguenti:

Evasione di base

Tutto all'interno degli calcargomenti è definito come una stringa ed è totalmente statico fino a quando non viene valutato dal client:

MENO input

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

Output CSS

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

Interpolazione di variabili

Puoi inserire una variabile LESS nella stringa:

MENO input

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

Output CSS

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

Combinazione di valori di escape e compilati

Potresti voler sfuggire a un valore percentuale, ma vai avanti e valuta qualcosa sulla compilazione:

MENO input

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

Output CSS

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

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


2
Sei forte, amico! Grazie per questi esempi e spiegazioni. Sai come potrei dividere una larghezza sconosciuta di un contenitore (chiamiamolo div.categories) in 4 parti uguali, usando LESS?
Shawn Spencer

5
@ ShawnSpencer: Tra le righe, c'è molta oscurità. Puoi creare un JSFiddle che illustri ciò che stai cercando di risolvere? Posso provare a indovinare il caso d'uso, ma sono inibito dal non conoscere tutti i dettagli, e sono sicuro che sai come va - le tue peggiori inibizioni tendono a farti sentire fuori di testa alla fine.
natchiketa

2
Non sono propenso a rassegnarmi alla maturità. Dato che sto cercando una soluzione CSS semplice e poiché sono stato in grado di far funzionare le cose, usando una delle risposte, per ora sono a posto. Grazie per esserti offerto di guardare un esempio di JSFiddle. Molto apprezzato.
Shawn Spencer


-3

Oppure puoi usare l'attributo margin in questo modo:

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

3
OP vuole che la larghezza 10px sia inferiore al 100%. Il tuo CSS non lo fa. Lo renderà più largo del 100%.
Andrew Barber,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.