CSS

13 dez, 2012

Criando um Checklist amigável com CSS, jQuery e em xHTML

Publicidade

No artigo de hoje, vamos ver como é simples criar uma lista de checkbox (checklist) mais amigável, privilegiando a usabilidade e sem prejudicar o HTML e influenciar na acessibilidade da mesma. Tudo isso através de xHTML, CSS e jQuery.

Esse protótipo foi idealizado, inicialmente, pelo meu amigo designer Marcello Manso, que trabalhou comigo na Petrobrás. A ideia é transformar um checklist comum em algo mais elaborado, como no exemplo abaixo:

HTML do checklist

Não coloquei no CSS a marcação de form, fieldset, nem legend, pois o checklist geralmente é inserido dentro de um pedaço de formulário. Então, vou trabalhar como se você já tivesse criado essas tags iniciais de formulário, ok?

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<link href="css/checklist.css" rel="stylesheet" media="all" type="text/css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript" src="js/effects.js"></script>
<!-- checklist -->
<ul class="list-check">
<li><input id="check-1" name="check" type="checkbox">
<label for="check-1">O incentivo ao avanço tecnológico, assim como a contínua expansão de nossa atividade exige a precisão e a definição do sistema de participação geral. No mundo atual, o consenso sobre a necessidade de qualificação apresenta . </label>
</li>
<li><input id="check-2" name="check" type="checkbox">
<label for="check-2">O incentivo ao avanço tecnológico, assim como a contínua expansão de nossa atividade exige a precisão e a definição do sistema de participação geral. No mundo atual, o consenso sobre a necessidade de qualificação apresenta . </label>
</li>
<li><input id="check-3" name="check" type="checkbox">
<label for="check-3">O incentivo ao avanço tecnológico, assim como a contínua expansão de nossa atividade exige a precisão e a definição do sistema de participação geral. No mundo atual, o consenso sobre a necessidade de qualificação apresenta . </label>
</li>
</ul>
<!-- /checklist -->

Vamos ao nosso CSS

/* CSS reset */
* { margin: 0;  padding: 0; list-style: none; border: 0;  text-decoration: none;}
input, label {vertical-align: middle;}

/* fixing firefox bug */
div:after, ol:after, li:after, form:after, ul:after, dl:after,q:after {content:".";display:block;clear:both;visibility:hidden;height:0;overflow:hidden;}

.list-check li {
border-bottom:1px solid #fff;
padding:10px;
color:#000;
background-color:#f7f7f4;
}
.list-check li {background-color:#f7f7f4;}
.list-check li:hover {background-color:#e3e3dc;}
.list-check li label {
cursor:pointer;
color:#333;
font-size:1.2em;
line-height:1.3em;
}
.list-check li:hover label {color:#000;}
.list-check input[type="checkbox"], .multi-column-check input[type="checkbox"] {cursor:pointer;margin-right:5px;}
.list-check li.checked {background: #e5f8ce url(../img/ico-check.png) no-repeat 10px center;padding-left:32px;}
.list-check .checked input[type="checkbox"] {display: none;}
.list-check li.checked:hover input[type="checkbox"] {display: inline !important;}
.list-check li.checked:hover{background: #e5f8ce none !important;padding-left:10px;}

Vamos para a mágica do jQuery, finalizando a trama

$(document).ready(function() {
//reconhecendo o checkbox e ativando a li
$(".list-check").find(":checked").parent().toggleClass("checked");
$(".list-check").find(":disabled").parent().toggleClass("disabled");
$(".list-check :checkbox").click(function () {
$(this).parent().toggleClass("checked");
});
});