J'ai une page (XHTML Strict) où je flotter une image à côté de paragraphes de texte normaux. Tout se passe bien, sauf lorsqu'une liste est utilisée à la place de paragraphes. Les puces de la liste chevauchent l'image flottante.
La modification de la marge de la liste ou des éléments de la liste n'aide pas. La marge est calculée à partir de la gauche de la page, mais le flottant pousse les éléments de la liste vers la droite à l' intérieur d'li
elle - même. Ainsi, la marge n'aide que si je la fais plus large que l'image.
Faire flotter la liste à côté de l'image fonctionne également, mais je ne sais pas quand la liste est à côté d'un flottant. Je ne veux pas faire flotter chaque liste de mon contenu juste pour résoudre ce problème. De plus, le flottement à gauche gâche la mise en page lorsqu'une image flotte vers la droite au lieu de la gauche de la liste.
Le réglage li { list-style-position: inside }
déplace les puces avec le contenu, mais il amène également les lignes qui s'enroulent à commencer alignées avec la puce, au lieu d'être alignées avec la ligne ci-dessus.
Le problème est évidemment causé par le rendu de la balle à l'extérieur de la boîte, le flotteur poussant le contenu de la boîte vers la droite (pas la boîte elle-même). C'est ainsi que IE et FF gèrent la situation, et pour autant que je sache, pas mal selon les spécifications. La question est, comment puis-je l'empêcher?
Ajout d'une amélioration à la solution de Glen E. Ivey :
http://jsfiddle.net/mblase75/TJELt/
Je préfère cette technique, car elle fonctionne lorsque la liste doit circuler autour de l'image flottante,
overflow: hidden
contrairement à la technique. Cependant, il est également nécessaire d'ajouterpadding-right: 1em
à lali
pour les empêcher de déborder de leur conteneur.la source
position: relative;
à l'élément de campagne, cela crée un problème d'empilement avec le contenu flottant. J'ai trouvé (dans Chrome et Firefox) qu'il était difficile de survoler et de cliquer sur des liens dans le contenu flottant. Le correctif pour moi était d'ajouterposition: relative; z-index: 1;
à l'élément flottant, ce qui semblait résoudre le problème d'empilement.ul {overflow: hidden;}
ce problème a été résolu dans tous les navigateurs, la solution ci-dessus était le seul remède efficace à ce problème avec Prince XML , un convertisseur XHTML + CSS3 en PDF.C'est là que la propriété "display" prend tout son sens. Définissez le CSS ci-dessous pour que la liste fonctionne avec le contenu flottant.
affichage: table; fonctionne avec le contenu flottant (comblant le vide) mais sans cacher le contenu derrière lui. Un peu comme une table :-)
EDIT: N'oubliez pas d'ajouter une classe pour isoler les listes pour lesquelles vous souhaitez faire cela. Par exemple "ul.in-content" ou plus généralement ".content ul"
la source
Essayez list-style-position: inside pour changer la disposition des puces.
la source
list-style-position:inside
serait une excellente solution, mais fait que les lignes qui s'enroulent commencent alignées avec la puce, au lieu d'être alignées avec la ligne ci-dessus.Sur http://archivist.incutio.com/viewlist/css-discuss/106382, j'ai trouvé une suggestion qui a fonctionné pour moi: stylisez les éléments 'li' avec:
Où vous remplacez "1em" par la largeur du remplissage / marge gauche que vos éléments de liste auraient si le flottant n'était pas présent. Cela fonctionne très bien dans mon application, même en traitant le cas où le bas du flottant se trouve au milieu des listes - les puces reviennent à la marge gauche (locale) juste à droite.
la source
Pourquoi ça
overflow: hidden
marcheLa solution est aussi simple que:
Une boîte de bloc avec
overflow:
autre quevisible
établit un nouveau contexte de formatage de bloc pour son contenu. Recommandation W3C: http://www.w3.org/TR/CSS2/visuren.html#block-formattingExemple
Les boutons de mon site Web , qui sont
<li>
déguisés, sont faits comme ça. Réduisez la taille de la fenêtre (fenêtre) de votre navigateur pour voir l' indentation en action .Réponses connexes
Article avec exemples
la source
En ajoutant
overflow: auto;
à vosul
œuvres au moins pour moi.Mettre à jour
J'ai mis à jour mon jsfiddle pour visualiser ce qui se passe. Lorsque vous avez le
ul
côté flottantimg
, le contenu duul
sera poussé par le flotteur, mais pas le conteneur réel. En ajoutantoverflow: auto
l'ensemble, laul
boîte sera poussée par le flotteur au lieu de seulement le contenu.la source
Vous pouvez attribuer
position: relative; left: 10px;
auli
. (Vous pouvez également lui donner unmargin-right: 10px;
, sinon il risque de devenir trop large sur le côté droit.)Ou, si vous souhaitez utiliser
float
pour leul
- comme suggéré par d'autres - vous pouvez probablement empêcher le reste de flotter à droite de l'ul en utilisantclear: left
l'élément qui suit l'ul.la source
J'utilise ceci pour résoudre ce problème:
la source
Avertissement
Les listes à côté des éléments flottants posent des problèmes. À mon avis, le meilleur moyen d'éviter ce type de problèmes flottants est d'éviter les images flottantes qui se croisent avec le contenu. Cela aidera également lorsque vous devrez prendre en charge la conception réactive.
Une conception simple consistant à centrer des images entre les paragraphes semblera très attrayante et sera beaucoup plus facile à supporter que d'essayer d'être trop sophistiquée. C'est aussi à un pas d'un
<figure>
.Mais je veux vraiment des images flottantes!
Ok, donc si tu es
fouassez persistant pour continuer dans cette voie, il y a des techniques de couple qui peuvent être utilisés.Le plus simple est de faire en sorte que la liste utilise
overflow: hidden
ouoverflow: scroll
pour que la liste soit essentiellement réduite, ce qui ramène le remplissage là où il est utile:Cette technique présente cependant quelques problèmes. Si la liste devient longue, elle ne s'enroule pas réellement autour de l'image, ce qui va à l'encontre de l'objectif de l'utilisation
float
de l'image.Mais je veux vraiment emballer des listes!
Ok, donc si vous êtes encore
plus fou,plus persévérant et vous devez absolument continuer sur cette voie, il existe une autre technique qui peut être utilisée pour envelopper les éléments de la liste et maintenir les puces.Au lieu de remplir le
<ul>
et d'essayer de le faire se comporter correctement avec des balles (ce qu'il ne semble jamais vouloir faire), retirez ces balles du<ul>
et donnez-les au<li>
s. Les balles sont dangereuses, et le<ul>
juste n'est pas assez responsable pour les gérer correctement.Ce comportement d'encapsulation peut faire des choses étranges sur du contenu complexe, je ne recommande donc pas de l'ajouter par défaut. Il est beaucoup plus facile de le configurer comme quelque chose qui peut être choisi plutôt que comme quelque chose qui doit être remplacé.
la source
Essayez ce qui suit sur votre étiquette UL. Cela devrait prendre en charge les puces superposées à votre image et vous n'avez pas à gâcher votre alignement gauche causé par
list-position: inside
.la source
J'ai lutté avec cela moi-même. Le mieux que j'ai réussi est le suivant:
Le texte n'est pas réellement en retrait mais la puce apparaît.
la source
Modifié pour mettre à jour en fonction du commentaire d'OP
ok, puis divisez-le en 2 div imbriqués ensemble
essayez de changer le css ul li en
ul {float: gauche; fond: bleu; }
la source
Après avoir combattu ce problème intéressant dans plusieurs projets et étudié pourquoi cela se produit, je crois enfin avoir trouvé les deux: une solution fonctionnelle et «réactive» .
Voici le tour de magie, exemple en direct: http://jsfiddle.net/superKalo/phabbtnx/
la source
display: flex;
àli
, de sorte que la puce soit centrée verticalement, lorsque je change la taille de la police de la:before
pièce.Travailler dans un LMS sans accès à la tête du document a trouvé plus facile à utiliser en
margin-right: 20px
tant que style en ligne pour l'image. Ce que je dois à ce site .la source
essaye ça:
Si vous voulez qu'ils partent à gauche, entrez simplement une valeur - ## px.
la source
ou vous pouvez faire ceci:
puis supprimez tout le style de la li
la source
Que dis-tu de ça?
la source
margin-left: auto fera que l'élément lui-même sera aligné à droite. Définissez la hauteur et la largeur de l'élément souhaité - dans mon cas, c'est une image d'arrière-plan dans un div à l'intérieur
la source
Vous pouvez également essayer de faire flotter le
ul
vers la gauche et définir unwidth
, de sorte qu'il flotte à côté de l'image.Quelque chose d'un peu comme ça jsfiddle ?
la source
Je l'ai réparé avec
la source
la source
Ajouter
display:table;
àul
:la source