28172 sujets

CSS et mise en forme, CSS3

Bonjour.

Adepte de la mauvaise utilisation du float, je reprends le droit chemin et j'utilise désormais inline-block pour placer deux blocks côte à cote.

Par contre j'aimerais que l'on me confirme ceci svp:

- Si dans mon HTML je ne mets pas de <p> à l'intérieur de la balise <aside> et dans le CSS je mets display: inline-block pour les balises <div id="content"> et <aside> les blocks sont cote à cote.
Si je ne mets inline-block que pour le block content, le block aside se positionne en bas et non pas a droite de content, alors que content doit se comporter en inline normalement.

- Si je rajoute une balise de type block, ici <p>, alors le block <p> se replace dans le flux principal et le block <aside> se retrouve alors a droite et en dessous du block <content>, et ceci malgré les deux inline-block.

Voila donc je suppose que ce comportement est normal, et pour y remédier je dois mettre le block <p> en position: absolute; (d'aprés vos tuto, il vaut mieux éviter d'utiliser position).

Suis-je obligé de procéder de la sorte, ou y à t-il un autre moyen?

Merci pour votre aide.

Code HTML 5 :


<!Doctype html>

<html lang="fr">

	<head>

		<meta charset="utf-8">
		<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
		<title><?php echo $title_page ?></title>

		<link rel="stylesheet" media="all" href="../site_css/style_all.css">
        </head>

	<body>

	         <div id="wrapper">
                        
                        <div id="content">

                        </div> 

			<aside>
				<p>Bonjour</p>
			</aside>

                        </div>

	          </div> 

	</body>

</html>


Code CCS 3:



/* remise a zero pour tout les navigateur quel qu'il soit */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td
{
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	font-weight: inherit;
	font-style: inherit;
	font-size: 100%;
	font-family: inherit;
	vertical-align: baseline;
}

/* lien */
a
{
  text-decoration: none;
}

/* remember to define focus styles! */
:focus
{
	outline: 0;
}
body
{
	line-height: 1;
	color: black;
	background: white;
}
ol, ul
{
	list-style: none;
}
/* tables still need 'cellspacing="0"' in the markup */
table
{
	border-collapse: separate;
	border-spacing: 0;
}
caption, th, td
{
	text-align: left;
	font-weight: normal;
}
blockquote:before, blockquote:after,
q:before, q:after
{
	content: "";
}
blockquote, q
{
	quotes: "" "";
}

/* --------------------------- FIN REMISE A ZERO --------------------------- */

body
{
	margin: auto;
	background: yellow;
}

/* Blocks */
header, nav, footer, figure, section, article, aside
{
  display: block;
}

/* block wrapper */
#wrapper
{
	width: 980px;
	margin: auto;
	background: blue;
}

/* --------------------------- block content --------------------------------- */
#content
{
	display: inline-block;
	width: 820px;
	height: 500px;
	background: green;
}

/* -------------------------- aside ------------------------------------------ */

aside
{
	display: inline-block;
	width: 100px;
	height: 500px;
	background: white;
}

aside p
{
	position: absolute;
}


Modifié par Htb (29 Apr 2010 - 13:09)
Désolé pas évident à comprendre, je reprends.

Les nouvelles balises aside, article, header, sont effectivement block par defaut même si je ne le faisais pas dans mon reset, mais c'est pour être sur qu'il soit block pour tous les navigateurs Smiley biggrin .

Pour schématiser:
Largeur:
wrapper: 1000px; content: 700px; aside: 250px (pour etre sur qu'il rentre à coté).

1. Pour mettre cote à cote je suis donc obligé de mettre la propriété inline-block pour le block <content> et <aside>, et la pas de souci.
_______
|___|__|

2. Maintenant si dans le block <aside> je rajoute un élément, ici un <p>Bonjour</p>, alors le block <aside> descend sous le block <content> mais à 700px du bord gauche du block <content>, désolé pour le sale dessin.
____
|___|___
.......|__|

3. Si je veux que le block <aside> avec le block <p> inclus à l'intérieur reste a la même hauteur et à droite du block <content> (cas 1), il faut que j'assigne la propriété position: absolute au block <p>, sinon ca ne marche pas.

Donc je suppose que le block <p> réintègre le flux normal du document HTML, mais comme il est déconseillé d'utiliser les propriétés absolute et float, j'utilise les propriétés inline-block.

Merci encore Smiley biggrin
Modifié par Htb (29 Apr 2010 - 19:10)
Htb a écrit :
Désolé pas évident à comprendre, je reprends.

Pour schématiser:
Largeur:
wrapper: 1000px; content: 700px; aside: 250px (pour etre sur qu'il rentre à coté).

1. Pour mettre cote à cote je suis donc obligé de mettre la propriété inline-block pour le block <content> et <aside>, et la pas de souci.
_______
|___|__|

2. Maintenant si dans le block <aside> je rajoute un élément, ici un <p>Bonjour</p>, alors le block <aside> descend sous le block <content> mais à 700px du bord gauche du block <content>, désolé pour le sale dessin.
____
|___|___
.......|__|

3. Si je veux que le block <aside> avec le block <p> inclus à l'intérieur reste a la même hauteur et à droite du block <content> (cas 1), il faut que j'assigne la propriété position: absolute au block <p>, sinon ca ne marche pas.

Donc je suppose que le block <p> réintègre le flux normal du document HTML, mais comme il est déconseillé d'utiliser les propriétés absolute et float, j'utilise les propriétés inline-block.

Merci encore Smiley biggrin
bonjour,

sur quel navigateur observe tu ce défaut ?

Sinon , il te faut les aligner l'un a l'autre (en vertical-align:top) par exemple et ne pas redefinir leur style en block par defaut . (trop de reset tu le reset Smiley smile ) .

Chez IE , un petit js pour qu'il accepte ces balise html5 et le tour est joué , le css inline block sera appliqué sans aucun soucis (ton reset en block oblige a jouer de commentaire conditionnel pour certaines version de IE , donc inutile de compliqué Smiley smile ).

et quand a user de balise html5 #content pourrait etre article et #wrapper section Smiley smile , enfin juste une idée .

++

GC
Bonjour.

Je fait mes tests sur Firefox/3.6.3

Effectivement, il fallait utiliser la propriété vertical align: top; pour tout aligner à partir du haut de <content>.

Oui pas forcement nécessaire d'initialiser tout a display:block; Smiley biggrin , donc supprimer.

Oui ca à l'air d'être plus judicieux de faire <section id="wrapper"> et <article id="content"> pour être en adéquation avec la syntaxe html5, mais je n'en suis qu'au début et pas de section article risque d'être imbriqué.
Alors comme wrapper et content sont juste des blocks de positionnement, je ne sais pas trop si c'est pertinent.
Edit: en cherchant un peu voici la spec:
http://dev.w3.org/html5/spec/Overview.html#sections

Comme je débute, je m'aide du site perso de Raphaël Smiley cligne , et des tutos alsacréations.

Pour la compatibilité IE, il y a quelques soucis, mais je préfère créer quelque chose de solide avec firefox pour le moment et faire des retouches pour IE ensuite.

En tout cas merci pour ton aide, çà me permet de continuer proprement Smiley ravi .
Modifié par Htb (30 Apr 2010 - 02:28)