Web form semanticamente correto

9 respostas
marciobarroso

Pessoal,

A bastante tempo venho estudando as técnicas de design web para tentar chegar em um modelo ideal.

Gostaria de ter um template ou modelo de formulário que fosse semanticamente correto. Não fizesse uso de tags impróprias ou técnicas indevidas.

Eu cheguei em um modelo que pode ser visto aqui, porém ele ainda não esta pronto, pois os componentes radio e checkbox que tomam mais de 1 linha, acabam ficando alinhados para a esquerda.

Vocês podem ver o meu draft aqui -> http://jsbin.com/eyodax

Alguém teria alguma sugestão para resolver isso sem ter que picaretar meu código? Sem ter que usar div ou table.

[]'s

9 Respostas

perdeu

use a tag para campos checkbox e radio. assim quando cara clicar no texto o check/radio é marcado. fica mais facil pro usuario clicar.

marciobarroso

O problema todo esta sendo em alinhar os componentes radio/checkbox a direita sem usar um div ou tabela.

A

Por que não pode usar divs?

Você está utilizando as tags

para agrupar componentes e
para posiciona-los.
Acredito que essa não é a forma mais semântica, é?

A

Por que não pode usar divs?

Você está utilizando as tags p para agrupar componentes e br para posiciona-los.
Acredito que essa não é a forma mais semântica, é?

marciobarroso

Eu poderia muito bem usar uma tabela para resolver o problema ou então divs, porém, semanticamente estaria utilizando a tabela para um fim que não é o recomendado.

Esse assunto é mesmo muito complicado e existem várias controversas …

A

marciobarroso:
Eu poderia muito bem usar uma tabela para resolver o problema ou então divs, porém, semanticamente estaria utilizando a tabela para um fim que não é o recomendado.

Esse assunto é mesmo muito complicado e existem várias controversas …

Então, estava perguntando do ponto de vista semântico mesmo.

Da mesma forma que um table não serve para isso, acredito que um p e um br também não foram feitos para isso.

O div por sua vez serve para agrupar componentes, então não estaria fugindo da função dele.

Na verdade, estou mais questionando do que afirmando.
Também não sou especialista nisso.

marciobarroso

Esta fincando muito bom …

Criei alguns plugins para jQuery e aproveitei alguns que achei na internet …

Ainda não esta 100% mas já esta próximo do que eu procuro como modelo ideal para um form html …

http://jsbin.com/eziwig

Opinem …

[]'s

alias

Opa, tudo bem? Cara achei bem interessante o que está fazendo, quis dar uma opiniao aqui hehe. Eu faria algo proximo desse codigo:

<!DOCTYPE html>
<html>
	<head>
		<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
		<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/ui-lightness/jquery-ui.css" rel="stylesheet" type="text/css" />
		<link href="http://jquery.marciob.com/plugins/jquery.multiselect.css" rel="stylesheet" type="text/css" />
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
		<script type="text/javascript" src="http://jquery.marciob.com/plugins/jquery.multiselect.min.js"></script>
		<script type="text/javascript" src="http://jquery.marciob.com/plugins/jquery.uniqueid.js"></script>
		<script type="text/javascript" src="http://jquery.marciob.com/plugins/jquery.inputfile.js"></script>  
		<meta charset=utf-8 />
		<title>JS Bin</title>
		<!--[if IE]>
		  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
		<![endif]-->
		<style>
			body {
				font-family: "century gothic";
				font-size: 0.70em;
				margin: 10px;
				padding: 0px;
			}

            label {
              float:left;
              width:100px;
              display:block;
            }
            form {
              margin-left:50px;
              line-height:20px
            }
            input, .ui-multiselect {
              margin-bottom:10px;
            }
            div.radios, div.checks, div.file {
              float:left;
            }
            br {
              clear:both;
            }
		</style>
	</head>
	<body>
		<form action="#" method="POST">
			<h2>Security Settings</h2>
            <label for="name">Name</label>
			<input type="text" name="name" required="required" />
            <br />
            <label for="password">Password</label>
			<input type="password" name="password" required="required" />
			<br />
            <label for="gender">Gender</label>
            <div class="radios">
              <input type="radio" id="gender-male" name="gender" value="male" /> Male<br />
              <input type="radio" id="gender-female" name="gender" value="female" /> Female
            </div>
            <br />
			<label for="vehicles">Vehicles</label>
            <div class="checks">
              <input id="vehicle-bike" type="checkbox" name="vehicle" value="Bike" /> I have a bike<br />
              <input id="vehicle-motorcycle" type="checkbox" name="vehicle" value="Motorcycle" /> I have a motocycle<br />
              <input id="vehicle-car" type="checkbox" name="vehicle" value="Car" /> I have a car<br />
              <input id="vehicle-truck" type="checkbox" name="vehicle" value="Truck" /> I have a truck<br />
              <input id="vehicle-airplane" type="checkbox" name="vehicle" value="Airplane" /> I have a airplane<br />
            </div>
            <br />
			<label for="salary">Salary</label>
            <select class="single" name="salary" size="5">
              <option value="1">U$ 1.000,00</option>
              <option value="2">U$ 2.500,00</option>
              <option value="3">U$ 5.000,00</option>
              <option value="4">U$ 10.000,00</option>
              <option value="5">More than U$ 10.000,00</option>
			</select>
            <br />
			<label for="salary">Languages</label>
            <select class="multiple" name="languages[]" multiple="multiple" size="5">
                <option value="English">English</option>
                <option value="French">French</option>
                <option value="Spanish">Spanish</option>
                <option value="Italian">Italian</option>
                <option value="Chinese">Chinese</option>
                <option value="Japanese">Japanese</option>
                <option value="Russian">Russian</option>
                <option value="Esperanto">Esperanto</option>
            </select>
            <br />
            <label for="resume">Resume</label>
            <div class="file">
              <input type="file" name="resume"  class="mab-ui-button ui-state-default ui-corner-all"/>
            </div>
            <br />
			<label for="observations">More informations</label>
			<textarea rows="5" cols="20" name="observation"></textarea>
            <br /><br />
            <button type="button" class="mab-ui-button ui-state-default ui-corner-all">Cancel</button>
			<button type="reset" class="mab-ui-button ui-state-default ui-corner-all">Reset</button>
			<button type="submit" class="mab-ui-button ui-state-default ui-corner-all">Submit</button>
        </form>
    </body>
</html>

Não vi sentido em usar as tags dl e dt, não são adequadas a esse caso. Se o que voce queria era um container para o label + campo creio que um div seria o mais adequado. Embora eu não tenha usado essa abordagem (fiz com br).

O uso do br não quebra a semântica, pois o objetivo da tag é inserir uma quebra de linha. É mais simples que usar um container, mas um div realmente poderia deixar o layout mais “rebuscado” e fácil de manipular via css.

Outro detalhe que nao mudei ai, mas o atributo for dos labels precisa ser igual ao “id” do elemento a que ele se refere, nao ao name.

Parabens cara, espero ter ajudado.

marciobarroso

Valeu pela resposta. Vou readaptar meu modelo. obrigado

Criado 13 de junho de 2012
Ultima resposta 13 de jul. de 2012
Respostas 9
Participantes 4