css width:calc(100%-100px);使用jquery的替代方案

时间:2012-06-20 10:06:23

标签: jquery css

我想使用width: calc(100% -100px);完美地完成我所需要的工作,唯一的问题是它的兼容性。目前它只适用于最新的浏览器,而不适用于Safari。

我可以使用jQuery做出替代方案吗?即。获取对象的100%宽度-100px然后动态设置结果为CSS宽度(因此它会响应)

6 个答案:

答案 0 :(得分:107)

如果您的浏览器不支持calc表达式,那么使用jQuery模仿并不难:

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

让jQuery处理相对计算要比自己动手更容易。

答案 1 :(得分:18)

我认为这可能是另一种方式

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

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

答案 2 :(得分:17)

100%-100px是相同的

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

使用jQuery:

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

类似的方法是使用jQuery resize plugin

答案 3 :(得分:1)

尝试使用jQuery animate()方法,例如

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

答案 4 :(得分:1)

它在javascript中不难复制:-),虽然它只适用于宽度和高度最好,但你可以根据你的期望扩展它:-)

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));
}

答案 5 :(得分:1)

如果要在CSS文件中使用calc,请使用像PolyCalc这样的polyfill。应该足够轻便,可以在移动浏览器上运行(例如iOS 6以下和Android 4.4手机以下)。