Blog Agencia Web

Flexibilizando El Tamaño De Letra

icon timeRicardo Aroca | 04 de noviembre de 2005 | icon comment26 comentarios

Brindar textos en un tamaño adecuado a las capacidades visuales del usuario es una principio básico de usabilidad. En este artículo se muestra como modificar el tamaño del texto en zonas específicas de una página a través de controles ubicados en la misma página.

La técnica consiste en fijar tamaños de texto que sean relativos a un elemento base y luego con JavaScript cambiar el tamaño de letra del elemento base.

Fijando tamaño de letra base

A través de una hoja de estilos especificamos el tamaño de texto por defecto al elemento body.

body{
font-size:12px;
}

Debido a la característica de herencia de los selectores CSS , todos los elementos internos al body tomarán como base éste tamaño de texto.

Ahora, se deben especificar tamaños de texto al resto de los elementos. Estos tamaños deben ser especificados en porcentaje o em, dado que necesitamos que los tamaños sean relativos.

p { font-size:100%; }
h1 { font-size:160%; }
h2 { font-size:140%; }

Preparando nuestra página

Para que nuestro script sólo cambie el tamaño de texto en una zona específica de la página (por ejemplo el cuerpo de una noticia), debemos identificar un elemento contenedor al texto que queremos cambiar. Para este ejemplo estableceremos el id de un div de la siguiente manera.


texto que queremos cambiar de tamaño

 

Además debemos establecer los controles que permitirán cambiar el tamaño del texto. En nuestro ejemplo crearemos 3 links para las acciones de Aumentar, Disminuir y Reestablecer tamaño del texto.

<a href="#" onClick="zoomText('aumentar','Contenido')">Aumentar</a><br />
<a href="#" onClick="zoomText('disminuir','Contenido')">Disminuir</a><br />
<a href="#" onClick="zoomText('reestablecer','Contenido')">Reestablecer</a>

En el código se llama a la función ZoomText cada vez que se hace clic en alguno de los links, para que esta función realice el cambio en el tamaño de las letras.

La función ZoomText

La Función ZoomText recibe 2 parámetros:

  • Acción: indica la acción a realizar y puede tomar los valores aumentar, disminuir y reestablecer.
  • Elemento: el nombre del identificador del elemento contenedor del texto a ser modificado.

El código de esta función es el siguiente.

ACTUALIZACIÓN: Se ha agregado código para limitar el tamaño máximo y mínimo de letra.

function zoomText(Accion,Elemento){
//inicializacion de variables y parámetros
var obj=document.getElementById(Elemento);
var max = 200 //tamaño máximo del fontSize
var min = 70 //tamaño mínimo del fontSize
if (obj.style.fontSize==""){
obj.style.fontSize="100%";
}
actual=parseInt(obj.style.fontSize); //valor actual del tamaño del texto
incremento=10;// el valor del incremento o decremento en el tamaño

//accion sobre el texto
if( Accion=="reestablecer" ){
obj.style.fontSize="100%"
}
if( Accion=="aumentar" && ((actual+incremento) <= max )){
valor=actual+incremento;
obj.style.fontSize=valor+"%"
}
if( Accion=="disminuir" && ((actual+incremento) >= min )){
valor=actual-incremento;
obj.style.fontSize=valor+"%"
}
}

Lo que hace el script es obtener el tamaño actual del texto en el elemento contenedor del texto. Luego dependiendo de la acción tomada cambia el valor de la propiedad fontSize de este elemento. Al cambiar el tamaño de texto en el elemento contenedor, automáticamente cambia el tamaño en los elementos internos, debido a que su tamaño ha sido especificado en forma relativa.

Para ver esta técnica en funcionamiento, sólo debes usar las opciones provistas para ello en el menú derecho de esta misma página.

Comentarios

gravatar

1 El 18 de enero de 2006 Regina escribió

Me gustaria saber como crear la opcion de version imprimible, existe algun codigo en php que pueda "filtrar solo contenido en HTML, no imagenes, banners, etc??? Gracias por su respuesta

gravatar

2 El 21 de abril de 2006 Erick Herlitz escribió

Ojo, que hay un error de paréntesis en: ...a href="#" onClick="ZoomText('reestablecer'),'Contenido'"... debe ser: ...a href="#" onClick="ZoomText('reestablecer','Contenido')"...

gravatar

3 El 22 de abril de 2006 el Autor escribió

toda la razon estimado. Problema resuelto.

gravatar

4 El 14 de junio de 2006 Sergio escribió

Otra cosilla, el nombre de la función zoomText en la llamada y la declaración varía en una letra, la \"z\" en minúscula en la declaración y mayúzcula en la llamada. Y no funciona por eso, una tontería pero ahí queda.

gravatar

5 El 21 de junio de 2006 Exequiel escribió

estimados amigos quisiera saber si alguien me puede mandar un ejemplo concreto por que no he podido hacer andar el codigo.. graicas

gravatar

6 El 21 de junio de 2006 el Autor escribió

ups ... error de tipografía ... gracias por el aviso.

gravatar

7 El 21 de agosto de 2006 Exequiel escribió

quisiera saber si me pueden mandar un ejemplo ya que he porbado de distintas formas y no me anda
Gracias

gravatar

8 El 21 de agosto de 2006 el Autor escribió

Exequiel, te envié un email. Puedes ocupar el código fuente de este sitio.
Ocupa el mismo sistema que se describe en el ejemplo.

gravatar

9 El 04 de octubre de 2006 Hilda escribió

Hola, me llamo Hilda de argentina intento aplicar la funcion en este sencillo ejemplo, no funciona, donde esta el error, gracias
<html>
<head>
<title>Documento sin t&iacute;tulo</title>

<link href="Estilo_prueba_Tamaño.css" rel="stylesheet" type="text/css">
<script language="javascript">
function zoomText(tipo){
//inicializaciones
obj=document.getElementById("Lectura");
if (obj.style.fontSize==""){
obj.style.fontSize="100%";
}
actual=parseInt(obj.style.fontSize);
incremento=10;

//operacion
if(tipo=="normal"){
obj.style.fontSize="100%"
}
if(tipo=="aumentar"){
valor=actual+incremento;
obj.style.fontSize=valor+"%"
}
if(tipo=="disminuir"){
valor=actual-incremento;
obj.style.fontSize=valor+"%"
}
}
</script>
</head>

<body>
<table>
<tr>
<td>
<input type="button" class="boton_IrA" onclick="zoomText('aumentar')">
<input type="button" class="boton_IrD" onclick="zoomText('disminuir')">
<input type="button" class="boton_IrD" onclick="zoomText('reestablecer')">
</td>
</tr>
<tr>
<DIV id="Lectura"> <p>Probaremos la funcion tamaño</p> </DIV>
</tr>
</table>
</body>
</html>

gravatar

10 El 04 de diciembre de 2006 Araceli escribió

Hola,
me gustaría saber alguna manera para mantener el tamaño de la letra de la página principal a las subpáginas del sitio web. Ya que en la principal me funciona pero en cuanto paso a otra página pierdo el tamaño de la letra..
Gracias.

gravatar

11 El 18 de diciembre de 2006 Rodrigo escribió

Yo tengo casi la misma funcion que aparece aca, pero existe un problema, que cuando tienes texto donde se incluyen tablas, esta funcion no hace lo que deberia hacer..., alguien sabe como solucionar este problema??...

gravatar

12 El 26 de febrero de 2007 Nahum escribió

Saludos alguien comento acerca de poner en la etiqueta # para hacer qeu aparezca una liga pero no vaya a ningu lado, en otra palabras habilitar un link, bueno eso es un poco erroneo a pesar que funciona ya que no es lo mismo # que javascript:void() que sería lo más correcto a llenar en un link, es decir <a href="#">link</a> esto lo que realmente esta haciendo es devolver o buscar el ancla en la página html y como no exite ningún <a name="#"> o ancla en el documento simplemente no va a ninguna parte, pero ojo algunos exploradores al picarlo te llevan hasta la parte superior del documento lo qeu no ocurre con javascript:void() la cual al regresar nada en la funci[on javascript no manda a ningún lado, saludos es un pequeño comentario

gravatar

13 El 16 de abril de 2007 Yuli escribió

Hola, algien podría mandarme los códigos de una página que ya halla implementado en el ejemplo anterior o el autor podria hacerme ese gran favor. gracias

gravatar

14 El 17 de abril de 2007 el Autor escribió

Yuli, El código es usado en esta misma página.

gravatar

15 El 17 de abril de 2007 el Autor escribió

Nahum, para solucionar eso, hay que agregar return false; al final de la función zoomText

gravatar

16 El 17 de abril de 2007 Yuli escribió

Muchas gracias, se que el código está en esta misma página pero lo que preguntaba es que si alguien lo tenía mas concreto. de todas formas muchisimas gracias por su respuesta.

gravatar

17 El 04 de mayo de 2007 Osvaldo escribió

me funciono de las mil maravillas el codigo.. solo una duda ahi alguna manera de ponerle limite al ampliar y reducir la tipografia.. es decir unos 3 clic y que salga un mensaje como "no puedes agrandar mas la letra" gracias

gravatar

18 El 30 de mayo de 2007 el Autor escribió

Osvaldo. Acabo de publicar el código necesario para limitar el tamaño máximo y mínimo de letra.

gravatar

19 El 01 de diciembre de 2007 Kurai escribió

Holap me sirvió mucho tu código tenía solo un error en la siguiente linea, para que lo cambies.

Dice: INCREMEMENTO en ves de INCREMENTO

if( Accion=="aumentar" && ((actual+incrememento)

gravatar

20 El 01 de diciembre de 2007 el Autor escribió

Gracias Kurai, por la acotación. Acabo de corregir el error.

gravatar

21 El 09 de julio de 2009 Joan escribió

Hola,
Hay alguna manera de mantener el tamaño de la letra de la página principal a las páginas interiores de la web. En la principal funciona correctamente pero en cuando pasamos a otra página se pierde el tamaño de la letra.
Muchas gracias

gravatar

22 El 09 de julio de 2009 el Autor escribió

Joan, para mantener la configuración del usuario tienes que usar una cookie.

gravatar

23 El 19 de julio de 2009 Farid escribió

HILDA : Sólo debes cambiar la palabra "reestablecer" por "normal" o viceversa y LISTO. Y adicionar a Aumentar lo mismo en los otros osea Disminuir.

gravatar

24 El 10 de agosto de 2009 vicky escribió

lo que m pasa es que en el msn
la letra mia me qda en 16 pero las de los otros se ve en 8 y no se como cambiarla me ayudan??
mandame un mail
porfazz

gravatar

25 El 09 de noviembre de 2009 Pablo escribió

Excelente código, busque y prové varios, la ventaja de este es que al trabajar con hojas de estilo funciona en casi todos los navegadores, gracias. Lo usaré en mi sitio. Hilda no se pero me parece que el error está en que el script necesita un objeto, probá esto:

gravatar

26 El 18 de enero de 2010 Ramiro escribió

Una pregunta!! la funcion puede ocacionar conflico con los estilos??

e probado la funcion en un HTML vacio y funciona perfectamente... pero lo introdusco dentro de la web y no funciona... alomejor ace conflico con los estilos no? o que podria ser??

Comentar

Los campos con asterisco * son obligatorios.

No se mostrará publicamente

Escribe la dirección sin http://


Etiquetas permitidas: a,strong, em, cite, blockquote, pre, code.

Opciones

Categorias

Suscribirse

Reciba automáticamente en su lector RSS las últimas publicaciones del blog.

Selección de Blogs

Publicidad

Contrata Planes Hostagator haciendo Clic Aquí

Agencia Web utiliza Hostgator para todos sus proyectos. Si quieres saber por qué, haz clic aquí.


Servicios