2012-04-30 12 views
31

Ho jquery accorion id #accordion e parte del contenuto all'interno del nome della classe di intestazione .simpleColor. Ora voglio dare un margine calcolato a .simpleColor. In pseudo ... sembra qualcosa di simile,È possibile fare matematica all'interno dei CSS?

.simpleClass { 
    margin-left: ((#accordion.width/2) - (.simpleColor.width/2)); 
} 

Sono aperto a utilizzare qualsiasi altra tecnologia come JavaScript per raggiungere questo obiettivo, se è possibile.

+1

Che assomiglia si desidera centrare qualcosa in senso orizzontale. Hai provato 'margin: 0 auto;'? – Ryan

+5

Hai sentito parlare di [calc()] (http://www.w3.org/TR/css3-values/#calc0) – Musa

+0

No mai ... sembra utile – doNotCheckMyBlog

risposta

64

C'è una funzione chiamata CSS calc che sta cominciando a ottenere abbastanza un buon supporto. La sintassi funziona come segue:

width: calc(50% - 100px); 

(Si noti che gli spazi attorno agli operatori è significativo)

Questo permette vero supporto computazionale dinamica in CSS. Con un preprocessore, è possibile combinare solo lunghezze statiche con lunghezze statiche e lunghezze relative con quelle relative.

Calc è supportato da Chrome 19, Firefox 4 e IE9. La funzione non è abbastanza ampiamente supportata da usarla ampiamente, ma non sarà troppo lontana nel futuro ed è qualcosa da ricordare e da guardare avanti.

+0

Funziona perfettamente su Chrome, Firefox e IE come hai detto su Win7 e 8. Grazie! Avere imbottiture e un div al 100% di larghezza è stato un tale dolore e usare javascript per qualcosa di così semplice sembrava uno spreco. Questo è molto meglio! –

+3

Si potrebbe anche esaminare anche ['dimensionamento della casella: border-box;'] (http://www.paulirish.com/2012/box-sizing-border-box-ftw/). Questo rende il padding sottrarre dalla larghezza invece di aggiungerlo, e ha un supporto migliore di calc, torna a IE8 e ha un [polyfill disponibile per IE6/7] (https://github.com/Schepp/box-izingize- polyfill) se è necessario il supporto. IE8 ha ancora una quota di mercato considerevole, quindi consiglio di utilizzare il "dimensionamento della scatola" per le tue esigenze. – TimE

+0

Hai fatto il segno di spunta :) grazie –

3
jQuery('.simpleClass').css('margin-left', (jQuery('#accordian').width()/2) - (jQuery('.simpleColor').width()/2) + 'px'); 

dovrebbe fare quello che si vuole. Ma devi fare qualcosa di simile in javascript, non puoi farlo in puro CSS a meno che le larghezze per #accordian e .simpleColor siano conosciute in anticipo (e quindi calcolate in anticipo).

8

Non è possibile eseguire operazioni matematiche all'interno del CSS in modo nativo. È possibile utilizzare JavaScript per modificare le proprietà CSS al caricamento della pagina, ma questo è un problema e deve essere eseguito ogni volta che la pagina viene caricata rendendo la pagina più lenta.

È necessario utilizzare un preprocessore CSS come LESS, Stylus o SASS.

Il vantaggio di utilizzare una di queste lingue è che è possibile generare fogli di stile CSS effettivi. Ottieni anche benefici come funzioni, mixin, variabili e altro.

+1

Spot on, ho ottenuto ciò di cui avevo bisogno ma vorrei accettare la risposta di Michael come ha sottolineato prima :) grazie btw – doNotCheckMyBlog

1

Credo che il CSS debba essere una definizione di stile pura. Non mi piace mescolare alcuni calcoli con quello. Farei che nel mio javascript

var accWidth=parseInt($("#accordion").css("width").replace("px","")); 
var simpWidth=parseInt($(".simpleColor").css("width").replace("px","")); 
var marginLeft=((accWidth/2)-(simpWidth/2));  
$(".simpleClass").css("margin-left",marginLeft); 

campione Lavorare http://jsfiddle.net/mzTRw/19/

+1

invece di parseInt ($ ("# fisarmonica"). css ("width"). replace ("px", "")) puoi semplicemente usare $ ("# accordion"). width() per ottenere il valore intero. –

1

Vedere questo esempio .. Ha usato molta matematica in css.

http://codepen.io/schoenwaldnils/pen/DLiyr

+0

Nota che [risposte solo per collegamento] (http://meta.stackoverflow.com/tags/link-only-answers/info) sono scoraggiate, quindi le risposte dovrebbero essere il punto finale di una ricerca di una soluzione (rispetto a un'altra sosta di riferimento, che tende a diventare obsoleta nel tempo). Si prega di considerare l'aggiunta di una sinossi autonoma qui, mantenendo il collegamento come riferimento. – kleopatra

+0

Ehi! Quello è SCSS! non CSS. Il compilatore calcolerà l'accoppiamento –

Problemi correlati