OK - para empezar, debe usar Ems para todas las mediciones que pueda en su UI. Como mínimo, califique todos sus elementos de texto con Ems (en lugar de píxeles o%). Si es posible, establecer el ancho de los bloques de diseño en Ems también ayudará a la aplicación a escalar proporcionalmente. Si puede establecer todas sus dimensiones en Ems, toda su aplicación será visualmente escalable.
La clave para Ems es que están dimensionados en relación con el tamaño de fuente de su elemento principal, lo que significa que puede ajustar el tamaño de todo el texto en proporción, ajustando el tamaño de fuente del elemento del cuerpo (desde todo es relativo al cuerpo).
El último paso es usar una pieza de javascript para detectar el ancho de la ventana gráfica y establecer el tamaño de la fuente del cuerpo en consecuencia. Dependiendo de cuán fino quiera controlar la báscula, puede usar clases en el elemento del cuerpo para configurar un conjunto de valores predefinidos o manipular directamente el tamaño de la fuente. Si es posible, tiendo a usar tamaños predeterminados para facilitar las pruebas.
Usaría una biblioteca de JavaScript para facilitar la detección del ancho de la ventana gráfica; es notoriamente diferente en diferentes navegadores. Con jQuery, el código podría ser:
$(function(){
var viewPortWidth = $(window).width();
if (viewPortWidth > 1900) {$('body').addClass('extraWide')}
else if (viewPortWidth > 1400) {$('body').addClass('wide')}
else if (viewPortWidth > 1000) {$('body').addClass('standard')}
else if (viewPortWidth > 700) {$('body').addClass('narrow')}
else {$('body').addClass('extraNarrow')}
});
Y el CSS:
<style type="text/css">
body {font-size:62.5%;} /* Set the size of 1em to 10px in all browsers */
body.extraWide {font-size:85%;}
body.wide {font-size:75%;}
body.narrow {font-size:50%;}
body.extraNarrow {font-size:40%;}
</style>
Esos valores pueden ser ajustados como usted quiera, por supuesto, y se puede configurar tantas divisiones como desee . Esta es una solución rápida y sucia, pero debería funcionar.
Una nota - el código javascript que se muestra solo configurará la báscula una vez cuando se cargue la página; no se ajustará cuando cambie el tamaño de la ventana. Esa es una posible adición, pero hay consideraciones más importantes antes de ir por esa pista. Personalmente, incluso pensaría en establecer el valor de la escala en una cookie, para mantener la experiencia del usuario constante durante toda la sesión, en lugar de volver a escalar cada carga de página.
espero que los downvotes contra esta respuesta son debido a que hay mejores y más modernas soluciones a este problema ahora. Eso no quiere decir que esta respuesta es "incorrecta", pero las consultas a los medios deberían ser lo primero que se debe intentar para lograr este efecto. – Beejamin