Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

scale fit mobile web content using viewport meta tag

I'm trying to figure out how to leverage the mobile viewport meta tag to automatically zoom the contents of a HTML page to fit into a web view.

Constraints:

  • The HTML may or may not have fixed size elements (ex img has a fixed width of 640). In other words I don't want to force the content to be fluid and use %'s.
  • I do not know the size of the webview, I just know its aspect ratio

For example, if I have a single image (640x100px) I want the image to zoom out if the webview is 300x250 (scale down to fit). On the other hand, if the webview is 1280x200 I want the image to zoom in and fill the webview (scale up to fit).

After reading the android docs and the iOS docs on viewports, it seems simple: since I know the width of my content (640) I just set the viewport width to 640 and let the webview decide if it needs to scale the content up or down to fit the webview.

If I put the following into my android/iPhone browser OR a 320x50 webview, the image does not zoom out to fit the width. I can scroll the image to the right and left..

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">   <head>     <title>Test Viewport</title>     <meta name="viewport" content="width=640" />     <style type="text/css">     html, body {       margin: 0;       padding: 0;       vertical-align: top;     }      h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,cite,code,del,dfn,em,img,q,s,samp,small,strike,strong,sub,sup,tt,var,dd,dl,dt,li,ol,ul,fieldset,form,label,legend,button,table,caption,tbody,tfoot,thead,tr,th,td      {       margin: 0;       padding: 0;       border: 0;       font-weight: normal;       font-style: normal;       font-size: 100%;       line-height: 1;       font-family: inherit;       vertical-align: top;     }            </style>   </head>   <body>     <img src="http://www.dmacktyres.com/img/head_car_tyres.jpg">   </body> </html> 

What am I doing wrong here? Does the viewport meta tag only zoom into content that is < the webview area?

like image 866
rynop Avatar asked Jan 04 '12 23:01

rynop


People also ask

What does the viewport meta tag do for a web page?

The viewport is the user's visible area of a web page. It varies with the device - it will be smaller on a mobile phone than on a computer screen. This gives the browser instructions on how to control the page's dimensions and scaling.

Why is the viewport meta tag used in responsive web design?

The HTML Viewport meta tag is used for creating responsive website. So that web page can adjust its width according to viewport.

How do I set mobile viewport?

To configure a mobile viewport, all you have to do is add a meta viewport tag to any and all webpages you would like to be mobile-friendly. To do this, simply copy the HTML snippet below and paste it in the header of your site.

What is the user scalable attribute in the meta viewport tag?

The user-scalable attribute defines whether users can scale (zoom) the page content on mobile. By default, scaling is on, but if user-scalable is set to '0' or 'no' then this will prevent users from zooming, which negatively affects user experience (in most cases).


1 Answers

In the head add this

//Include jQuery <meta id="Viewport" name="viewport" content="initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">  <script type="text/javascript"> $(function(){ if( /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ) {   var ww = ( $(window).width() < window.screen.width ) ? $(window).width() : window.screen.width; //get proper width   var mw = 480; // min width of site   var ratio =  ww / mw; //calculate ratio   if( ww < mw){ //smaller than minimum size    $('#Viewport').attr('content', 'initial-scale=' + ratio + ', maximum-scale=' + ratio + ', minimum-scale=' + ratio + ', user-scalable=yes, width=' + ww);   }else{ //regular size    $('#Viewport').attr('content', 'initial-scale=1.0, maximum-scale=2, minimum-scale=1.0, user-scalable=yes, width=' + ww);   } } }); </script> 
like image 111
Bren1818 Avatar answered Sep 23 '22 00:09

Bren1818