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"); }); });