28173 sujets

CSS et mise en forme, CSS3

Bonjour,

étant novice en la matière j'aurais besoin d'aide concernant l'ajustement automatique en css de mon boc news. C'est pas très clair je pense Smiley ohwell En gros je sais que mon bloc "nexs" doit être découpé en 3 parties : le haut / le bas et une partie du contenu ( 20px on va dire ). Et c'est le contenu ou les news vont s'ecrirent.

Donc en faite j'aimerais savoir comment ces 20px "contenu" peuvent s'auto ajuster au texte que j'ecrirais dedans ?

J'espère vraiment mettre fait comprendre et n'hésitez pas à me poser des questions.

Le site en question est celui-ci.

http://charles.bettle.free.fr/site.html

Merci.
C'est peut-être moi qui ait du mal ce soir, mais je ne comprends pas ta question.
Au passage, ta page présente d'importantes lacunes de conception, dont:
• un nombre important d'erreurs de validité de code XHTML
• une perte d'information totale dans le cas d'images désactivées
• un menu non disponible sans javascript actif
• un plugin Flash indispensable sous peine d'être privé… d'à peu près tout.
Bonjour,

Je diagnostique un abus caractérisé de positionnement absolu, dû sans doute à une méconnaissance maligne du positionnement CSS.

En termes plus compréhensible: ta «boite» de news est dessinée à partir d'une foultitude de divs positionnées en absolu par rapport aux limites de div#Tableau_01 (plus proche ancêtre positionné). Tu n'arriveras à rien de la sorte.

En fait, pour dessiner cette boite destinée à accueil un contenu, tu aurais besoin du code HTML suivant:
<div id="news">
	<h2><img src="..." alt="News" /></h2> <!-- h2 ou h1 ou h3 suivant comment on structure la page... -->

	<!-- Ici tout le contenu du bloc de news -->
</div>
Et voilà, c'est à peu près tout.

À la rigueur, pour simplifier un peu l'intégration on pourra faire ceci:
<div id="news">
	<h2><img src="..." alt="News" /></h2> <!-- h2 ou h1 ou h3 suivant comment on structure la page... -->
	<div class="content">
		<!-- Ici tout le contenu du bloc de news -->
	</div><!-- .content -->
</div><!-- #news -->

Ça permettra de faire quelque chose du genre:
div#news {
	width: 500px;
}
div#news h2 {
	margin: 0;
	padding: 15px 5px 0 40px;
	background: black url(image_de_fond_avec_haut_blanc_et_bas_noir_et_stylo_a_gauche.png) no-repeat left top;
	color: #494;
}
div#news div.content {
	margin: 0;
	padding: 5px 10px;
	border: solid 4px black;
	background: white;
	color: black;
}

Et voilà...
Très bien je vais faire ceci. Mon découpage du bloc news sera donc :

news_haut
news_bas
news_interieur


Donc en gros ce code que vous m'avez ecrit permettra au "interieur" de s'ajuster aux nombres de lignes étant dedans ?
the_pills a écrit :
Très bien je vais faire ceci. Mon découpage du bloc news sera donc :

news_haut
news_bas
news_interieur

Pourquoi faire un découpage différent de celui que je propose et qui marche?
Ça n'est bien sûr pas impossible et il y a toujours plusieurs solutions d'intégration, mais ça risque de te compliquer un peu la tâche.

the_pills a écrit :
Donc en gros ce code que vous m'avez ecrit permettra au "interieur" de s'ajuster aux nombres de lignes étant dedans ?

Non, le code que je propose sert à dessiner la boite, avec des bordures et une couleur et image de fond. Ensuite, le bloc div.content s'étendra en hauteur en fonction de son contenu, vu qu'on n'a pas commis l'erreur de figer sa hauteur (avec un height par exemple).

L'extensibilité en hauteur est finalement un point assez trivial: il suffit de ne pas la contrarier, et à l'occasion de contenir le dépassement d'un flottant, et ça marche tout seul.
Et bien en faite je désirais faire ainsi au cas ou je changerais le design du bloc news. Cela me permettrait de savoir placer et decouper n'importe quel bloc. Je viens de refaire la découpe du bloc. Voila ce que donne le HTML :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>akolite</title>
        <link rel="stylesheet" type="text/css" href="style_site.css" />
        <script language="javascript">AC_FL_RunContent = 0;</script><script src="AC_RunActiveContent.js" language="javascript"></script>
        <script src="js/bbcode.js" language="jscript" type="text/javascript"></script>
        <script type="text/javascript" src="flashobject.js"></script>
        <script type="text/javascript" src="adjustmenu.js"></script>
	</head>

<BODY BGCOLOR="#ffffff" LINK="#0033cc" VLINK="#800080" ALINK="#ff0000">



<div id="Tableau_01">  

<script language="javascript">
	if (AC_FL_RunContent == 0) {
		alert("This page requires AC_RunActiveContent.js.");
	} else {
		AC_FL_RunContent(
			'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',
			'width', '1000',
			'height', '112',
			'src', 'header', 
			'quality', 'high',
			'pluginspage', 'http://www.macromedia.com/go/getflashplayer',
			'align', 'middle',
			'play', 'true',
			'loop', 'false',
			'scale', 'showall',
			'wmode', 'window',
			'devicefont', 'false',
			'id', 'Untitled-1',
			'bgcolor', '#ffffff',
			'name', 'header',
			'menu', 'true',
			'allowFullScreen', 'false',
			'allowScriptAccess','sameDomain',
			'movie', 'header',
			'salign', ''
			); //end AC code
	}
</script>
<noscript>
	<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="550" height="400" id="Untitled-1" align="middle">
	<param name="allowScriptAccess" value="sameDomain" />
	<param name="allowFullScreen" value="false" />
	<param name="movie" value="header.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />	<embed src="header.swf" quality="high" bgcolor="#ffffff" width="1000" height="112" name="header.swf" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
	</object>
</noscript>

<Body onload="AdjustMenu('colorarrow','false',0,0)" onresize="AdjustMenu('colorarrow','false',0,0)">

<div id="colorarrow_id" >
    </div>
<script type="text/javascript">
var fo = new FlashObject("test.swf","colorarrow","160","287","6","#000000");
    fo.addParam("menu","false");
    fo.addParam("quality","best");
    fo.addParam("scale","noscale");
    fo.addParam("salign","LT");
    fo.addParam("wmode", "transparent");
    fo.write("colorarrow_id");
document.getElementById('colorarrow').style.width="160px";
document.getElementById('colorarrow').style.position="relative";
document.getElementById('colorarrow').style.zIndex="10"
</script>

    <div id="barre_black_">
		<img id="barre_black" src="images/barre_black.png" width="1000" height="24" alt="" />
	</div>
	<div id="news_haut_">
		<img id="news_haut" src="images/news_haut.png" width="575" height="42" alt="" />
	</div>
	<div id="news_content_">
		<img id="news_content" src="images/news_content.png" width="575" height="21" alt="" />
	</div>
	<div id="news_bas_">
		<img id="news_bas" src="images/news_bas.png" width="575" height="64" alt="" />
	</div>
	<div id="fleche_left_">
		<a href="http://charles.bettle.free.fr/site.html" class="image"><img id="ifleche_left" src="images/fleche_left.png" width="73" height="35" alt="" /></a>
	</div>
	<div id="fleche_right_">
		<a href="http://charles.bettle.free.fr/site.html" class="image"><img id="fleche_right" src="images/fleche_right.png" width="75" height="32" alt="" /></a>
	</div>
  
</div>




<!-- End ImageReady Slices -->
</body>
</html>


Et voila le CSS :

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<!-- ImageReady Styles -->
<style type="text/css">
<!--

/*- Page Structure */

html { /* Force Vertical Scrollbar */
	/* IE */
	overflow-y: scroll; 
	/* Moz */
	height: 100%;
	margin-bottom: 0.1em;
}

* {
	padding: 0;
	margin: 0;
	}

img {
	border: 0;
	}

body {
	font: 62.5% 'Lucida Grande', Verdana, Arial, Sans-Serif; /* Resets 1em to 10px */
	color: #444;
	background: #ffffff;
	text-align: center;
	margin: 0 0 30px;
	}


a.image img
{  border:0; }


#Tableau_01 {
height:1000px;
margin:auto;
position:relative;
width:1000px;
text-align: left; 
}


#colorarrow_id {
	position:relative;
	left:0px;
	top:100px;

}

#barre_black_ {
	position:absolute;
	left:0px;
	top:110px;
	width:1000px;
	height:24px;
}
#news_haut_ {
	position:absolute;
	left:305px;
	top:202px;
	width:575px;
	height:42px;
}

#news_content_ {
	position:absolute;
	left:305px;
	top:244px;
	width:575px;

}

#news_bas_ {
	position:absolute;
	left:305px;
	top:265px;
	width:575px;
	height:64px;
}

#fleche_left_ {
	position:absolute;
	left:310px;
	top:275px;
	width:73px;
	height:35px;
}

#fleche_right_ {
	position:absolute;
	left:800px;
	top:275px;
	width:75px;
	height:32px;
}

-->
</style>
<!-- End ImageReady Styles -->


Donc en faite la découpe est correct la nan ? Mais comment faire en sorte d'écrire dans le "news_content" et qu'il s'ajuste automatiquement aux nombres de lignes et que le "news_bas" et les fleches s'aligne également à la taille de celui-ci ?

A oui je voulais savoir aussi pourquoi il y avait trop de "absolute" ?

Merci pour l'aide.
Modifié par the_pills (20 Jan 2008 - 14:16)
the_pills a écrit :
Donc en faite la découpe est correct la nan ?

Non, ça vaut pas tripette, désolé.

D'une, tu découpes des images que tu places dans le code HTML, alors que sauf ponctuellement pour des images qui portent une information tu devrais plutôt avoir des images de fond en CSS.

De deux, tu positionnes tout en absolu, ce qui est une erreur de débutant plutôt courante (surtout quand on a oublié de lire les tutoriels qui vont bien sur le positionnement CSS). Il ne faut utiliser le positionnement absolu que si on maitrise ses conséquences, ce qui n'est jamais le cas quand on débute. Smiley cligne

the_pills a écrit :
A oui je voulais savoir aussi pourquoi il y avait trop de "absolute" ?

Un élément positionné en absolu sera figé à sa place (soit celle qu'il prend naturellement d'après le flux HTML et l'emplacement de son conteneur, soit celle qu'on lui attribue via les propriétés top, left, right et bottom et qui dépendra alors des limites de son plus proche ancêtre positionné). De plus, l'élément positionné en absolu sera ignoré par ses éléments frères, parent, ancêtres, cousins, etc. (donc tous sauf ses propres enfants et descendants).

La conséquence, c'est que le positionnement absolu d'un élément A alors que d'autres éléments doivent tenir compte de cet élément A (de sa hauteur, par exemple) pour se positionner... eh bien, c'est une bêtise.

Bref, il va falloir tout refaire. Par exemple (désolé d'insister...) en partant du code que j'ai proposé, mais en utilisant une image de fond sur div.content ou même sur div#news plutôt qu'une bordure (ce qui laisse un peu de souplesse pour d'autre designs de boites).

Mais avant ça, il faudrait revoir les bases, car là tu risques de t'y casser les dents. Donc, pour les bases en question:

- Comment positionner les éléments en CSS ?
- Initiation au positionnement CSS sur Openweb :
1. flux et position relative
2. position float
3. position absolue et fixe
- penser à réviser (ou apprendre) aussi l'utilisation de la propriété background, de background-image et background-position notamment.

Et un exemple de boite décorée en CSS:
- http://web.covertprestige.info/test/05-boite-avec-bordures-en-html-et-css.html

Voilà, du boulot (et de l'autoformation) en perspective avant de pouvoir faire les choses un peu correctement. Smiley smile
(Bien entendu, l'alternative consiste à confier l'intégration à quelqu'un qu'y maitrise déjà le sujet.)


En passant et pour finir, tu déclares ta page en XHTML 1.0 Transitional mais tu y mets du code HTML tel que celui-ci:
<BODY BGCOLOR="#ffffff" LINK="#0033cc" VLINK="#800080" ALINK="#ff0000">
Quelque chose me dit que pour (X)HTML aussi il faudrait une bonne révision (ou un apprentissage...). Smiley cligne
Modifié par Florent V. (20 Jan 2008 - 15:45)
Houla ça m'a l'air bien compliqué tout ça Smiley ohwell

Si je résume mon site est complètement faux et je dois tout refaire Smiley smile Quel désastre.

Merci pour toutes les explications.