28172 sujets

CSS et mise en forme, CSS3

Bonjours,

J'ai un soucis,
je voudrais savoir s'il est possible ( sans tableau ) d'avoir 2 colonnes (de longueur de contenu texte inconnu), créés avec des div en float, et avoir un border left sur la seconde pour séparer les 2. Mais que ce border aille jusqu'en bas quel que soit la hauteur du contenu des 2 colonne,

en gros je veux ca :
upload/15741-test.jpg

Voila mon code css :

<style type="text/css">
<!--
#contener {
width:450px;
text-align:justify;
}
#colonneLeft {
width: 200px;
float: left;
}
#colonneRight {
width: 200px;
float: right;
border-left: 1px solid #FF0000;
padding-left: 25px;
}
-->
</style>


code html

<div id="contener">
<div id="colonneLeft">Lorem dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</div>
<div id="colonneRight">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam </div>
</div>


Merci.
Bonjour,

Technique des colonnes factices:
http://www.pompage.net/pompe/colonnesfactices/

Ici, on aura une image de fond répétée en hauteur attribuée à div#contener.

On veillera à bien utiliser les propriétés background-image, background-position et background-repeat, ou la propriété raccourci background. Il faudra réviser leur fonctionnement s'il n'est pas bien connu.

Autre solution possible:

<!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" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Test</title>
	<style type="text/css" media="screen">
	div.container {
		overflow: hidden;
		width: 500px;
		margin: 20px auto;
		padding: 15px;
		border: solid 1px green;
	}
	div.container p {
		margin: 0;
		font: .8em/1.4 Arial, Helvetica, sans-serif;
	}
	div.container p + p {
		margin-top: .5em;
	}
	div.left {
		float: left;
		width: 235px;
		padding-right: 15px;
		border-right: solid 1px red;
		text-align: right;
	}
	div.right {
		margin-left: 250px;
		padding-left: 15px;
		border-left: solid 1px red;
	}
	</style>
</head>

<body>

<div class="container">
	<div class="left">
	<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.</p>
	</div>
	<div class="right">
	<p>Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim.</p>
	</div>
</div>

<div class="container">
	<div class="left">
	<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.</p>
	<p>Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.</p>
	</div>
	<div class="right">
	<p>Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie.</p>
	</div>
</div>

<div class="container">
	<div class="left">
	<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet.</p>
	</div>
	<div class="right">
	<p>Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim.</p>
	<p>Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus.</p>
	</div>
</div>

</body>
</html>

Explication: les flottants survolent les blocs et ne repoussent que leur contenu, sauf si ces blocs:
- définissent un contexte de formatage (via un overflow: auto ou overflow: hidden, notamment);
- sont dotés du layout dans Internet Explorer.
(Le deuxième point est spécifique à Internet Explorer et ne correspond pas à un comportement standard. Voir la FAQ du forum à propos du HasLayout.)
Modifié par Florent V. (12 Feb 2008 - 14:28)
Bouh... Pourquoi diable passer par des colonnes factices et une image ? Smiley cligne

- dupliquer la bordure et le padding sur le côté droit de la colonne de gauche
- utiliser le positionnement relatif sur la colonne de droite pour que les deux bordures se confondent.
Laurent Denis a écrit :
Bouh... Pourquoi diable passer par des colonnes factices et une image ? Smiley cligne

- dupliquer la bordure et le padding sur le côté droit de la colonne de gauche
- utiliser le positionnement relatif sur la colonne de droite pour que les deux bordures se confondent.

Oui, j'étais en train de tester ça. Par contre je ne suis pas passé par le positionnement relatif, que l'on pourrait utiliser mais qui n'est pas indispensable ici.
Et tant qu'à faire, le même genre de chose sur trois colonnes (avec donc deux filets qui tous deux ont la hauteur de la plus grande colonne):
<!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" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Test</title>
	<style type="text/css" media="screen">
	body {font-size: 100%;}
	div.container {
		overflow: hidden;
		width: 500px;
		margin: 20px auto;
		padding: 15px;
		border: solid 1px green;
	}
	div.container p {
		margin: 0;
		font: .8em/1.4 Arial, Helvetica, sans-serif;
	}
	div.container p + p {
		margin-top: .5em;
	}
	div.container div {
		float: left;
		width: 134px;
		padding: 0 15px;
		border: solid red;
		border-width: 0 1px;
	}
	div.left {
		position: relative;
		left: 166px;
	}
		div.left p {
			position: relative;
			left: -166px;
		}
	div.right {
		position: relative;
		right: 166px;
	}
		div.right p {
			position: relative;
			right: -166px;
		}
	</style>
</head>

<body>

<div class="container">
	<div class="left">
	<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.</p>
	</div>
	<div class="center">
	<p>Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus.</p>
	<p>Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue.</p>
	</div>
	<div class="right">
	<p>Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim.</p>
	</div>
</div>

<div class="container">
	<div class="left">
	<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.</p>
	<p>Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.</p>
	</div>
	<div class="center">
	<p>Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus.</p>
	</div>
	<div class="right">
	<p>Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie.</p>
	</div>
</div>

<div class="container">
	<div class="left">
	<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet.</p>
	</div>
	<div class="center">
	<p>Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus.</p>
	<p>Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim.</p>
	</div>
	<div class="right">
	<p>Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim.</p>
	<p>Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus.</p>
	</div>
</div>

</body>
</html>

C'est du bidouillage sympathique mais un peu casse-gueule. Smiley cligne
Merci pour votre réponse super rapide !!

j'avais en effet penser à la solution de l'image en fond,
je cherchai autre chose ...

je préfère nettement la solution des deux bordures qui se confondent.

Merci Smiley biggrin

+