Ну что касается viewport-та то вы можете сделать что-то вроде этого:
<meta name="viewport" content="width=device-width,initial-scale=1" id="viewport" />
(function (w, d) {
var viewport = d.querySelector('#viewport'),
viewports = {
default: viewport.getAttribute('content'),
small: 'width=320'
};
var viewport_set = function() {
screen.width <= 320 ? viewport.setAttribute( 'content', viewports.small) : viewport.setAttribute( 'content', viewports.default );
}
//При загрузке
viewport_set();
// При изменении
w.onresize = function() {
viewport_set();
}
}(window, document));
Ну а дальше уже в css media запросами, либо при подключении:
<link rel="stylesheet" type="text/css" media="only screen and (max-device-width: 480px)" href="mobile-device.css" />