28172 sujets

CSS et mise en forme, CSS3

Bonjour,

J'ai fait cette boîte avec un titre :
upload/51337-boxwithtit.png
Voilà mon code :
<html>
<head>
	<style type="text/css">
		.title_box {
			display: block;
			border: 1px solid;
			border-radius: 10px;
			border-color: rgb(64, 128, 179);
			background-color: white;
			left: 6px;
			position: relative;
			margin-top: 5px;
			padding: 0
		}
		
		.title_box #h4title {
			position: relative;
			padding: 1px;
			top: -14px;
			margin-left: 1em;
			display: inline;
			background-color: seaShell;
			font-family: Calibri;
			color: rgb(64, 128, 179);
			font-style: italic;
			font-size: 18px;
			border: 1px solid;
			border-radius: 5px;
			border-color: rgb(64, 128, 179);
		}
	</style>

</head>

<body>

	<br>
	<div class="title_box" style="width:200px;">
		<div id="h4title">File type:</div>
		<div class="radio">
			<label><input type="radio" name="optradio" checked="checked" value="word_document"> docx</label>
		</div>
		<div class="radio">
			<label><input type="radio" name="optradio" value="pdf_document"> pdf</label>
		</div>
		<div class="radio">
			<label><input type="radio" name="optradio" value="html_document"> html</label>
		</div>
	</div>

</body>
</html>


J'ai trois questions :

1) Je n'arrive pas à contrôler l'espace entre le titre ("File type") et le premier bouton radio ("docx"). Comment faire ? (je voudrais réduire cet espace).

2) Est-ce que mon CSS est "robuste" ? Je veux dire par là, est-ce que le rendu sera bien le même si je change de navigateur, ou sur un écran de taille différente ?

3) Connaissez-vous des CSS disponibles qui font un truc du même genre ?

Merci pour votre aide.
Bonjour.

Mon conseil est de passer directement à la partie 3) et d'utiliser la balise fieldset

Cela répondra à toutes vos attentes.

Smiley smile
Gilbert67 a écrit :
Bonjour,
J'ai fait cette boîte avec un titre :
upload/51337-boxwithtit.png
Voilà mon code :
&lt;html&gt;
&lt;head&gt;
	&lt;style type="text/css"&gt;
		.title_box {
			display: block;
			border: 1px solid;
			border-radius: 10px;
			border-color: rgb(64, 128, 179);
			background-color: white;
			left: 6px;
			position: relative;
			margin-top: 5px;
			padding: 0
		}
		
		.title_box #h4title {
			position: relative;
			padding: 1px;
			top: -14px;
			margin-left: 1em;
			display: inline;
			background-color: seaShell;
			font-family: Calibri;
			color: rgb(64, 128, 179);
			font-style: italic;
			font-size: 18px;
			border: 1px solid;
			border-radius: 5px;
			border-color: rgb(64, 128, 179);
		}
	&lt;/style&gt;

&lt;/head&gt;

&lt;body&gt;

	&lt;br&gt;
	&lt;div class="title_box" style="width:200px;"&gt;
		&lt;div id="h4title"&gt;File type:&lt;/div&gt;
		&lt;div class="radio"&gt;
			&lt;label&gt;&lt;input type="radio" name="optradio" checked="checked" value="word_document"&gt; docx&lt;/label&gt;
		&lt;/div&gt;
		&lt;div class="radio"&gt;
			&lt;label&gt;&lt;input type="radio" name="optradio" value="pdf_document"&gt; pdf&lt;/label&gt;
		&lt;/div&gt;
		&lt;div class="radio"&gt;
			&lt;label&gt;&lt;input type="radio" name="optradio" value="html_document"&gt; html&lt;/label&gt;
		&lt;/div&gt;
	&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;


J'ai trois questions :

1) Je n'arrive pas à contrôler l'espace entre le titre ("File type") et le premier bouton radio ("docx"). Comment faire ? (je voudrais réduire cet espace).

2) Est-ce que mon CSS est "robuste" ? Je veux dire par là, est-ce que le rendu sera bien le même si je change de navigateur, ou sur un écran de taille différente ?

3) Connaissez-vous des CSS disponibles qui font un truc du même genre ?

Merci pour votre aide.

Voici une possibilité :
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8"/>
	<style type="text/css">
		*
		{
		font-family:inherit;
		font-size:inherit;
		background-color:transparent;
		}
		body
		{
		font-family:Calibri;
		font-size:1em;
		background-color:white;
		}
		fieldset 
		{
		width:90%;
		max-width:40rem;
		margin:0 auto 0.6rem auto;
		padding:0.7rem 1rem;
		border:0.08rem solid rgb(64,128,179);
		border-radius:10px;
		}		
		legend 
		{
		margin-left:0.5rem;
		padding:0.2rem 0.4rem;
		color:rgb(64,128,179);
		font-style:italic;
		font-size:1;
		white-space:nowrap;
		border:0.08rem solid rgb(64,128,179);
		border-radius:5px;
		}
		legend:after
		{
		content:":";
		padding-left:0.3rem;
		}
		fieldset > div
		{
		margin:0 0 0.6rem 0;
		}		
		fieldset > div > label
		{
		padding-left:0.5rem;
		line-height:1.4;
		white-space:nowrap;
		}		
	</style>

</head>
<body>
	<br>
	<fieldset>
		<legend>File type</legend>
		<div class="radio">
			<input type="radio" name="optradio" checked="checked" value="word_document"><label>docx</label>
		</div>
		<div class="radio">
			<input type="radio" name="optradio" value="pdf_document"><label>pdf</label>
		</div>
		<div class="radio">
			<input type="radio" name="optradio" value="html_document"><label>html</label>
		</div>
	</fieldset>

</body>
</html>
Il y a un problème.
Dans mon appli, il y a déjà un css pour legend.
Du coup j'ai fait fieldset legend pour que le css ne s'applique qu'au tag legend à l'intérieur d'un tag fieldset :
fieldset legend {
    margin-left: 0.5rem;
    padding: 0.2rem 0.4rem;
    color: rgb(64, 128, 179);
    font-style: italic;
    font-size: 1;
    white-space: nowrap;
    border: 0.08rem solid rgb(64, 128, 179);
    border-radius: 5px;
}
legend {
    display: block;
    width: 100%;
    padding: 0;
    margin-bottom: 20px;
    font-size: 21px;
    line-height: inherit;
    color: #333;
    border: 0;
    border-bottom: 1px solid #e5e5e5;
}


Mais ça ne marche pas. Le deuxième css est encore pris en compte.

Ce deuxième css pour legend est "automatique", je ne sais pas comment le supprimer (en fait je fais une appli shiny avec R, si vous ne savez pas ce que c'est, ce serait un peu long à expliquer...).

Une idée peut-être ? Une possibilité, mais je ne suis pas sûr du tout, c'est que le deuxième css pour legend s'applique pour les tags legend qui sont à l'intérieur d'un tag form, ce qui est le cas ici.

Je ne sais pas si c'est clair...
Gilbert67 a écrit :
Il y a un problème.
Dans mon appli, il y a déjà un css pour legend.
Du coup j'ai fait fieldset legend pour que le css ne s'applique qu'au tag legend à l'intérieur d'un tag fieldset :
fieldset legend {
    margin-left: 0.5rem;
    padding: 0.2rem 0.4rem;
    color: rgb(64, 128, 179);
    font-style: italic;
    font-size: 1;
    white-space: nowrap;
    border: 0.08rem solid rgb(64, 128, 179);
    border-radius: 5px;
}
legend {
    display: block;
    width: 100%;
    padding: 0;
    margin-bottom: 20px;
    font-size: 21px;
    line-height: inherit;
    color: #333;
    border: 0;
    border-bottom: 1px solid #e5e5e5;
}


Mais ça ne marche pas. Le deuxième css est encore pris en compte.

Ce deuxième css pour legend est "automatique", je ne sais pas comment le supprimer (en fait je fais une appli shiny avec R, si vous ne savez pas ce que c'est, ce serait un peu long à expliquer...).

Une idée peut-être ? Une possibilité, mais je ne suis pas sûr du tout, c'est que le deuxième css pour legend s'applique pour les tags legend qui sont à l'intérieur d'un tag form, ce qui est le cas ici.

Je ne sais pas si c'est clair...

Le deuxième LEGEND vient écraser le premier... par simple application du principe de la cascade.
Par ailleurs, sauf erreur cette balise ne peut être utilisée que comme premier élément d'un FIELDSET (cf. spécifications HTML5) :
W3C a écrit :
Contexts in which this element can be used:
As the first child of a fieldset element.

Si un LEGEND est présent ailleurs dans une balise FORM de la page HTML, c'est probablement inadapté et il conviendrait d'utiliser à la place une autre structure (ex. balise P + texte).
Hmmm... ok, donc là je suis largué.
Je crois donc qu'il me faudrait finalement une solution sans fieldset et legend.
Gilbert67 a écrit :
Hmmm... ok, donc là je suis largué.
Je crois donc qu'il me faudrait finalement une solution sans fieldset et legend.

Pourquoi donc ?
Le tandem FIELDSET / LEGEND fonctionne correctement et correspond bien au besoin.
Bonjour.

Là vous me larguez aussi : fieldset legend est plus spécifique que legend.

Les déclarations de fieldset legend écrasent bien celles de legend si il y a une réécriture de ces déclarations.

Là où il n'y a pas de réécriture, il n'y a pas d'écrasement.

Sinon Sepecat a raison : legend ne s'utilise que dans un fieldset. Distinguer fieldset legend et legend n'a pas de sens... (au passage, M. Sepecat, il y a des déclarations qui sont, a priori, inutiles dans votre code comme
*
	{
	font-family:inherit;
	font-size:inherit;
	background-color:transparent;
	}


Gilbert67, je ne pense pas que les balises soient en cause dans votre... désorientation. Cela concerne plutôt le CSS et de ses subtilités...

Smiley smile
Modifié par Zelena (03 Nov 2016 - 08:37)
Zelena a écrit :
Au passage, M. Sepecat, il y a des déclarations qui sont, a priori, inutiles dans votre code comme
*
	{
	font-family:inherit;
	font-size:inherit;
	background-color:transparent;
	}

Certes... mais par expérience j'ai pris pour habitude de forcer d'entrée de jeu le navigateur à jouer sur ces bases et non pas espérer qu'il soit paramétré par défaut avec ce contexte.
Et encore, dans le cas présent je me suis retenu, car je fixe également toujours par défaut les @margin et @padding à 0 + suppression des bordures, histoire de définir d'entrée les règles du jeu.
Il existe des discussions sans fin quant au fait de savoir s'il faut ou non procéder ainsi.
C'est le choix que j'ai fait et pour l'instant il répond à mes besoins.
Chaque intervenant peut bien entendu faire ce choix, ou procéder autrement. Smiley smile