2012-06-20 19 views
50

Mi piacerebbe usare width: calc(100% -100px); che fa perfettamente il lavoro per quello che mi serve, l'unico problema è la sua compatibilità. Al momento funziona solo negli ultimi browser e non in Safari.larghezza css: calc (100% -100px); alternative using jquery

Posso fare un'alternativa usando jQuery? vale a dire. ottenere il 100% di larghezza di un oggetto -100px e quindi impostare dinamicamente il risultato come larghezza CSS (quindi sarebbe reattivo)

+1

uso in questo modo con jquery $ ('# dataElement') css ({ 'width': 'calc (100% -100px)'}).; –

risposta

100

Se si dispone di un browser che non supporta l'espressione calc, non è difficile imitare con jQuery:

$('#yourEl').css('width', '100%').css('width', '-=100px'); 

È molto più semplice lasciare che jQuery gestisca il calcolo relativo piuttosto che farlo da solo.

+0

[http://tobiasahlin.com/blog/quick-guide-chaining-in-jquery/](http://tobiasahlin.com/blog/quick-guide-chaining-in-jquery/) – shareef

+13

Funziona quando la finestra è stata ridimensionata? – odiszapc

+9

@odiszapc aggiungi '$ (window) .resize (function() {/ * inserisce qui il codice di calcolo jquery * /});' quindi calcola automaticamente la larghezza durante il ridimensionamento di una finestra. –

16

100% -100px è lo stesso

div.thediv { 
    width: auto; 
    margin-right:100px; 
} 

Con jQuery:

$(window).resize(function(){ 
    $('.thediv').each(function(){ 
    $(this).css('width', $(this).parent().width()-100); 
    }) 
}); 

modo simile è quello di utilizzare jQuery resize plugin

+0

con l'esempio in alto, funzionerebbe se l'elemento fosse 'position: absolute; top: 0; a sinistra: 0; ' – sam

+0

Penso che non sia – odiszapc

+0

@sam: Se questo è il caso, basta aggiungere' a destra: 100px' ... – thirtydot

1

Prova jQuery animate() metodo, es.

$("#divid").animate({'width':perc+'%'}); 
+1

In realtà sto cercando di usare animate con la funzione calc descritta sopra, ma avendo problemi:' $ ('# button-sidebar'). animate ({width: calc (50% + 20px)}, 400); ' – bhoward

+0

Non penso che sia possibile utilizzare jQuery per animare le variabili Calc Css. Puoi animare sia "width", "100%" e "width", "- = 100px" nella stessa azione e farà ciò che vuoi. –

1

Non è così difficile da replicare in javascript :-), anche se funziona solo per la larghezza e l'altezza delle migliori ma è possibile espanderla secondo le vostre aspettative :-)

function calcShim(element,property,expression){ 
    var calculated = 0; 
    var freed_expression = expression.replace(/ /gi,'').replace("(","").replace(")",""); 
    // Remove all the () and spaces 
    // Now find the parts 
    var parts = freed_expression.split(/[\*+-\/]/gi); 

    var units = { 
     'px':function(quantity){ 
      var part = 0; 
      part = parseFloat(quantity,10); 
      return part; 
     }, 
     '%':function(quantity){ 
      var part = 0, 
      parentQuantity = parseFloat(element.parent().css(property)); 
      part = parentQuantity * ((parseFloat(quantity,10))/100); 
      return part; 
     } // you can always add more units here. 
    } 

    for(var i = 0; i < parts.length; i++){ 
     for(var unit in units){ 
      if(parts[i].indexOf(unit) != -1){ 
       // replace the expression by calculated part. 
       expression = expression.replace(parts[i],units[unit](parts[i])); 
       break; 
      } 
     } 
    } 
    // And now compute it. though eval is evil but in some cases its a good friend. 
    // Though i wish there was math. calc 
    element.css(property,eval(expression)); 
} 
+0

Ha bisogno di un esempio di utilizzo. – Nowaker

1

Se vuoi usare calc nel tuo file CSS usa un polyfill come PolyCalc. Dovrebbe essere abbastanza leggero da funzionare sui browser mobili (ad esempio sotto iOS 6 e sotto i telefoni Android 4.4).

16

Penso che questo possa essere un altro modo

var width= $('#elm').width(); 

    $('#element').css({ 'width': 'calc(100% - ' + width+ 'px)' });