Aumentar/diminuir fonte com jQuery
Esse blog está mais parecendo um blog exclusivo sobre jQuery, mas não é. O fato é que jQuery realmente é um framework bem interessante pra se trabalhar, dada a facilidade de uso (e re-uso) e aprendizado. Como se não bastasse, essa é a idéia principal do blog.
Me inscrevi no ClientSide especialmente pra falar de (X)HTML e CSS, que são minha especialidade, mas, apesar de não ser programador de fato, vou dar melhorias a serem feitas (como a maioria das funções recém feitas), mas que é bem fácil de fazer e bastante útil se você quiser melhorar a acessibilidade de seu site. Chega de papo e vamos ao código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function fontSize(action, container){ container = typeof(container) != 'undefined' ? container : "div.texto" //se não for especificado um container será "div.texto" baseSize = parseInt($(container+" p").css("font-size")) //extraímos o font-size padrão, tomando como base o p do nosso container $els = $(container).children() $els.each(function(){ $fs = parseInt($(this).css("font-size")) if(action=="plus" && baseSize<16) $fs+=1 else if(action=="minus" && baseSize>13) $fs-=1 $(this).css("font-size", $fs) }) } $(function(){ $(".decrease").click(function(){ fontSize("minus") }).blur() //blur() aqui remove o foco do elemento, logo após o clique $(".increase").click(function(){ fontSize("plus") }).blur() }) |
Quinze linhas de código. Nada mal. A única consideração a ser feita aqui é que ao chamarmos a função fontSize, há um parâmetro obrigatório, que é exatamente a ação a ser feita: aumentar a letra (plus) ou diminuí-la (minus).
Agora, tudo o que precisamos fazer é chamar dois arquivos javascript no header de nossa página (jquery.js e font-size.js) e criar os elementos com os respectivos id’s pra chamar a função correspondente quando clicados. Links? Inputs? Não… Botões! Aliás, uma lista deles:
<ul> <li><button type="button">Diminuir a letra</button></li> <li><button type="button">Aumentar a letra</button></li> </ul>
Com isso, tudo o que estiver dentro de uma div com classe igual a “texto” será alvo de nossa função e terá seu tamanho de fonte alterado. Listas, títulos, parágrafos, div’s, address, strong… tudo o que for filho direto de uma <div class="texto">.
Obviamente, como disse anteriormente, a função precisa de melhorias, mas o core está aí. Uma melhoria certa é a funcionalidade de resetar o tamanho da fonte para o padrão. Mas isso fica pra outra hora, já passam das 2h da manhã. Fica aí uma sugestão de passatempo pra vocês. ![]()
Entry Details
Publicado em 02/01/2008 às 10:01 em Frameworks, Javascript, jQuery

Excelente artigo para acessibilidade.
Parabéns!
Ola cara, eu peguei seu script e fiz uma modificação, acredito que ficou melhor.
Seu script ele apenas da o atributo style/font-size nas tag pai e filhos ‘p’, mas se caso os outras tag dentro do filho ‘p’ tiver com o atributo font-size cetado em um css por exemplo, elas não vão ser modificadas.
por exemplo:
strong { font-size:25px; }
Isto é um teste de paragrafo.
A tag strong nao vai ser modificada.
então fiz da seguinte maneira:
fiz uma função que passe por todos os filhos,netos,bisnetos e tataranetos(etc) e coloca a tag style/font-size acrecentando +1 referente ao seu tamanho ja cetado.
var hits = 5;
function fontSize(action, container){
container = typeof(container) != ‘undefined’ ? container : ‘div.texto’; //se não for especificado um container será ‘div.texto’
var hitIncrease = 0;
var hitDecrease = 0;
var pegaTodos = {pega : function(maiorDeTodos){
var filho;
// Passo por todos os controles.
$(maiorDeTodos).children().each(function(i){
filho = $(this);
$fs = parseInt($(filho).css(’font-size’));
if (action == ‘plus’ && hits0) {
$fs -= 1;
hitDecrease = 1;
}
$(filho).css(’font-size’, $fs);
if ($(filho).children().length != 0) {
pegaTodos.pega($(filho));
}
});
}};
pegaTodos.pega($(container));
if (hitIncrease == 1)hits+=1;
else if (hitDecrease == 1)hits-=1;
}
$(function(){
$(’.decrease’).click(function(){ fontSize(’minus’) }).blur(); //blur() aqui remove o foco do elemento, logo após o clique
$(’.increase’).click(function(){ fontSize(’plus’) }).blur();
})
muito bom o adendo do Acaz.