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 se termine, il ne soit pas placé 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 qu'il 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.
Étant donné que cette question suscite beaucoup d'opinions et que c'était la réponse acceptée, j'ai ressenti le besoin d'ajouter la clause de non-responsabilité suivante:
Cette réponse était spécifique à la question du PO (qui avait la largeur définie dans les exemples). Bien que cela fonctionne, il vous faut une largeur sur chacun des éléments, l'image et le paragraphe. À moins que ce ne soit votre exigence, je vous recommande d'utiliser solution de Joe Conlin qui est affichée comme une autre réponse à cette question.
L'élément span
est un élément en ligne, vous ne pouvez pas changer sa largeur en CSS.
Vous pouvez ajouter le code CSS suivant à votre étendue pour pouvoir en modifier la largeur.
display: block;
Une autre façon, qui a généralement plus de sens, consiste à utiliser un <p>
élément en tant que 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>
Puisque <p>
est un élément block
, vous pouvez définir sa largeur à l’aide de CSS, sans rien modifier.
Mais dans les deux cas, étant donné que vous avez maintenant un élément de bloc, vous devez faire flotter l'image pour que votre texte ne passe pas tous en dessous de votre image.
li p{width: 100px; margin-left: 20px}
.fav_star {width: 20px;float:left}
P.S. Au lieu de float:left
sur l'image, vous pouvez aussi mettre float:right
sur li p
mais dans ce cas, vous aurez également besoin de text-align:left
pour réaligner le texte correctement.
P.S.S. Si vous avez opté pour la première solution consistant à ne pas ajouter de <p>
élément, votre CSS devrait ressembler à ceci:
li span{width: 100px; margin-left: 20px;display:block}
.fav_star {width: 20px;float:left}
Réponse très simple à ce problème qui semble attirer 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/
Pour ceux qui veulent des informations générales, voici un article court expliquant pourquoi overflow: hidden
travaux. Cela a à voir avec le soi-disant contexte de formatage de bloc . Cela fait partie des spécifications du W3C (c’est-à-dire qu’il ne s’agit pas d’un hack) et est fondamentalement 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 contexte de formatage de bloc nouveau. Mais ce n'est pas la seule propriété capable de déclencher ce comportement. Citant un présentation par Fiona Chan du groupe Sydney Web Apps:
- float: gauche/droite
- débordement: masqué/auto/défilement
- display: table-cell et toutes les valeurs liées à la table/inline-block
- position: absolue/fixe
Si vous voulez le margin-left
pour travailler sur un élément span
, vous devrez le rendre display: inline-block
ou display:block
ainsi que.
réglage display:flex
pour le texte a fonctionné pour moi.
Enveloppez une div autour de l’image et de la plage et ajoutez ce qui suit au CSS comme ceci:
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%;
}
}