Jquery Resize Li Based On A String Size
Solution 1:
I can see what you are trying to do, but there are ways far easier to do what you need, without even the need for javascript/jquery.
Consider this:
- removed inline width styling.
- changed position:relative and top:3 to line-height
- changed li's padding for "unbunching"
If you need to make them more apart, change the padding on the li's.
If you need to change the button's height, don't forget to change the a's line-height too.
EDIT:
http://jsfiddle.net/zwqYf/5/ - updated, removed some redundant css, made padding between li's larger.
Solution 2:
See http://jsfiddle.net/zwqYf/10/:
We get li
elements.
var els=$('div#new-menu-lower ul li');
We store each li
's width (including borders, paddings and margins).
elsWidth=newArray();
for(var i=0;i<els.length;i++){
elsWidth[i]=$(els[i]).outerWidth(true);
}
We sum them into total
var total=0;
for(var i=0;i<elsWidth.length;i++){
total+=elsWidth[i];
}
Then we have an ul
of 960px
which must contain at least total
px.
Then, the available space is $('div#new-menu-lower ul').width()-total
.
So each li
can have an extra width of ($('div#new-menu-lower ul').width()-total)/(els.length)
.
var availWidthForEl=($('div#new-menu-lower ul').width()-total)/(els.length);
We round it to 2 decimals
availWidthForEl=Math.floor(availWidthForEl*100)/100;
Finally we assign to each li
its current with (without borders, paddings and margins) plus its extra width:
for(var i=0;i<els.length;i++){
$(els[i]).css('width', $(els[i]).width()+availWidthForEl);
}
Post a Comment for "Jquery Resize Li Based On A String Size"