prévenir :après l'élément d'habillage à la ligne suivante
J'ai ce code HTML:
<ul>
<li class="completed"><a href="#">I want the icon to stay on the same line as this last <strong>word</strong></li>
</ul>
Je suis ajoutant une icône à l'aide de l' :après le pseudo-élément:
ul li.completed a:after {
background:transparent url(img.png) no-repeat;
content: '';
display:inline-block;
width: 24px;
height: 16px;
}
Le problème: si la largeur disponible est trop faible, l'icône passe à la ligne suivante. J'ai envie de rester sur la même ligne que le dernier mot du lien il est annexé:
Est-ce faisable, sans ajout de 'nowrap' pour le lien (je veux les paroles de wrap, tout simplement pas l'icône).
Voir jsFiddle ici.
- Pourriez-vous modifier le HTML? Ou êtes-vous coincé avec elle?
- Oui, je peux modifier le code HTML..
Vous devez vous connecter pour publier un commentaire.
vous pouvez ajouter l'image à la parole en dernier lieu. qui permettra de faire pause ensemble.
ajouter une classe à mot
<strong class="test">word</strong>
et
.test:after { ...
http://jsfiddle.net/52dkR/
l'astuce consiste aussi à faire de cette classe à être
inline-block
et si vous voulez garder le soulignement de voir cela.
http://jsfiddle.net/atcJJ/
ajouter
text-decoration:inherit;
<span class="icon">
à chaque dernier mot, et ajouté l'icône de cettespan
JSFiddle - http://jsfiddle.net/Bk38F/65/
Ajouter une marge négative de la pseudo-élément, pour compenser sa largeur:
Maintenant, que va faire l'icône de dépassement de capacité du conteneur et de la ligne va briser uniquement lorsque le texte répondre à la fin de la ligne. Si vous avez besoin de maintenir l'icône à l'intérieur de l'emballage d'origine de la largeur, vous pouvez ajouter un rembourrage pour compenser nouveau:
MISE À JOUR IMPORTANTE:
Pour que cette méthode fonctionne, il doit y avoir aucun espace entre le texte et la balise fermante de l'élément de la tenue de la pseudo-élément. Même si le pseudo élément de largeur est compensée par une marge négative, l'espace blanc qui va faire le saut de ligne quand il rencontre le bord de l'élément parent. Par exemple, cela fonctionne:
et ce n'est pas:
width:26px;
et2px 0
comme arrière-plan à la position de la déplacer. jsfiddle.net/Bk38F/23C'est un peu similaire à une précédente réponse, mais j'ai pensé que j'avais la chair et de l'expliquer entièrement.
Dès que vous mettez
display: inline-block
,:after
devient un non-texte-élément de liaison. C'est pourquoi il s'enroule, et pourquoi nowrap n'a aucun effet. Laissez doncdisplay
seul.Que c'est un élément de texte par défaut, le contenu se lie à un texte précédent, tant qu'il n'y a pas d'espace entre eux. Afin de ne pas ajouter, mais assurez-vous d'avoir
content: ""
, ou c'est le même quedisplay: none
. Le seul problème estheight
etwidth
sont contrôlés par lecontent
, qui dans ce cas est effondré. Doncwidth
est0
, etheight
est la hauteur de la ligne.Redimensionner la zone avec un rembourrage; à gauche ou à droite, il n'a pas d'importance. Ajouter un peu de
margin
si l'icône ne touche pas le texte. Garder tout aussi tailles relatives (em
,pt
, etc.), et l'utilisationbackground-size: contain
, de sorte que l'icône de la balance avec le texte, comme un emoji ou de la police. Enfin, la position de l'icône où vous voulez avecbackground-position
.J'ai utilisé pour mes liens externes (
a[href*="://"]:after
), et ça a bien fonctionné dans Firefox, Chrome et iOS. Et depuis l'icône reste un élément de texte, même texte direct après il se lie, de sorte que toute la fermeture de la ponctuation envelopper trop.:after
. Une idée de comment le faire fonctionner pour:before
ainsi?J'ai eu le même problème. Je n'ai pas vraiment aimé l'idée d'ajouter des solides ou des balises span pour le dernier mot, alors j'ai tout simplement essayé de l'ajout de l'icône de l'image d'arrière-plan avec quelques padding-right au lieu de l'aide de l' :après ou :avant de pseudo-éléments. A fonctionné pour moi!
http://jsfiddle.net/atcJJ/36/
Assurez-vous de la fin de la balise avant de
Essayer le css ci-dessous. Au lieu d'utiliser "après" utilisation "avant" et un flotteur droit.
Veuillez vérifier ceci:
http://jsfiddle.net/supriti/atcJJ/7/
J'ai été de tenter cela avec un bouton de lien et a eu le plus de succès avec l'ajout de remplissage vers la droite de l'élément @Hugo Silva a suggéré, alors la configuration de l' ::après de position absolue. C'était un joli solution simple et semble fonctionner dans les navigateurs modernes.
Voici un JS Fiddle.
Si à l'aide d'une icône de la police: à l'Aide de la "espace insécable" unicode
\00a0
avec le pseudo-élément de contenu (dans ce cas, une Police Génial glyphe).Cela fonctionne sans aucun supplément de mark-up ou une mise en forme spéciale ou les noms de classe.
La
line-height: 0;
partie garde les lignes de secousses lorsque le dernier "mot + icône" wrap.CodePen exemple
Il est possible de le faire sans
:after
.L'élément d'arrière-plan doit être
display:inline
.http://jsfiddle.net/my97k7b1/