28172 sujets

CSS et mise en forme, CSS3

Bonjour,

Premier post sur ce forum, mais je ne suis pas un nouveau venu par ici pour autant, puisque je suis souvent arrivé là (ou sur un article du site) pour comprendre / résoudre mes problèmes lorsque je les posais à Google Smiley smile

Je suis en train de réaliser une petite popup, anciennement construite à partir de plein de <table> que j'ai décidé d'essayer d'éradiquer.
Comme vous allez le voir, le contenu de la popup est assez maigre, je l'ai représenté ci-dessous (avec quelques précisions sur les contraintes non explicites) :

upload/44536-popupmain.png

Cibles :
- IE 6 & 7 mais juste pour que ce soit correct (pas besoin d'alignement parfait)
- Navigateurs plus récents (IE8+, Chrome, Firefox 3+, Safari)

Au niveau HTML, j'ai essayé de ne pas surcharger de <div> inutiles et de me contenter d'une structure juste nécessaire à la description du contenu.

Au niveau CSS, j'ai fait ce que j'ai pu, mais le passage de la théorie (les tutos, articles) à la pratique m'est compliqué. Autant j'arrive bien à comprendre ce que je lis, autant l'adapter...

Voici donc le code HTML et les CSS associés en action :

http://jsfiddle.net/xgSC4/2/

(Je crois que vous pouvez modifier le code et les css, faire un save, et cela générera une nouvelle adresse consultable)

Et voici le code (je le mets ici aussi en plus de jsfiddle.net car on est sûr qu'il sera conservé, alors que jsfiddle.net fait peut être du nettoyage, à l'image d'un imageshack pour les images) :


<body>
	<div id="popup_window">
		<div id="popup_content">
			<div id="header">
				<h1>Un titre pas trop long</h1>
				<img width="16px" height="16px" src="img_16_16.gif">
				<div id="headerLinks">
					<a href="#">Lien 1</a>
					<a href="#">Lien 2</a>
				</div>
			</div>
			<hr />
			<div id="content_1">
				<div id="actions">
					<span>Un champ text : </span>
					<input type="text" width="60px">
					<a href="#">Valider</a>
					<img width="16px" height="16px" src="img_2_16_16.gif">
				</div>
				<div id="infos">
					<span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus sed dui urna, pharetra consequat est. Donec tincidunt nunc sed eim inm fauc<span><br/>
					<span>Integer cursus mi nec metus varius a eleifend ipsum tincidunt. Sed magna metus, suscipit vitae mollis non, consequat ut ligula. Aenean<span>
				</div>
			</div>
		</div>
	</div>
</body>



body {
    font-family: verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
    color: #48575F;
}

img {
	background-color: red; /* Juste pour voir les images dont la source est inaccessible */
}

a {
    color: #48575F;
    cursor: pointer;
    font-family: verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
    font-weight: bold;
    text-decoration: none;
}

/* Simule le contour de la fenêtre de la popup, plus simple pour voir le résultat dans un onglet */
#popup_window {
	width: 500px;
	height: 150px;
	border: solid 1px;
}

/* Le contenu de la fenêtre, correspondant au body dans "la réalité" */
#popup_content {
	margin: 5px;
	height: 100%;
}

#header {
	position: relative; /* Juste pour mon position: absolute de l'image contenue */
}

h1 {
	display: inline;
	color: #387EB6;
    font-size: 15px;
    font-weight: bold;
}

#header img {
	position: absolute;
	left: 50%; /* Tentative de centrage, mais ça n'est pas parfait et je ne sais pas trop pourquoi */
	right: 50%;
}

#headerLinks {
	float: right; /* Sous IE6 (et peut être 7), le cale à droite... mais à la ligne ! */
}

hr { /* Pour séparer le header du contenu */
	border: 0;
	margin: 2px 0;
	visibility: hidden;
}

#content_1 {
	padding: 5px;
    border-width: 0px;
    border-radius: 10px;
    -moz-border-radius: 10px;
    -webkit-border-radius: 10px;
    background: rgb(237,238,240); /* fond gris */
}

#infos {
	text-align: center;
}



Mes problèmes principaux:
- Je n'arrive pas à gérer mon alignement vertical du header (en centré, ou aligné en bas, j'aimerais pouvoir faire les deux au besoin)
- Mon fond gris de la partie "content" ne s'étend pas jusqu'en bas de la fenêtre
- Pour la zone "action", idem, je ne sais pas trop comment gérer le centrage vertical
- Enfin, sous IE6 (et peut être d'autres ?) les "headerLinks" flottant à droite... passent à la ligne.

Sinon, j'aimerais bien également avoir une critique de ma structure HTML.
Certaines balises auraient-elle été plus adaptées d'après vous ?

Merci d'avance pour vos commentaires et votre aide !
Modifié par ikao (12 May 2012 - 17:31)
Smiley bawling
J'ai un peu de mal à avancer sur le sujet, donc si quelqu'un a une idée, je suis vraiment preneur !
Bonsoir ikao,

voici quelques améliorations selon tes recommandations.

<!doctype html>
<html>
<head>
<title></title>
<style>
body {
    font-family				: verdana, Arial, Helvetica, sans-serif;
    font-size				: 11px;
    color					: #48575F;
}

#popup {
	background-color		: white;
	width					: 500px;
	padding					: 2px;
	border					: 1px solid black;
}

/*=================*/
/*     En-tête     */
/*=================*/

#header {
	margin-bottom			: 10px;
}

#header span {
	float					: left;
}

#header div {
	float					: right;

}

#header img {
	display					: block;
	margin					: 0 auto;
}

/*===============*/
/*     Corps     */
/*===============*/

#content {
	clear					: both;

    background				: rgb(237,238,240); /* fond gris */
	padding					: 5px;

    border-width			: 0;
    border-radius			: 10px;
    -moz-border-radius		: 10px;
    -webkit-border-radius	: 10px;
}

#content form {
	display					: inline-block;
}

#content div {
	text-align				: center;
}
</style>
</head>

<body>
<div id="popup">
	<div id="header">
		<span>Un titre pas trop long</span>
		<div>
			<a href="#">Lien 1</a>
			<a href="#">Lien 2</a>
		</div>
		<img width="16px" height="16px" src="img_16_16.gif">
	</div>

	<div id="content">
		<form>
			<label>Un champs text :</label>
			<input type="text"   maxlength="11" size="11" />
			<input type="submit" value="valider" />
		</form>

		<img width="16px" height="16px" src="img_2_16_16.gif" />

		<div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus sed dui urna, pharetra consequat est. Donec tincidunt nunc sed eim inm fauc</div>
		<div>Integer cursus mi nec metus varius a eleifend ipsum tincidunt. Sed magna metus, suscipit vitae mollis non, consequat ut ligula. Aenean</div>
	</div>
</div>
</body>
</html>


@+
ginger4957 a écrit :
Salut,

J'ai fait quelques modifs dans ton code, pas grand chose, c'est ça que tu voulais comme rendu ? http://jsfiddle.net/xgSC4/7/


Merci Ginger d'avoir ouvert le bal des réponses, ça me fait plaisir Smiley biggthumpup

En ce qui concerne ta solution qui - visuellement - correspond à mes attentes par rapport à l'exemple que j'ai donné, voici mes critiques :

- Le petit carré rouge du header n'est pas centré horizontalement (son bord gauche est centré, pas son centre Smiley decu )
- Son centrage vertical (ainsi que celui des liens) se base sur l'état actuel des choses (via un margin). En augmentant le "font-size" du titre, l'alignement vertical tombe à l'eau (il faut modifier le margin). Je recherche une solution "auto-adaptative"
- La zone grisée ne va pas réellement tout en bas, puisqu'elle a une taille de 70%. Si la taille de mon bloc principal augmente considérablement, les 70% s'avèrent insuffisants et une grosse marge blanche apparaît. Encore une fois, j'essaye de trouver une solution "auto-adaptative" Smiley decu

Désolé de te répondre que ça ne me convient pas et de le critiquer comme ça, mais c'est pour que mon besoin soit plus clairs au cas où d'autres personnes veuillent se pencher sur la question. Smiley sweatdrop

Merci beaucoup d'avoir pris le temps de me répondre en tous cas ! Smiley jap
Artemus24 a écrit :
Bonsoir ikao,

voici quelques améliorations selon tes recommandations.

...

@+


Bonjour Artemus24, et merci d'avoir pris le temps de me répondre !

Les remarques que j'ai remonté à Ginger, s'appliquent plus ou moins à toi aussi malheureusement Smiley decu

Mais peut être que ce que je souhaite n'a pas vraiment de solution ?
Modifié par ikao (12 May 2012 - 17:30)
Bonjour ikao,

une solution auto-adaptative n'existe pas vraiment. En général, les sites sont plutôt statiques.
Mais ce que je n'arrive pas bien à comprendre dans ce que tu nous demandes : est-ce un exercice ou un travail ?

En plus, vu la rigidité de ce que tu nous demandes, je ne comprends pas pourquoi ces solutions ne te conviennent pas ? Je ne parle pas de tes remarques mais du pourquoi cela ne te convient pas.

Il y a une partie variable dans tin exposé que je n'arrive pas bien à comprendre.

Cordialement.
Artémus24.
@+
Ca n'est ni un exercice, ni un travail Smiley smile

J'ai juste besoin pour un site perso de créer une page (popup) qui contient cela, et je m'impose tout seul ces contraintes.

L'important pour moi est d'essayer d'avoir quelque chose qui fonctionne sous tous les navigateurs un tant soient peu utilisés, et de "beau" sur les derniers.
De plus, si l'envie me prend de modifier la taille de tel ou tel titre, tel ou tel type de texte, je souhaiterais ne pas avoir à retoucher à tout mon site, d'où le côté auto-adaptatif : pas de centrage vertical à coups de X pixels car le titre en fait Y donc Smiley ohwell

Si je ne visais que les navigateurs récents, j'aurais des display: table / table-cell pour m'aider (entre autres), mais j'essaye d'être compatible avec le plus grand nombre Smiley sweatdrop
Pour l'histoire du titre, je suggère que tu récupères la taille de celui-ci en javascript par exemple afin de définir le margin, comme ça ça s'adaptera dans toute situation.

a écrit :
- La zone grisée ne va pas réellement tout en bas, puisqu'elle a une taille de 70%. Si la taille de mon bloc principal augmente considérablement, les 70% s'avèrent insuffisants et une grosse marge blanche apparaît. Encore une fois, j'essaye de trouver une solution "auto-adaptative"


--> idem, il faudrait récupérer en js la taille de ta div conteneur afin de définir en pourcentage la taille de ta zone grisée (à tester)
Modifié par ginger4957 (14 May 2012 - 12:18)
Bonjour à toutes et à tous,

ne considérez-vous pas que pour un léger problème de cadrage, vous allez construire une usine à gaz ?

J'ai déjà étudier deux problèmes de ce genre :

1) le centrage d'une image dans un bloc conteneur.
2) le cadrage d'un ensemble de blocs dont la taille est variable (width, height, margin & padding) dans un bloc conteneur.

C'est lourd à faire mais ça marche !

Je comprends votre problématique, mais n'y aurait-il pas une solution moins compliquée en HTML et CSS uniquement ?

Autrement dit faire un compromis entre une forme simplifié de ta page WEB et la futur maintenance ? Je pense qu'il n'est pas bon de vouloir tout résoudre en même temps.

@+
Bonjour,

La solution JavaScript marche très certainement, mais effectivement, je cherchais un moyen full HTML/CSS Smiley smile

Tant pis pour le côté dynamique, je vais me mettre quelques valeurs statiques et on verra bien.

Voire même laisser tomber les vieux navigateurs si besoin...


Je marque le sujet comme résolu. Merci à vous deux !