我想使用width: calc(100% -100px);
完美地完成我所需要的工作,唯一的问题是它的兼容性。目前它只适用于最新的浏览器,而不适用于Safari。
我可以使用jQuery做出替代方案吗?即。获取对象的100%宽度-100px然后动态设置结果为CSS宽度(因此它会响应)
答案 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手机以下)。