28111 sujets

CSS et mise en forme, CSS3

Administrateur
Salut,

Dew, timide, m'a exposé une colle mais n'ose pas en parler sur le forum.
Grand coeur que je suis, je vous la livre : comment centrer un <legend> dans un <fieldset> ?

Apparemment ce n'est pas si simple. Il faut soit bidouiller soit utiliser l'attribut obsolète "align" :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Test</title>
<style type="text/css">
body {
   font-family:"Trebuchet MS",Verdana,Arial,Helvetica,Sans-serif;
   font-size:12px;
   background:#789;
   color:#fff;
   padding:3em;
}
legend {
   background:#456;
}
</style>

</head>
<body>

<fieldset>
<legend align="center">arf</legend>
<label>Nom</label> : <input type="text" />
</fieldset>

</body>
</html> 
align="center" sera invalide : cet attribut n'admet, pour legend, que les valeurs top, bottom, left et right...

Ma contribution : centrage dans IE et Opera :

legend {
	 margin: auto;
	 width: 1%;
	 display: block;
}

Modifié par Laurent Denis (10 Aug 2005 - 12:17)
Rien à voir avec le problème (quoique ? nan ...)
<html xmlns="http://www.w3.org/1999/xhtml"" xml:lang="fr">

T'as un guillemet de trop pour fermer xmlns
Modifié par Olivier (10 Aug 2005 - 12:00)
Super Laurent… Ca marche même sous FF mac, Safari et IE/mac. Seul bémol, le bord supérieur du fieldset est masqué par le width=50% (sauf sous FF).
Modifié par zzzazzz (10 Aug 2005 - 12:15)
Administrateur
Eh bien voilà qui est rondement mené.

A quand un concours "qui veux défier Laurent" ? Smiley lol Smiley biggol
Ouais... si je faisais un peu moins de fôtes de typo, ce serait quand même mieux.

Donc, code corrigé : c'est width: 1%; (pour IE), et pas 50%... (la valeur ne sert pas à centrer : il s'agit juste de donner le statut de haslayout au <legend>, en fait)

En revanche, Firefox Windows est têtu Smiley cligne
Administrateur
j'avais aussi trouvé quelque chose de peu esthétique niveau code, en remplacement :

.legend {
	position:relative;
	top:-1em;
	text-align:center;
	display:block;
	width:70px;
	left:50%;
	margin-left:-35px;
}


avec
<fieldset>
<p class="legend">Legend</p>
</fieldset>


mais c'est le mal Smiley cligne

Merci beaucoup Laurent pour cette astuce.
Modifié par dew (10 Aug 2005 - 12:23)
Laurent Denis a écrit :
il s'agit juste de donner le statut de haslayout au <legend>


Smiley eek Qu'est-ce que c'est le statut haslayout ?
Laurent Denis a écrit :
align="center" sera invalide :
cet attribut n'admet, pour legend, que les valeurs top, bottom, left et right...
La propriété align="Bottom" est sans effet... Smiley decu
Et ce, tant avec IE 6 qu'avec Firefox 2.0
Modérateur
bonsoir ,
j'amene aussi une petite contribution au probleme.

tout d'abord j'ai replacé le fieldset dans un formulaire , puis j'ai fait usage des display:table et compagnie pour positionné le legend au centre dans ff , qui passe aussi sur la version d'opera que j'ai .

une autre piste aurait peut-etre pus etre le content:''; pour effacer le contenu du legend , coupler a un legend:after en recreant une balise virtuelle de toutes pieces. (pas tester , mais il ya paeut-etre quelquechose de ce coté la aussi ).
<edit> aussi choisir un doctype adequat </>

Pour IE , j'ai regarder vers le position relatif et absolu pour le fun .

http://gcyrillus.free.fr/essai/legend-au-centre.html

le code :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Test</title>
<style type="text/css">
body {
   font-family:"Trebuchet MS",Verdana,Arial,Helvetica,Sans-serif;
   font-size:12px;
   background:#789;
   color:#fff;
   padding:3em;
}
form {
/* width:100%; accesoire inneficace dans firefoxe , se repporter sur le fieldset */
display:table;
}

fieldset {
display:table-caption;/* moins contraignant que le table-cell dans ce cas */
width:80%;/* quasi obligatoire de donnée une largeur */
margin:auto;
}

legend {
display:table;/* equivaut grosso-modo au inline-block en resultat */
background:#456;
margin:-1em auto 0 ;/* on le remonte vu qu'il ne se comporte plus comme un legend */
}


</style>
 <!--[if IE]>
<style type="text/css">
/*  laurent denis */

/*

legend {
 margin: auto;
 width: 1%;
 display: block;
}
*/
/* pour accompagner la soluce IE  de laurent denis  sans y toucher  */
/*
legend {
margin-top:0;
}*/

/* ma bidouille   [smile]  relatif/absolu */

fieldset {
position:relative;
width:100%;
padding-top:1em;
}

legend {
position:absolute;
right:50%;
margin-left:-50%;
}
</style>
<![endif]--> 
</head>
<body>
<form>
<fieldset>
<legend >arf</legend>
<label>Nom</label> : <input type="text" />
</fieldset>
</form>
</body>
</html> 


l'usage du display:table; necessite une largeur pour que le formulaire ne s'ecrase pas sur lui même , dans firefoxe , la largeur est a donné au fieldset mis en display:table-caption; , les autres je ne sais pas si il est pris dans la balise <form> ou si le comportement est identique a ff.
D'ailleurs , je n'ai aucune idée du resultat chez les utilisateur mac ....

GC

ouverture d'un commentaire omise , corrigé .
Modifié par gcyrillus (02 Nov 2006 - 08:05)
Bonjour, je revient sur ce sujet interessant.
J'ai essayé les techniques proposées ici mais rien ne fonctionne chez moi Smiley decu
Une autre piste?
Merci
Modérateur
bonjour/bonsoir

je retombe sur ce sujet par hasard .

Sur quel navigateur cela ne fonctionne pas ?

doctype ou pas ?

Est ce la page test ou ce que tu as essayer de faire avec les differentes pistes proposées ici qui ne fonctionne pas ?

Cela vaut-il le coup Smiley smile ?
Bonjour,
J'aimerais pouvoir réaliser ce centrage sous firefox windows de façon propre.

Est-ce que quelqu'un aurait découvert une nouvelle façon de le faire depuis l'ouverture de ce topic ?

Merci d'avance
C'est le même combat que les formulaires.
Rien ne sert de les skiner, dès qu'on à un select on ne peut rien faire de propre Smiley cligne
Modérateur
Sinon , pourquoi ne pas se contenter d'une balise de titre et se la jouer 'class' et 'style' Smiley cligne ?