28172 sujets

CSS et mise en forme, CSS3

Bonjour,

J'ai fait plusieurs formulaires avec des champs textes en mettant la colonne de label à gauche et les input à droite et tout fonctionne normalement

Dans le même formulaire, j'ai un souci pour les label de checkbox ou bouton radio car je les regroupe dans la colonne de droite pour une meilleure ergonomie.
Dans ce cas précis mon label de gauche n'est plus vraiment un label mais un descriptif de mon groupe de choix.
Je n'arrive pas à mettre des label dans mon groupe de choix, car cela fait un conflit et casse ma mise en page du au conflit entre les 2 "types" de labels.

Merci de votre aide
a+
Hervé

Un aperçu plus visuel
upload/7439-form-adr.png

un extrait du formulaire :

<form id="formUrl" action="<?php echo $self;?>" method="post">
  <div id="titreForm">Suggestion ajout d'une ... (reprendre intitulé selon utl)</div>
		<div id="corpForm">    
    <fieldset class="checks">
				<legend>Périodicité</legend>
  				<div class="saisTypeRad ">
            <label class="verte" for="comments">Sexe:</label>
            <span class="multiChoix1Ligne">
            <input name="sex" type="radio"><span>Homme</span> <input name="sex" type="radio"><span>Femme</span>
            <input name="sex" type="radio"><span>Homme</span> <input name="sex" type="radio"><span>Femme</span>
            <input name="sex" type="radio"><span>Homme</span> <input name="sex" type="radio"><span>Femme</span>
            <input name="sex" type="radio"><span>Homme</span> <input name="sex" type="radio"><span>Femme</span>         
            </span>
          </div>             
          <p>
            <label>Passion:</label>
            <p class="multiChoixPlusieursLgn"><input name="hobby" type="checkbox"> Tennis            
            <br><input name="hobby" class="threepxfix" type="checkbox"> lire 
            <br><input name="hobby" class="threepxfix" type="checkbox"> Basketball </p>
          </p>   				
			</fieldset>
</form>



/* FORMULAIRE */
p {
	margin: 2px 0;
}

label {
 	background-color: #FFCC66;
	display: block;
	width: 39%; 	/* Les intitulés prennent cette largeur totale du formulaire */
	float: left; 	/* Très important */
	padding-right: 1%;
	text-align: right;
	letter-spacing: 1px;
}

/* Groupement multiligne Boutons choix */
.multiChoixPlusieursLgn {
    background-color: #ffff00;
    float: left; /* Indispensable */
    /* width: 100px; */
    margin: 0;
}

/* RADIO */
.saisTypeRad {
    background-color:F4F4F4;
}
input[type=radio] {
    /* margin-left:100px;     */
    background-color:F4F4F4;
}

checkbox:hover {
	background-color: #ADFF2F;
}
checkbox:focus {
	border: 1px solid #070707;
	background-color: #F4F4F4;
}

Modifié par herveD (15 Aug 2008 - 20:37)
Bonjour,

Un code correct pour cette partie de formulaire serait (de façon schématique):
<hN>Périodicité</hN>

<fieldset>
	<legend>Sexe:</legend>
	<input type="radio" name="sexe" id="sexe1" />
	<label for="sexe1">Homme</label>
	<input type="radio" name="sexe" id="sexe2" />
	<label for="sexe2">Femme</label>
</fieldset>

<fieldset>
	<legend>Passion:</legend>
	<input type="checkbox" name="hobby" id="hobby1" />
	<label for="hobby1">Tennis</label>
	<input type="checkbox" name="hobby" id="hobby2" />
	<label for="hobby2">lire</label>
	<input type="checkbox" name="hobby" id="hobby3" />
	<label for="hobby3">Basketball</label>
</fieldset>

À noter qu'il faudra peut-être l'enrichir d'éléments «génériques» (DIV, P, SPAN) pour les besoins de la mise en page.
Merci de m'avoir répondu.

C'est effectivement une solution mais je pense que dans mon cas cela doit passer plutôt par les CSS.

En effet ce que j'ai montré est un extrait (orienté test) mais en fait ces groupes de choix font déjà partie d'un fieldset avec d'autres champ (select ou input) qui eux ont bien leur label positionné dans la partie gauche. Je ne voudrai donc pas multiplier les fieldset qui ferait perdre le sens du regroupement général
A+
herveD a écrit :
C'est effectivement une solution mais je pense que dans mon cas cela doit passer plutôt par les CSS.

Non, le sens de mon message était le suivant: ton code HTML est erroné à la base, donc commence par corriger le code HTML, puis réattaque la mise en forme CSS à partir de ton nouveau code HTML.

herveD a écrit :
mais en fait ces groupes de choix font déjà partie d'un fieldset avec d'autres champ (select ou input)

Ces fieldset génériques, inutiles, devraient être remplacés par de simples titres de section (cf. le H2 dans mon exemple de code ci-dessus). Si tu veux «dessiner» un regroupement d'une partie du formulaire, tu rajoutera une DIV qui va bien.
Je t'invite à lire ce sujet:
http://forum.alsacreations.com/topic-6-36471-1-Du-bon-usage-de-FIELDSET-et-LEGEND.html
Bonsoir,

Je comprends mieux maintenant que cela recoupe un autre débat.
Est-ce que tu connais des adresses de sites pour m'inspirer Smiley cligne
J'avais de mon côté trouver :
http://www.smashingmagazine.com/2006/11/11/css-based-forms-modern-solutions/
http://www.formassembly.com/form-garden.php?formId=11933&style=/form-builder/css/post-it

J'ai aussi retrouvé le site dont je dois reproduire le modèle et qui bien sûr a le même problème au niveau des labels (il n'en met carrément pas )
http://www.dynamicdrive.com/style/csslibrary/item/css-tableless-form/

a+
Heu... pas de référence particulière à donner. Une fois que tu sais coder un formulaire en HTML, et si tu connais assez bien CSS, tu dois pouvoir réaliser ton formulaire sans inspiration particulière pour le code.

Le problème que tu risques de rencontrer, par contre, c'est que les éléments LEGEND sont très chiants à styler et CSS (et je pèse mes mots). Ce qui les rend pratiquement inutilisable autrement que placés en haut à gauche du FIELDSET. Donc au final tu devras peut-être utiliser zéro FIELDSET et LEGEND, mais plutôt des titres de section.

À tout hasard: http://web.covertprestige.info/test/27-formulaires-sans-tableaux.html
(On notera que l'usage des FIELDSET n'est pas vraiment correct...)
Va t-on finir par lire sur ce forum que les fiedset et les legend sont inutile dans un formulaire et que pour des raisons de rendu graphique, de facilité d'organisation et de structuration il est préférable de mettre des div et des niveaux de titre?

Dans ce cas là on peux virer fieldset et legend des specs non?

EDIT:

Il existe 2 interventions, celle de Laurent-Denis et celle de Quentin.

Florent s'appuie sur celle de Quentin sans prendre en compte celle de Laurent-Denis.

Un utilisateur, un expert utilisateur, au bout du compte, cékoikonfai ?
Modifié par knarf (16 Aug 2008 - 22:31)
knarf a écrit :
Va t-on finir par lire sur ce forum que les fiedset et les legend sont inutile dans un formulaire

Non.

knarf a écrit :
...et que pour des raisons de rendu graphique, de facilité d'organisation et de structuration il est préférable de mettre des div et des niveaux de titre?

Tout se joue sur le sens de «préférable». Il y a des cas où, pour rendre l'information accessible, un fieldset avec legend qui va bien sera utile (lorsque le legend vient préciser un label) voire indispensable (lorsqu'on a plusieurs label identiques dans le formulaire). MAIS, styler les legend c'est un peu la merde. Je sais pas si tu as déjà vu les styles par défaut pour l'élément LEGEND dans Firefox 3? (Utiliser le postionnement flottant, absolu ou relatif est plus ou moins impossible. Et si on y parvient tout de même, à coup de !important, alors le LEGEND se volatilise...) Je n'ai pas vérifié aujourd'hui pour les autres navigateurs, mais de mémoire styler un LEGEND dans IE était très problématique.

Donc une a des éléments HTML utiles voire nécessaires pour l'accessibilité, mais qui dans certains cas seront ingérables côté mise en page. Si ce cas ce présente, on a trois options:
1. passer du temps à essayer malgré tout d'obtenir la bonne mise en page avec les bons éléments HTML (c'est peut-être jouable malgré tout, mais il faut savoir qu'on peut passer des heures à essayer et ne pas trouver de solution satisfaisante au final... donc c'est un investissement à risque);
2. modifier le design pour tenir compte des limitations de LEGEND;
3. ne pas utiliser de LEGEND, et se rabattre sur un hN.

La solution 1 ménage la chèvre et le chou, la 2 privilégie l'accessibilité, et la 3 privilégie le design. Aucune des trois n'est préférable dans l'absolu, mais il y en aura probablement une de préférable pour un projet donné.

knarf a écrit :
Il existe 2 interventions, celle de Laurent-Denis et celle de Quentin.

Florent s'appuie sur celle de Quentin sans prendre en compte celle de Laurent-Denis.

Je pense au contraire bien prendre en compte l'intervention de Laurent.
a écrit :
Le problème que tu risques de rencontrer, par contre, c'est que les éléments LEGEND sont très chiants à styler et CSS (et je pèse mes mots). Ce qui les rend pratiquement inutilisable autrement que placés en haut à gauche du FIELDSET. Donc au final tu devras peut-être utiliser zéro FIELDSET et LEGEND, mais plutôt des titres de section.


Pour moi cette intervention c'est une bombe à retardement si c'est placé entre de mauvaises mains et va complètement à l'encontre de ce que dit Laurent-Denis.

Le "lâcher prise" cher à ce même Laurent-Denis et souvent repris, ce n'est plus tendance ?

Le billet comment-ne-pas-styler-les-elements-de-formulaire à quoi sert-il ?

Au final je ne comprends pas que l'on puisse conseiller (surtout ici) de mettre des titres, et des div pour remplacer des fieldset et des legend dans un formulaire quelquesoit le projet.

Si on en arrive là dans un projet, c'est qu'il y a un os dès le départ non?

Si le projet en question n'a aucune obligation d'accessibilité (RGAA par exemple), c'est la porte ouverte à toutes les fenêtres et l'alibi du design va en arranger plus d'un.

Par contre conseiller de mettre un titre hors formulaire pour remplacer un fieldset et un legend inutile qui peuvent amener à se poser la question de l'imbrication de fieldset comme dans l'exemple que tu as donné là d'accord.
Modifié par knarf (17 Aug 2008 - 06:03)