javascript - box-sizing x IE7, the last battle -
i've been searching through web solution can viabilize box-sizing in ie7 (i know, year 2014, project (therefore clients) still demand this). need box-sizing because entire project responsive.
i found boxsizing.htc , works pretty in case. but, unfortunately, not case. because i'm using angularjs , have div 3 columns (children divs float left) inside , can click on button change number of columns. when happens boxsizing.htc process calculations again making width , height smaller each time change number of columns.
so, thought, angularjs can solve this. found pretty interesting link
i adapt code this:
myapp.directive('resizable', function($window){ return { restrict: 'a', link: function(scope, element){ scope.initializewindowsize = function(){ var win = angular.element($window); scope.windowheight = win.innerheight(); scope.windowwidth = win.innerwidth(); scope.sideheight = scope.windowheight - 80; /* ie 7 */ var workarea = angular.element('.workarea'); var workwidthpadding = parseint(workarea.css('paddingleft')) + parseint(workarea.css('paddingright')) + parseint(workarea.css('borderrightwidth')) + parseint(workarea.css('borderleftwidth')); var workheightpadding = parseint(workarea.css('paddingtop')) + parseint(workarea.css('paddingbottom')) + parseint(workarea.css('bordertopwidth')) + parseint(workarea.css('borderbottomwidth')); scope.workwidth = scope.windowwidth - 228 - 210 - workwidthpadding; scope.workheight = scope.sideheight - 60 - 25 - 2 - workheightpadding; console.log('height', scope.workheight); }; scope.initializewindowsize(); angular.element($window).bind('resize',function(){ scope.initializewindowsize(); scope.$apply(); }); } } });
but code don't solve of problems, when can relate div's width or height window width or height not cases.
finally, decide, let's make jquery plugin. came this:
$.fn.boxsizing = function(){ // if(navigator.appversion.indexof("msie 7.") != -1){ var thiswidth = this.width(), thisheight = this.height(), thisborderleft = parseint(this.css('borderleftwidth')), thisbordertop = parseint(this.css('bordertopwidth')), thisborderright = parseint(this.css('borderrightwidth')), thisborderbottom = parseint(this.css('borderbottomwidth')), thispaddingleft = parseint(this.css('paddingleft')), thispaddingtop = parseint(this.css('paddingtop')), thispaddingright = parseint(this.css('paddingright')), thispaddingbottom = parseint(this.css('paddingbottom')), newwidth = thiswidth - thisborderleft - thisborderright - thispaddingleft - thispaddingright, newheight = thisheight - thisbordertop - thisborderbottom - thispaddingtop - thispaddingbottom; console.log(newwidth, newheight); this.css({'width':newwidth, 'height':newheight}); // } }
this worked. can't figured how apply code in window resize.
$(window).resize(function(){ $('div.foo').boxresizing(); });
can help? don't know if angularjs can handle alone kind of stuff or, if need plugin and, how can make things work in window resize.
thank , sorry poor english.
Comments
Post a Comment