J'ai le balisage suivant:
<li id="CN2787">
<img class="fav_star" src="images/fav.png">
<span>Text, text and more text</span>
</li>
Je le veux pour que si le texte s'habille, il n'entre pas dans la «colonne» de l'image. Je sais que je peux le faire avec un table
(ce que je faisais) mais ce n'est pas réalisable pour cette raison .
J'ai essayé ce qui suit sans succès:
li span {width: 100px; margin-left: 20px}
.fav_star {width: 20px}
J'ai aussi essayé float: right
.
Merci.
EDIT: Je veux que cela ressemble à ceci:
IMG Text starts here and keeps going... and
wrap starts here.
Pas comme ça:
IMG Text starts here and keeps going... and
wrap starts in the space left for the image.
white-space: nowrap;
dansli span {...}
, mais je l'impression que vous essayez de faire quelque chose d' autreRéponses:
L'
span
élément est un élément en ligne, vous ne pouvez pas changer sa largeur en CSS.Vous pouvez ajouter le CSS suivant à votre span afin de pouvoir modifier sa largeur.
display: block;
Une autre façon, qui a généralement plus de sens, consiste à utiliser un
<p>
élément comme parent pour votre<span>
.<li id="CN2787"> <img class="fav_star" src="images/fav.png"> <p> <span>Text, text and more text</span> </p> </li>
Puisqu'il
<p>
s'agit d'unblock
élément, vous pouvez définir sa largeur en utilisant CSS, sans rien changer.Mais dans les deux cas, puisque vous avez un élément de bloc maintenant, vous devrez faire flotter l'image afin que votre texte ne passe pas tout en dessous de votre image.
li p{width: 100px; margin-left: 20px} .fav_star {width: 20px;float:left}
PS Au lieu de
float:left
l'image, vous pouvez aussi mettrefloat:right
sur ,li p
mais dans ce cas, vous aurez également besointext-align:left
de réaligner le texte correctement.PSS Si vous avez opté pour la première solution consistant à ne pas ajouter d'
<p>
élément, votre CSS devrait ressembler à ceci:li span{width: 100px; margin-left: 20px;display:block} .fav_star {width: 20px;float:left}
la source
span
en unp
élément. Alors que ces deux semblait faire l'affaire:li p {margin-left: 40px} .fav_star {float: left}
. La largeur de l'image est définie par l'image elle-même, l'p
élément est automatiquement ablock
et j'ai laissé la largeur seule. Merci pour cela.display:block
comptez utiliser, vous pouvez tout aussi bien utiliser adiv
puisque c'est à cela qu'il sert (ou utiliser ap
comme vous le suggérez également). Il n'est pas nécessaire de doubler le texte - si vous utilisez un,p
vous pouvez perdre lespan
.div
, dans ce cas, a ap
plus de sens. Perdre lespan
est un peu trivial pour moi et dépend de la manière dont vous présentez votre contenu.<span>
dans une<p>
sorcellerie est tout droit sorti de Hogwartz! Fonctionne à merveille!Réponse très simple à ce problème qui semble attraper beaucoup de monde:
<img src="url-to-image"> <p>Nullam id dolor id nibh ultricies vehicula ut id elit.</p> img { float: left; } p { overflow: hidden; }
Voir exemple: http://jsfiddle.net/vandigroup/upKGe/132/
la source
span
(le cas de l'OP). Undisplay: block
serait nécessaire pour lespan
. Mais, en gardant cela, je suis d'accord que c'est une solution beaucoup plus élégante. Au cas où quelqu'un se demanderait quelle est la magie derrièreoverflow: hidden
, voir ma réponse ci-dessous.Pour ceux qui veulent des informations générales, voici un court article expliquant pourquoi cela
overflow: hidden
fonctionne. Cela a à voir avec le soi-disant contexte de formatage de bloc . Cela fait partie de la spécification du W3C (c'est-à-dire n'est pas un hack) et est essentiellement la région occupée par un élément avec un flux de type bloc.Chaque fois qu'il est appliqué,
overflow: hidden
crée un nouveau contexte de formatage de bloc. Mais ce n'est pas la seule propriété capable de déclencher ce comportement. Citant une présentation de Fiona Chan de Sydney Web Apps Group:la source
Si vous voulez que le
margin-left
travail sur unspan
élément, vous devrez le fairedisplay: inline-block
oudisplay:block
aussi.la source
vertical-align: top;
sur l'image avec cela aussi.le réglage
display:flex
du texte a fonctionné pour moi.la source
overflow:auto
. Je suis sûr que cela ne fonctionne pas exactement de la même manière dans toutes les situations, mais cela a également fonctionné pour moi.Enroulez un div autour de l'image et de la plage et ajoutez ce qui suit au CSS comme suit:
HTML
<li id="CN2787"> <div><img class="fav_star" src="images/fav.png"></div> <div><span>Text, text and more text</span></div> </li>
CSS
#CN2787 > div { display: inline-block; vertical-align: top; } #CN2787 > div:first-of-type { width: 35%; } #CN2787 > div:last-of-type { width: 65%; }
MOINS
#CN2787 { > div { display: inline-block; vertical-align: top; } > div:first-of-type { width: 35%; } > div:last-of-type { width: 65%; } }
la source