28172 sujets

CSS et mise en forme, CSS3

Bonjour à tous
En mettant une image en float left avec du texte composée de balises p et ul, il se trouve que les puces de cette liste passent sous (ou sur, selon le navigateur) les images. Avec une image en float right, pas de soucis vu que la liste se retrouve à gauche de l'image.
le but étant d'avoir du texte qui épouse la forme de l'image...


<img src="#" width="230" height="230" />
<p>bla bla bla</p>
<ul>
<li>blo blo blo</li>
<li>blu blu blu</li>
</ul>


D'avance merci
Modifié par eurz (29 May 2009 - 10:00)
C'est balo, j'ai meme pas posé ma question...
Est il possible de faire en sorte que les puces ne passent pas par dessus ou en dessous de l'image dans le cas où mon image serait placée à gauche. J'ai tenté un "list-style-position: inside"--> ça résouds le problème mais du coup la liste n'a plus le même aspect Smiley murf et chaque élément de liste se retrouve "indentée".....

Merci pour vos réponses
Si tu essaies de réinitialiser les valeurs margin et padding qui sont différentes selon les navigateurs pour la balise ul ça devrait aller ...

Genre :

margin-left : 0;
padding-left : 20px;
J'avais deja fais ces modifs, et voici le mieux que j'ai pu obtenir ( avec la puce en dehors des <li>)
upload/20685-capture.jpg

Merci
C'est presque ça
upload/20685-capture2.jpg
Il manque juste un petit décalage à gauche pour que les puces soient au moins alignées avec les paragraphes comme sur la nouvelle capture écran...

Je crois qu'il n'y a pas de remède pour ce cas précis Smiley murf
Le padding n'y fait rien dans ce cas Smiley bawling
Voici le un bout du html issu de cette page :

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans nom</title>
<style type="text/css">
<!--
* {
	margin: 0px;
	padding: 0px;
}
body { font: normal 12px verdana; background: #F5F5F5; width: 500px; margin: 0 auto;  }
p { line-height: normal; margin: 0 0 8px 0; }
ul { padding-left: 30px}
li { margin-bottom: 6px }
img { float: left; margin: 0 10px 10px 0; }

#page { background: #FFF; padding: 5px }
-->
</style>
</head>

<body>
<div id="page">
<img src="" alt="" name="fgfhfhf" width="230" height="230" id="fgfhfhf" style="background: #CCC; " /><p>Praesent et dolor quam, ut elementum ante. Nulla facilisi. </p>
<p>Nulla sapien justo, volutpat sed adipiscing eu, aliquam ac augue. Suspendisse pretium libero et ligula gravida euismod? Ut convallis tincidunt </p>
<ul>
    <li>odio sit amet tincidunt. Pellentesque ut tortor neque, nec ultricies velit. Pellentesque habitant morbi tristique senectus et netus</li>
    <li>et malesuada fames ac turpis egestas. Sed molestie porttitor mi a fermentum. Fusce ac purus odio. Lorem ipsum dolor sit</li>
    <li>amet, consectetur adipiscing elit. Nam consectetur elementum lectus sit amet bibendum. Suspendisse vulputate consectetur</li>
    <li>orci, sit amet scelerisque velit auctor vitae. Ut molestie arcu vitae ante mattis ut viverra nulla semper. Duis scelerisque.<br />
    </li>
</ul>
</div>
</body>
</html>


upload/20685-capture3.jpg
Ca reste un mystère . Qu'en pensez vous? mon code est il correct?

Merci Smiley murf
Bonjour,
je me heurte exactement au même problème depuis quelques temps.
J'ai essayé en vain tout un tas de méthodes...
Je suis preneur d'une solution si elle a été trouvée !
Merci d'avance !
eurz a écrit :
Ca reste un mystère.

Heu... non, c'est pas un mystère, ça s'appelle le positionnement flottant et ça marche comme ça.

eurz a écrit :
Qu'en pensez vous?

Que c'est un comportement normal. En temps normal, les éléments flottants ne repoussent pas les blocs, mais uniquement leur contenu (texte, images, tableaux, etc.). Or, il s'avère qu'une puce en list-style-position: outside (par défaut) est alignée horizontalement non pas par rapport au texte, mais par rapport aux limites de l'élément qui la porte (un élément LI, ici).

Il n'y a pas de solution miracle. Une piste serait d'utiliser list-style-position:inside combiné à un text-indent négatif.
Modifié par Florent V. (23 May 2009 - 01:06)
Bonjour,
merci pour tes précisions Florent.
Je viens de les appliquer et le résultat est parfait, par contre le text-indent doit être positif.

Voici le code qui correspond :

<ul style="list-style-position:inside; text-indent: +20px">
Salut les gens
Merci pour ces réponses, et néanmoins, Heringdal, cette piste chez moi ne marche nin avec un indent positif ni un indent négatif....

Eurz
Refait un test, seule solution trouvée (en quatre étapes):
1. utiliser un contexte de formatage sur chaque LI via un overflow:hidden pour que le LI soit repoussé complètement par le flottant (ce qui signifie que le texte d'un LI donné ne peut pas s'enrouler autour du flottant);
2. supprimer les puces par défaut;
3. utiliser une padding-left sur les LI pour faire le retrait de gauche des items (mettre padding-left et margin-left des listes à zéro);
4. utiliser une image de fond comme puce des LI.
Salut,

Florent, j'ai testé ta solution:
effectivement, celle ci pousse le <li> à droite et j'obtiens l'alignement voulu des puces. Seul hic-->si la liste est plus grande que l'image, il y a beaucoup de vide sous l'image.

J'ai testé la solution suivante ( FF3, IE 7, IE6, safari) :

ul, ol
li
{    list-style-image: url(images/puceUl.gif);
  position: relative;
  left: 1.2em;
  margin-right: 1.2em;
  margin-bottom:1em;
}
img { position: relative;
}

Le résultat est plus proche de ce que je recherchai. Ce bout de code css vous semble t il "défaillant"?

Merci,
Eurz
upload/20685-listeapuce.gif
eurz a écrit :
Ce bout de code css vous semble t il "défaillant"?

Oui: le premier sélecteur contient apparemment une erreur (les éléments visés sont tous les UL d'une part, et tous les LI contenus dans des OL d'autre part).

En dehors de ça, j'avoue ne pas voir dans ce code ce qui empêche la puce de se placer sous l'image ou à gauche de l'image flottante. On peut voir une page en ligne avec cette solution?
Florent V. a écrit :
En dehors de ça, j'avoue ne pas voir dans ce code ce qui empêche la puce de se placer sous l'image ou à gauche de l'image flottante. On peut voir une page en ligne avec cette solution?

Salut,

Au contraire, ça me parait tout à fait logique. La dernière ligne de l'avant dernier li ne pouvant pas se mettre sous l'image (il semblerait que la hauteur de la ligne force celle-ci à se mettre à côté), c'est le suivant (ici le dernier) qui s'y met, mais en prenant en compte le margin-bottom de 1em sur chacun des li.

Cela dit, c'est encore plus valable si ce n'est pas le code qu'il nous montre qui génère cet aperçu (ce qui me fait dire ça est l'absence de float sur l'image en question) mais qu'il a un overflow:hidden sur chacun des li, où là même si plusieurs lignes du li concernaient pourraient se mettre sous l'image flottante, ça ne serait pas le cas et ce n'est que le li suivant qui s'y mettrait (avec un grand espace blanc dans le cas où l'avant dernier li est long).
Salut
Excusez moi mais il me semble que mon dernier bout de css n'etait pas très clair. Je n'y ai mis que le code concernant le <li>.
Flo --> effectivement mon premier selecteur comportait une erreur: les UL et Ol ne sont pas concernés
Agylus --> l'image est en float, ou bli de ma part.
Donc pour mettre tout ca au clair, voici le html + css:

<!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><title>Des puces en images</title>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/"/>

<style type="text/css">
<!--
html,body,div,dl,dt,dd,ul,ol,li,pre,form,input,p,blockquote,th,td{margin:0;padding:0;}
img,body,html,table {border:0;}
ul,ol{ padding: 20px;  }
address,caption,cite,code,dfn,em,strong,th,var{ }
body {
	background: #F0F0E6;
	color: #363634;
}
#page { background: #FFF;
	width: 650px; margin: 0 auto;
}
body, td, th { font-size: 13px; font-family: "Trebuchet MS", "Lucida grande", Arial, Helvetica, sans-serif}
#content { padding: 10px; font-size: 100%;}


#content li {
  font-family: Verdana, Arial, Helvetica, Geneva, sans-serif;
  color: black;
  list-style-image: url(images/puceUl.gif);
  position: relative;
  left: 1.2em;
  margin-right: 1.2em;
  margin-bottom: 1em;
}


#background li {
}
img { float: left;background: #CCC; margin:0 1.2em 8px 0; position: relative}
-->
</style>
</head>

<body>
<div id="page">
<h1>Annexe : Des puces en images</h1>
<div id="content">
<img name="test" src="" width="330" height="330" alt="" />
<h2 id="classique">La solution list-style-image avec un positionnement relatif?</h2>
    <ul>
      <li>Duis metus quam, suscipit non sagittis ac, rutrum ac tellus. Donec ut lorem eget tellus sagittis gravida in nec purus.</li>
      <li> Nam eleifend vulputate sapien ut posuere! Quisque tempus risus id justo rutrum luctus! Pellentesque sodales placerat ligula in congue.</li>
      <li> Proin quam diam, fringilla sit amet mollis non, aliquet at nisi! Sed justo neque, sollicitudin eget interdum sit amet, mattis at ipsum.</li>
      <li> Sed cursus egestas ante hendrerit consequat. Nam accumsan lectus in massa sodales non imperdiet mi ornare. Maecenas justo nibh, facilisis sed interdum eget; pretium vel nulla. Nulla hendrerit malesuada pharetra. Morbi eleifend odio quis nisi egestas malesuada? Fusce convallis.<br />
      </li>
    </ul>
</div>

</div>
</body>
</html>



Smiley murf
Chalut,

Il semble qu'il y ait eu embrouillade. Je résume:
- Florent et Agylus ont proposé des <li> avec une puce en image et un overflow: hidden
a cela j'ai répondu que si l'un des élément de liste était trop long ==> ca laisse du blanc sous l'image, si l'un des <li> à droite est trop long.
- Eurz a proposé des <li> avec un positionnement relatif, un left: 1.2em, un margin-right: 1.2em et une puce normale ==> ca ne laisse pas de blanc, le <li> trop long adopte la forme de l'image.

Smiley cligne