xendrome Posted March 22, 2014 Share Posted March 22, 2014 So, I am looking for some type of Javascript that I can put into an HTML site, which will zoom/stretch the page to take up the full width of the browser window, without losing the fixed width formatting. Any suggestions? Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/ Share on other sites More sharing options...
0 xendrome Posted March 22, 2014 Author Share Posted March 22, 2014 On 22/03/2014 at 21:36, Seahorsepip said: Yeah IE is a acting like a bad boy again... Fix: css: body { overflow-x: hidden; } additional js file called iefix.js function detectIE() { var ua = window.navigator.userAgent; var msie = ua.indexOf('MSIE '); var trident = ua.indexOf('Trident/'); if (msie > 0) { return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); } if (trident > 0) { var rv = ua.indexOf('rv:'); return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); } } $(document).ready(function(){ if(detectIE()){ fix = $(window).width()/$("body table tbody").width()*75/2; $("body").css("margin-left","-"+fix+"%"); } }); $(window).on('resize', function(){ if(detectIE()){ fix = $(window).width()/$("body table tbody").width()*75/2; $("body").css("margin-left","-"+fix+"%"); } }); Let's see if that works Edit: Changed px to % in code Edit2: added "-"+ Edit3: changed ,, to , just a typo Should work now(just tested). Better in IE, but seems to still cause a bit of an issue when re-sizing the browser window, relative to where the window is located on the screen. Be back in a bit BTW, time to cut the lawn. Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596324949 Share on other sites More sharing options...
0 Seahorsepip Veteran Posted March 22, 2014 Veteran Share Posted March 22, 2014 On 22/03/2014 at 21:44, Brandon Live said: I don't understand what you're trying to do here or why you're applying a crazy hack like that in IE (especially on IE 11!). Clearly you're doing something wrong if you think that is necessary... If it only happens on IE it's clearly a IE fault as far as I can guess and yeah the hack didn't work I just noticed :/ On 22/03/2014 at 21:46, xendrome said: Better in IE, but seems to still cause a bit of an issue when re-sizing the browser window, relative to where the window is located on the screen. Just noticed too yeah. could you remove the code so I can try making some other code instead? Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596324951 Share on other sites More sharing options...
0 xendrome Posted March 22, 2014 Author Share Posted March 22, 2014 On 22/03/2014 at 21:46, Seahorsepip said: If it only happens on IE it's clearly a IE fault as far as I can guess and yeah the hack didn't work I just noticed :/ Just noticed too yeah. could you remove the code so I can try making some other code instead? Removed iefix.js for now. Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596324953 Share on other sites More sharing options...
0 Seahorsepip Veteran Posted March 22, 2014 Veteran Share Posted March 22, 2014 I think I might found a fix Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596324963 Share on other sites More sharing options...
0 Seahorsepip Veteran Posted March 22, 2014 Veteran Share Posted March 22, 2014 This might work: css: body { width: 748px; overflow-x: hidden; } js to use instead of current js: $(document).ready(function(){ zoom = $(window).width()/$("body table tbody").width()*100; document.body.style.zoom = zoom+"%"; document.documentElement.style.zoom = "75%"; }); $(window).on('resize', function(){ zoom = $(window).width()/$("body table tbody").width()*100; document.body.style.zoom = zoom+"%"; document.documentElement.style.zoom = "75%"; }); Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596324977 Share on other sites More sharing options...
0 Brandon Live Veteran Posted March 22, 2014 Veteran Share Posted March 22, 2014 On 22/03/2014 at 21:46, Seahorsepip said: If it only happens on IE it's clearly a IE fault as far as I can guess and yeah the hack didn't work I just noticed :/ That's simply not true. Just because something works in one browser doesn't mean it's correct. Depending on your goal, a scale transform may work better (on newer browsers like IE9+ anyway). You can set that via CSS (if you just want a fixed scale) or JS if you want to calculate the ratio dynamically. For example, something roughly like: body { -ms-transform: scale(1.5) translateX(-25vw); -ms-transform-origin: top left; -webkit-transform: scale(1.5) translateX(-25vw); -webkit-transform-origin: top left; -moz-transform: scale(1.5) translateX(-25vw); -moz-transform-origin: top left; transform: scale(1.5) translateX(-25vw); transform-origin: top left; } Of course for RTL, you'd want to scale from top right and translate a positive number. However, depending on your goal, you might be better off with viewport settings and just using a fixed viewport size. Then the browser will automatically calculate how to make it fit. I'm wary of the notion of trying to use the window vs body size as you did. For example, IE sets a default zoom of 125% or 150% on higher DPI screens, which may throw off some of your calculations. I think that's why the jquery docs basically say not to do that with .width() on "window". But maybe it's not a problem. I don't know why you need jquery for that though, you'd probably be better off just using window.innerWidth and document.body.clientWidth directly. Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596324979 Share on other sites More sharing options...
0 Seahorsepip Veteran Posted March 22, 2014 Veteran Share Posted March 22, 2014 On 22/03/2014 at 22:13, Brandon Live said: That's simply not true. Just because something works in one browser doesn't mean it's correct. Depending on your goal, a scale transform may work better (on newer browsers like IE9+ anyway). You can set that via CSS (if you just want a fixed scale) or JS if you want to calculate the ratio dynamically. For example, something roughly like: body { -ms-transform: scale(1.5) translateX(-25vw); -ms-transform-origin: top left; -webkit-transform: scale(1.5) translateX(-25vw); -webkit-transform-origin: top left; -moz-transform: scale(1.5) translateX(-25vw); -moz-transform-origin: top left; transform: scale(1.5) translateX(-25vw); transform-origin: top left; } Of course for RTL, you'd want to scale from top right and translate a positive number. However, depending on your goal, you might be better off with viewport settings and just using a fixed viewport size. Then the browser will automatically calculate how to make it fit. I'm wary of the notion of trying to use the window vs body size as you did. For example, IE sets a default zoom of 125% or 150% on higher DPI screens, which may throw off some of your calculations. I think that's why the jquery docs basically say not to do that with .width() on "window". But maybe it's not a problem. I don't know why you need jquery for that though, you'd probably be better off just using window.innerWidth and document.body.clientWidth directly. I just used jQuery because I'm lazy and your method doesn't fix the centering issue. And you can better use the css zoom property then transform for compatibility. Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596324987 Share on other sites More sharing options...
0 Seahorsepip Veteran Posted March 22, 2014 Veteran Share Posted March 22, 2014 Edit: Seems multiple css zooms can't be used together on IE damn >.> Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325009 Share on other sites More sharing options...
0 Seahorsepip Veteran Posted March 22, 2014 Veteran Share Posted March 22, 2014 Can't find so quickly a method to solve your zoom problem when you want to use 75% instead of 100% :/ Gotta go now, maybe someone else finds a solution in the meantime while I'm gone else I'll see if I can find a fix tomorrow ;) Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325025 Share on other sites More sharing options...
0 Brandon Live Veteran Posted March 22, 2014 Veteran Share Posted March 22, 2014 On 22/03/2014 at 22:15, Seahorsepip said: I just used jQuery because I'm lazy and your method doesn't fix the centering issue. Umm what centering issue? Quote And you can better use the css zoom property then transform for compatibility. CSS zoom is non-standard and has a lot of obscure side effects. That's why sites like CSS-Tricks say not to use it on production sites. Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325031 Share on other sites More sharing options...
0 xendrome Posted March 22, 2014 Author Share Posted March 22, 2014 Ok so currently I have zoom.js $(document).ready(function(){ zoom = $(window).width()/$("body table tbody").width()*75; document.body.style.zoom = zoom+"%"; document.documentElement.style.zoom = "100%"; }); $(window).on('resize', function(){ zoom = $(window).width()/$("body table tbody").width()*75; document.body.style.zoom = zoom+"%"; document.documentElement.style.zoom = "100%"; }); and the CSS body { font-size: 11px; font-family: Verdana, Arial, Helvetica, sans-serif; text-align: left; margin: 0; width: 755px; overflow-x: hidden; padding: 0 } And the ONLY issue is it is aligning the site to the left in both IE and Chrome. EDIT: Ok so changing the: width: 755px; to 1024px seems to have fixed it in IE and Chrome Seahorsepip, whenever you get a moment, please check it on your end also and see if you find any weird layout issues :) I will post back here if I find any myself. Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325037 Share on other sites More sharing options...
0 xendrome Posted March 22, 2014 Author Share Posted March 22, 2014 For now I have turned off the code, since I still can't seem to get it to show correctly in IE8 Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325089 Share on other sites More sharing options...
0 Seahorsepip Veteran Posted March 23, 2014 Veteran Share Posted March 23, 2014 Use the *100 with "body" in the js which I first posted and set body css width: 748px; and padding: 0 80px; that might work. Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325183 Share on other sites More sharing options...
0 Seahorsepip Veteran Posted March 23, 2014 Veteran Share Posted March 23, 2014 On 22/03/2014 at 22:38, Brandon Live said: Umm what centering issue? CSS zoom is non-standard and has a lot of obscure side effects. That's why sites like CSS-Tricks say not to use it on production sites. The content is left aligned and margin auto won't work correctly because of the transform :/And I know zoom isn't a good fix but so is css3 transform, the best fix would be mediaqueries and making it responsive. But I guess he has a reason why he wanted it to work like this :P Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325199 Share on other sites More sharing options...
0 Brandon Live Veteran Posted March 23, 2014 Veteran Share Posted March 23, 2014 On 23/03/2014 at 00:42, Seahorsepip said: The content is left aligned and margin auto won't work correctly because of the transform :/ I don't understand why that would be the case. Just adjust the math for where you want to put it? Quote And I know zoom isn't a good fix but so is css3 transform, the best fix would be mediaqueries and making it responsive. But I guess he has a reason why he wanted it to work like this :p At least transform is standardized and works in most browsers. You can even do it in IE8 with the filter stuff, though I don't know if that has any limitations which would apply here. And yeah, the whole idea of zooming a fixed layout is not a good solution for most situations. Maybe for a game or something? I know some people like to do that for Win8 games and use WinJS's ViewBox control to handle scaling it. That just does the same thing I mentioned (sets scale + translate transforms in JS after calculating the right values). It doesn't seem to have any alignment issues... Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325219 Share on other sites More sharing options...
0 xendrome Posted March 23, 2014 Author Share Posted March 23, 2014 On 23/03/2014 at 00:35, Seahorsepip said: Use the *100 with "body" in the js which I first posted and set body css width: 748px; and padding: 0 80px; that might work. Yeah no go on that, shifts the whole page over 80px on Chrome/ IE11, so it cuts off the right side. On 23/03/2014 at 00:51, Brandon Live said: I don't understand why that would be the case. Just adjust the math for where you want to put it? Hey Brandon, if you'd like to take a stab at it, I can give you the URL in PM. The goal is, to have it adjust larger automatically because on high-res screens the site is very small-fixed width and makes it hard to read. Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325229 Share on other sites More sharing options...
0 Brandon Live Veteran Posted March 23, 2014 Veteran Share Posted March 23, 2014 On 23/03/2014 at 00:57, xendrome said: Hey Brandon, if you'd like to take a stab at it, I can give you the URL in PM. The goal is, to have it adjust larger automatically because on high-res screens the site is very small-fixed width and makes it hard to read. Isn't that why high DPI systems default to a higher scale in the browser? (I know IE on Win7 / Win8 does this, and I think Macs do something similar at least on Retina displays) Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325247 Share on other sites More sharing options...
0 The_Decryptor Veteran Posted March 23, 2014 Veteran Share Posted March 23, 2014 This idea seems flawed to me, if the site content is so small then simply zooming in probably won't have the desired effect, everything will be huge and you'll end up seeing less of the page since the content will be pushed off the bottom of the screen (Say it's a fixed 640 width viewed on a 1920x1080 screen, everything will be blown up to 3 times it's normal size, 16px body text would become 48px, etc.) On 22/03/2014 at 22:13, Brandon Live said: ... I'm wary of the notion of trying to use the window vs body size as you did. For example, IE sets a default zoom of 125% or 150% on higher DPI screens, which may throw off some of your calculations. I think that's why the jquery docs basically say not to do that with .width() on "window". But maybe it's not a problem. ... Yeah, it shouldn't be a problem because the browser should be returning those values in CSS pixels instead of device pixels, so they should scale with the display density (Which is also why the page should look the same between a "96dpi" screen and a "192dpi" screen, the browser/OS scales all drawing) Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325265 Share on other sites More sharing options...
0 Seahorsepip Veteran Posted March 23, 2014 Veteran Share Posted March 23, 2014 We're doing quite bad practise here but whatever here's the code that should work: js: $(document).ready(function(){ zoom = $(window).width()/$("body").outerWidth()*100; document.body.style.zoom = zoom+"%"; }); $(window).on('resize', function(){ zoom = $(window).width()/$("body").outerWidth()*100; document.body.style.zoom = zoom+"%"; }); css: body { width: 748px; overflow-x: hidden; padding: 0 80px; /* Change 80px to increase/decrease zoom size */ } Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325661 Share on other sites More sharing options...
0 Seahorsepip Veteran Posted March 23, 2014 Veteran Share Posted March 23, 2014 If you want you can also limit the max and minimum scaling so it stops scaling beyond a certain point and centers instead. Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325669 Share on other sites More sharing options...
0 The_Decryptor Veteran Posted March 23, 2014 Veteran Share Posted March 23, 2014 "zoom" is an old IE only thing, it won't work in Firefox/Chrome/Safari/Opera/etc. Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325683 Share on other sites More sharing options...
0 Seahorsepip Veteran Posted March 23, 2014 Veteran Share Posted March 23, 2014 On 23/03/2014 at 11:10, The_Decryptor said: "zoom" is an old IE only thing, it won't work in Firefox/Chrome/Safari/Opera/etc. zoom: value; Works fine on webkit browsers, ie uses -ie-zoom: value; It should work on opera now too but it fails to work on firefox :/ I'll give css transforms another try even though it works not as I want right now. Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325709 Share on other sites More sharing options...
0 Seahorsepip Veteran Posted March 23, 2014 Veteran Share Posted March 23, 2014 Here's a method using transforms then: js for all modern browsers and IE9: $(document).ready(function(){ zoom = $(window).width()/$("body").outerWidth(); $("body").css("transform","scale("+zoom+")"); $("body").css("-ms-transform","scale("+zoom+")"); }); $(window).on('resize', function(){ zoom = $(window).width()/$("body").outerWidth(); $("body").css("transform","scale("+zoom+")"); $("body").css("-ms-transform","scale("+zoom+")"); }); css: body { width: 748px; overflow-x: hidden; padding: 0 80px; /* Change 80px to increase/decrease zoom size */ transform-origin: top left; -ms-transform-origin: top left; } and js for IE8 and older: $(document).ready(function(){ zoom = $(window).width()/$("body").outerWidth()*100; document.body.style.zoom = zoom+"%"; }); $(window).on('resize', function(){ zoom = $(window).width()/$("body").outerWidth()*100; document.body.style.zoom = zoom+"%"; }); IE8 js code should be put in a conditional tag like this: <head> <!--[if lt IE 8 ]> <script type="text/javascript"> $(document).ready(function(){ zoom = $(window).width()/$("body").outerWidth()*100; document.body.style.zoom = zoom+"%"; }); $(window).on('resize', function(){ zoom = $(window).width()/$("body").outerWidth()*100; document.body.style.zoom = zoom+"%"; }); </script> <![endif]--> </head> This should be the correct code then I suppose, though the whole scaling idea isn't great lol Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325719 Share on other sites More sharing options...
0 The_Decryptor Veteran Posted March 23, 2014 Veteran Share Posted March 23, 2014 On 23/03/2014 at 11:49, Seahorsepip said: zoom: value; Works fine on webkit browsers, ie uses -ie-zoom: value; It should work on opera now too but it fails to work on firefox :/ I'll give css transforms another try even though it works not as I want right now. Well that's a shame, although with the state of WebKit it's honestly not that surprising. Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325725 Share on other sites More sharing options...
0 xendrome Posted March 23, 2014 Author Share Posted March 23, 2014 On 23/03/2014 at 12:00, Seahorsepip said: This should be the correct code then I suppose, though the whole scaling idea isn't great lol So if I do this, which I currently have active, it seems like I have to increase the padding to like 800 to get it zoomed out enough, and as I increase the padding, it shifts the whole site over. Seahorsepip, if you can, look at the live site, I have it enabled now. Link to comment https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/page/2/#findComment-596325793 Share on other sites More sharing options...
Question
xendrome
So, I am looking for some type of Javascript that I can put into an HTML site, which will zoom/stretch the page to take up the full width of the browser window, without losing the fixed width formatting.
Any suggestions?
Link to comment
https://www.neowin.net/forum/topic/1206095-javascript-to-auto-scale-webpage/Share on other sites
60 answers to this question
Recommended Posts